山东大学软件工程复习重点整理.docx
- 文档编号:23227555
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:21
- 大小:77.98KB
山东大学软件工程复习重点整理.docx
《山东大学软件工程复习重点整理.docx》由会员分享,可在线阅读,更多相关《山东大学软件工程复习重点整理.docx(21页珍藏版)》请在冰豆网上搜索。
山东大学软件工程复习重点整理
第一章
1.1软件工程(SE)的定义、向、作用:
SE:
在将有关软件开发与应用的概念科学体系化的基础上,研究如有计划、有效率、经济的开发和利用能在就算机上正确运行的软件的理论和技术的工程法学,一些开发和维护软件的法、过程、原则。
是一个系统工程,既有对技术问题的分析与综合,也有对开发过程和参与者的管理。
SE的向:
面向对象模式,结构化模式,基于过程的模式等
SE的作用:
付出较低的开发成本,达到要求的软件功能,取得较好的软件性能,开发的软件易于移植,需要较低的维护费用,能按时完成开发工作,及时交付使用。
1.2开发模式:
软件开发的全部过程,活动和任务的结构框架,它能直观的表达的表达软件开发全过程,明确要完成的主要活动,任务和开发策略。
1.3说明错误、故障和失效的含义及联系(并举例):
错误:
是在软件生产过程中人为产生的错误(需求说明中的错误,代码中的错误)
故障:
是在功能实现过程中产生的问题;是错误导致的结果,是在软件中一个错误的表现(一个错误可能产生多个缺陷,静态存在的)
失效:
是相对于系统指定行为的偏离,系统违背了它应有的行为(动态存在的)
联系:
当一个开发者编写程序时,会在代码中出现错误。
当这个程序被编译或集成到一个系统中时,系统就存在故障。
当你运行这个系统时,可能会导致失效,即人们产生错误,故障是错误的结果(部观角:
从开发者的角度看待问题),当故障执行时出现失效(外部视角:
从用户角度看到的问题)。
并不是所有的错误会导致故障,并非每个缺陷都对应相应的失败。
1.4软件质量应从哪几个面衡量,论述之:
(1产品的质量)(2过程的质量)(3商业环境背景下的质量)
(1)产品的质量:
用户从失败的数目和类型等外部特征进行评价,如果软件具有足够的功能并且易于学习和使用,用户就断定软件是高质量的;开发者从缺陷的数目和类型等部特征来作为产品质量的依据。
(2)过程的质量:
有很多过程都会影响到最终的产品质量,只要有活动出了差错,产品的质量就会受到影响;开发和维护过程的质量与产品的质量是同等重要的。
(3)商业环境背景下的软件质量:
将技术价值和商业价值统一起来。
1.5软件系统的系统组成(系统的要素有哪些):
对象(实体)+活动+关系+系统边界
活动:
活动是发生在系统中的某些事情,通常描述为由某个触发器引发的事件,活动通过改变属性把一个事物变成另一个事物。
对象:
活动中涉及的元素称为对象。
关系:
是指活动与对象之间的关系。
系统边界:
即系统包含的功能与系统不包含的功能之间的界限。
1.6现代软件工程大致包含几个阶段及各个阶段的文档:
(1)需求分析:
主要包括问题定义、可行性分析、需求分析《需求规格说明书》
(2)系统设计:
主要包括用户界面和软件结构图
(3)程序设计:
包括模块功能算法与数据描述
(4)程序实现:
主要包括编程的代码和注释
(5)单元测试:
模块测试与性能测试
(6)集成测试:
按照结构图进行测试产生测试报告
(7)系统测试:
按SRS对系统总体功能进行测试
(8)系统提交:
交付产品
(9)系统维修:
修改软件的过程,为满足改错或新需求
1.7使现代软件工程实践发生变化的关键因素是什么?
(1)商用产品投入市场时间的紧迫性
(2)计算技术在经济中的转变:
更低的硬件成本,更高的开发、维护成本
(3)功能强大的桌面计算的可用性
(4)广泛的局域网和广域网
(5)面向对象技术的采用及其有效性
(6)使用窗口、图标、菜单和指示器的图形用户界面
(7)软件开发瀑布模型的不可预测性
1.8什么是抽象?
抽象是在某种概括层次上对问题的描述,使得我们能够集中于问题的关键面而不陷入细节,也就是对细节的隐藏。
1.9什么是重(复)用?
重(复)用采用以前开发的软件系统中具有共性的部件,用到新的开发项目中去。
(这里的重用不仅仅是代码的重用。
)
1.10什么是软件危机?
它有哪些典型表现?
为什么会出现软件危机?
软件危机:
落后的软件生产式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列重问题的现象。
典型表现:
(1)对软件开发成本和进度的估计常常很不准确。
(2)用户对“已完成”软件系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。
(4)软件常常是不可维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发生产率提高的速度,远跟不上计算机应用迅速普及深入的趋势
出现的原因:
一面与软件本身的特点有关,另一面也和软件开发与维护的法不正确有关。
(1)软件缺乏“可见性”,管理和控制软件开发过程相当困难
(2)软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升(3)开发时期引入错误,导致软件维护通常意味着改正或修改原来的设计,客观上使得软件较难维护(4)软件专业人员对软件开发和维护中或多或少地采用了错误的法和技术
1.11开发队伍的组成角色有哪些?
需求分析人员、设计人员、程序员、测试人员、培训人员、维护人员、资料员、配置管理人员
CMM是指“能力成熟度模型”,其英文全称为CapabilityMaturityModelforSoftware,英文缩写为SW-CMM,简称CMM。
它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。
CMM的核心是把软件开发视为一个过程。
SRS(SoftwareRequirementsSpecification),软件需求说明书的编制是为了使用户和软件开发者双对该软件的初始规定有一个共同的理解,使之成为整个开发工作的基础。
包含硬件、功能、性能、输入输出、接口界面、警示信息、保密安全、数据与数据库、文档和法规的要求。
第二章
2.1什么叫过程(生命期)?
过程是一组有序的任务,它涉及活动、约束和资源使用的一系列步骤,用于产生某种想要的输出。
我们有时也把涉及产品构建的这种过程称为生命期。
因此,有时把软件开发过程称为软件生命期。
2.2什么是软件过程,软件过程的重要性是什么?
软件过程:
将软件开发中的一组有序的任务称为软件过程,它涉及活动、约束和资源使用的一系列步骤,用于产生某种想要的输出。
重要性:
(1)它强制活动具有一致性和一定的结构,使程序的集合组合起来以产生满足目标和标准的产品,
(2)过程结构允我们分析、理解、控制和改进组成过程的活动,并以此来指导我们的行动(3)它能使我们获取经验并把它创收给他人。
2.3什么是软件生命期模型?
软件生命期模型,是从一个特定角度提出的对软件过程的简化描述,是对软件开发实际过程的抽象,它包括构成软件过程的各种活动、软件工件以及参与角色等。
2.4瀑布模型及其优缺点
瀑布模型:
瀑布模型将开发阶段描述为从一个开发阶段瀑布般地转换到另外一个阶段,一个开发阶段必须在另一个开发阶段开始之前完成。
瀑布模从一种非常高层的角度描述了开发过程中进行的活动,并且提出了要求开发人员经过的时间序列。
优点:
(1)瀑布模型一直用来规软件开发活动,每一个过程活动都有与其相关联的里程碑和可交付产品,以便于项目经理能够用模型判断在某一时刻项目里最后完成还有多远。
(2)它的简单性使得开发人员很容易向不熟悉软件开发用户作出解释。
(3)很多更复杂的模型实际上是在瀑布模型的基础上的润色,如加入反馈循环以及额外的活动。
缺点:
(1)它并不能反映实际的代码开发式。
除了一些理解非常充分的问题之外,实际上软件是通过大量的迭代进行开发的。
(2)它没有揭示每一个活动如把一种制品转化为另外一种制品
(3)没有把软件看做一个问题求解的过程,而是从制造业的角度来看待软件开发的,软件开发应该是一个创造的过程,而不是制造的过程。
2.5什么是原型?
原型是一个部分开发的产品,它使客户和开发人员能够对计划开发的系统的相关面进行检查,以决定它对最终产品是否合适或恰当。
2.6V模型及其特点
V模型是瀑布模型的变种,它说明测试活动是如与分析和设计相联系的,编码处于V形符号的顶点,分析和设计在左边,测试和维护在右边。
特点:
V模型使得隐藏在瀑布模型中的迭代和重做活动更加明确。
瀑布模型关注的通常是文档和制品,而V模型关注的则是活动和正确性。
2.7原型模型
不仅仅是附属于瀑布模型的,同时也是一种有效的过程模型的基础。
原型模型允开发人员快速构造整个系统或系统的一部分以理解或澄清问题。
依据原型化的目标,可以取消原型化需求、设计或系统中的一个或多个循环,但是总体目标保持不变,即减少开发中的风险和不确定性。
2.8可转换模型
可转换模型通过去除某些主要开发步骤来设法减少出错的机会。
2.9阶段化开发模型的含义、分类和特点(运行系统和开发系统的概念)
阶段化开发模型的含义:
系统被设计为一部分一部分地交付,从而在系统其余部分正在开发的同时,用户已经获得了一部分的功能。
分类:
(1)增量开发:
系统按照功能划分为子系统,定义发布时首先定义一个小的功能子系统,然后在每一个新的发布中增加新功能。
(2)迭代开发:
一开始就提交一个完整的系统,然后在每一个新的发布中改变每个子系统的功能。
特点:
(1)即使还缺少某些功能,但在早期的发布中就可以开始培训。
(2)可以及早为那些以前从未提供的功能开拓市场。
(3)当运行系统出现未预料到的问题时,经常性的发布可以使开发人员能全面、快速地修复这些问题
(4)针对不同的发布版本,开发团队将重点放在不同的专业领域技术上。
2.10螺旋模型的含义、目的、四个象限的任务及四重迭代的含义
含义:
螺旋模型将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
目的:
把开发活动和风险管理结合起来,以将风险减到最小并控制风险。
四个象限的任务依次是:
评估可选案及风险;确定目标、可选案及约束;计划;开发与测试
四重迭代的含义:
(1)操作概念是第一次迭代的产品;
(2)需第二次迭代的主要产品;(3)第三次迭代产中,系统开发产生设计;(4)第四次迭代能够进行测试。
(5)螺旋模型的每一次迭代都根据需求和约束进行风险分析,以权衡不同的选择,并且在确定某一特定选择之前,通过原型化验证可行性或期望度。
当风险确认之后,项目经理必须决定如消除或最小化风险。
2.11敏捷法的含义、特点和目标:
含义:
以人为核心、迭代、循序渐进。
在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
特点:
(1)规则游戏
(2)小的发布(3)隐喻(4)简单设计(5)首先编写测试(6)重构(7)对编程(8)集体所有权(9)持续集成(10)可以忍受的步伐(11)在现场的客户(12)代码标准
目标:
通过尽可能早地、持续地交付有价值的软件使客户满意。
2.12在所有的软件开发模型中,你认为哪些过程给予你最大的灵活性以应对需求的变更?
阶段开发模型和螺旋模型
补充:
统一过程(UP)可以用三句话来表达:
它是用例驱动的、以基本架构为中心的、迭代式和增量性的软件开发过程框架,它使用对象管理组织(OMG(ObjectManagementGroup))的UML并与对象管理组织(OMG)的软件过程工程原模型(SPEM(SoftwareProcessEngineeringMeta-Model)软件过程工程元模型)等相兼容。
第三章
3.1什么是项目进度?
项目进度通过列举项目的各个阶段,把每个阶段分解成离散的任务或活动,来描述特定项目的软件开发期。
进度还描绘这些活动之间的交互,并估算每项任务或活动将或花费时间。
3.2什么是活动?
什么是里程碑?
活动:
活动是项目的一部分,它在一段时间发生。
里程碑:
里程碑是活动的完成---某一特定时刻。
3.3软件人员应该具备的能力是什么?
(1)完成工作的能力
(2)对工作的兴趣(3)开发类似应用的经验(4)使用类似工具或语言的经验(5)使用类似开发环境的经验(6)使用类似技术的经验(7)培训(8)与其他人交流的能力(9)与其他人共同承担责任的能力(10)管理技能
3.4软件项目组织的基本结构
3.5专家估测法的大致含义:
很多工作量估算法依赖于专家的判断。
使用专家的知识和经验,对软件项目的工作量进行评估,预测的精确性基于估算者的能力、经验、客观性和洞察力。
是对构建整个系统或其子系统所需的工作量做出经验性的猜测。
主要有类推法,Delphi技术,Wolwerton模型(该模型受变化和主观性的影响,还受当前数据相关性的影响)(x+4y+z)/6对个人估算的规化
3.6算式估算法的大致含义:
研究人员已经创建出表示工作量和影响工作量的因素之间关系的模型。
这些模型通常用程式描述,其中工作量是因变量,而其他因素是自变量。
大部分模型认为项目规模是程式中影响最大的因素,表示工作量的程式是:
E=(a+bS^c)m(X)
其中S是系统规模的估算,而a、b、和c是常量。
X是从x1到xn的一个成本因素的向量,m是基于这些因素的一个调整因子。
3.7试述COCOMO模型的三个阶段基本工作原理或含义:
在阶段一,项目通常构建原型以解决包含用户界面、软件和系统交互、性能和技术成熟性等面在的高风险问题。
这时,人们对正在创建的最终产品可能的规模知之甚少,因此COCOMOⅡ用应用点来估算规模。
在阶段二,即早期设计阶段,已经决定将项目开发向前推进,但是设计人员必须研究几种可选的体系结构和操作的概念。
同样,仍然没有足够的信息支持准确的工作量和工期估算,但是远比第一阶段知道的信息要多。
在阶段二,COCOMOⅡ使用功能点对规模进行测量。
在阶段三,即后体系结构阶段,开发已经开始,而且已经知道了更多的信息。
在这个阶段,可以根据功能点或代码行来进行规模估算,而且可以较为轻松地估算很多成本因素。
3.8什么是风险?
风险的特点是什么?
有哪几种降低风险的策略?
风险:
是一种具有负面后果的、人们不希望发生的事情。
风险的特点(区别风险和其他项目事件):
(1)与事件有关的损失:
与风险有关的损失称为风险影响
(2)事件发生的可能性:
对风险进行的测量称为风险概率
(3)更够改变结果的程度:
能降低或消除风险所采取的行动称为风险控制
(4)风险成本(风险暴露)=风险影响*风险概率
三种策略来降低风险:
(1)通过改变性能或功能需求,避免风险
(2)通过把风险分配到其他系统中,或者购买保险以便在风险成为事实时弥补经济上的损失,从而转移风险。
(3)假设风险会发生,接受并用项目资源控制风险。
3.9风险管理的几个重要步骤:
第四章
4.1需求的含义是什么?
需求的目标是什么?
需求:
是对期望行为的表达。
需求处理的是对象或实体,它们可能处于的状态,以及用于改变状态或对象特征的功能。
需求的目标:
是理解客户的问题和需要,需求集中于客户和问题,而不是解决案的实现。
4.2确定需求的过程(获取需求的过程)是什么?
(1)引发收集用户需求
(2)分析理解和建模期望的行为
(3)规格说明文档化要开发的软件系统的行为
(4)确认检查我们的规格说明是否与用户需求匹配
(5)软件需求规格说明(SRS)
图:
4.3举例说明获取需求时,若有冲突发生,如考虑到优先级的需求分类及相互关系?
请求客户对需求进行优先级划分通常是有用的,这可以迫使客户思考提议的服务或特征中哪些是最重要的。
一种大致的优先计划分案可能将需求分为3类:
(1)绝对要满足的需求(必须的)
(2)非常值得要的但并非必须的需求(值得要的)
(3)可要可不要的需求(可选的)
举例:
信用卡记账系统必须能够列出最近的费用,将他们加起来并要求在某个日期前支付,这是必须的需求。
但是,该记账系统也可能按照购买类型区分费用,以帮助消费者理解购买的模式,这是值得要的需求。
最后,记账系统可能要求用黑色来打印贷账目,用红颜色打印借账目,这用需有用的,但它是可选的需求。
按照类型对需求进行优先级的分类,能够帮助所有相关人员理解自己到底需要什么。
当软件开发项目受到时间或资源的限制时,如果系统的成本太高或者开发的时间太长,就可以去掉可选需求,并对值得要的需求进行分析,考虑是去掉还是延期。
还可解决与质量需求之间的矛盾。
4.4如使需求变得可测试?
(1)指定每个副词和形容词的定量描述,这样限定词的含义就清楚、明确了
(2)用特定实体的名称替换代名词
(3)要确保在需求文档的某个地,正确地定义每个名词。
4.5需求文档分为哪两类?
(1)需求定义:
是客户想要的每一件事情的完整列表
(2)需求规格说明:
将需求重新述为关于要构建的系统将如运转的规格说明
4.6什么是功能需求和非功能需求(质量需求)
功能需求:
根据要求的活动来描述需求的行为。
(功能需求定义问题解决案空间的边界)
非功能需求(质量需求):
描述一些软件解决案必须拥有的质量特征,如快速的响应时间、易使用性、高可靠性或低维护代价等
4.7什么是设计约束和过程约束?
设计约束:
是已经做出的设计决策或限制问题解决案集的设计决策。
过程约束:
是对用于构建系统的技术和资源的限制。
4.8需求的特征:
(1)正确性
(2)一致性(3)无二义性(确定性)(4)完备性(5)可行性(6)相关性(7)可测试性(8)可跟踪性
4.9在原型化需求面,什么是抛弃式原型,什么是进化式原型?
原型化需求的目的:
A:
有的需求难以用文字和符号说明,而原型化的过程可帮助我们找到“好的视觉和感觉”B:
对非功能性需求,可以评价性能和效率
抛弃式原型:
仅用于了解问题、探索可行性,并不打算用来作为将来实际提交系统的一部分,而是用完扔掉
进化式原型:
用于了解问题,并作为将来准备提交的系统的一部分
这两种技术有时都称为快速原型化,因为它们都是为了回答需求的问题而构建软件。
第五章
5.1什么是设计?
设计是将问题转换为解决案的创造性过程。
5.2什么是概念设计?
什么是技术设计?
概念设计:
确切地告诉客户系统要做什么
技术设计:
一旦客户认可概念设计,系统构建人员就将概念设计转换为更为详细的文档,即技术设计,技术设计确切的告诉开发人员系统将如运转。
概念设计强调的是系统功能,而技术设计描述的是系统将要采取的式。
5.3三种设计层及其关系
设计分三层:
体系结构、代码设计和可执行设计
(1)体系结构将需求格式说明中确定的系统能力与实现这些能力的系统构件关联起来。
(2)代码设计包含算法和数据结构
(3)可执行设计在比代码设计的层次还要低的静态层次处理代码设计,讨论存分配、数据格式、位模式等
关系:
自顶向下设计有益的:
首先设计体系结构,然后进行代码设计,最后是可执行设计
5.4什么是模块化?
什么是抽象?
模块化:
在模块化的设计中,构件清晰地定义了输入和输出,设计目标明确,功能独立,可以做独立测试。
抽象:
对细节的隐藏称为抽象,是基于某种归纳水平的问题描述,是我们集中于问题的关系。
5.5论述设计用户界面应考虑的问题
(1)应处理以下几个关键要素:
1.隐喻:
可识别和学习的基本术语,图片和概念
2.头脑中的模型:
数据、功能、任务和角色的构成和表现
3.模型的导航没规则:
怎样在数据、功能、活动和角色中转移
4.外观:
系统向用户传输信息的外观特征
5.感觉:
向用户提供有吸引力的体验的交互技术
(2)文化问题:
需要考虑使用系统的那些用户的信仰、价值观、道德规、传统、风俗和传说。
两种解决法:
1.排除特定的文化参考或偏见,让界面变得尽可能“国际化”2.采用无偏见设计并使之时应使用软件的文化
(3)用户偏爱:
可以为不同用户涉及多个界面。
5.6耦合的概念,如分类?
耦合:
指构件之间的相互依赖性,可分为
(1)容耦合:
一个构件直接修改了另外一个构件(当一个构件修改了另外一个构件的部数据项时,或一个构件的分支转移到另外一个构件中的时候,就可能出现容耦合)
(2)公共耦合:
不同构件访问公共数据。
例如,一个公共变量可以被不同的构件修改
(3)控制耦合:
某个构件通过传递参数来控制另外一个构件的活动,模块间传递的是控制量。
(4)标记耦合:
用一个数据结构来从一个构件到另一个构件传送信息,而且传递的是该数据结构本身。
(5)数据耦合:
构件间通过传递数据来完成信息的传递。
5.7聚的概念,如分类?
聚:
指构件部的“粘合”程度,可分为:
(1)巧合聚:
构件的各部分互不相关
(2)逻辑聚:
几个逻辑相关的功能或数据元素放在同一个构件中
(3)时态聚:
构件顺序执行若干个功能,但是各功能只和涉及的时间相关
(4)过程聚:
构件中的功能组合在一起只是为了确保这个顺序
(5)通信聚:
将某些功能关联起来,因为它们是操作或生成同一个数据集的
(6)顺序聚:
一个构件的某部分的输出正好是下一部分的输入
(7)功能聚:
每一个处理元素对于执行单个功能来说都是必须的,并且在一个构件包含了所有必需的元素。
5.8什么是被动故障检测?
什么是主动故障检测?
被动故障检测:
设计一个系统,在执行的过程中一直等到一个失效发生
主动故障检测:
定期检查故障的征兆,或设法预见时发生故障。
第六章
6.1什么是面向对象?
面向对象是一种软件开发法,它将问题和问题的解决案组织为离散对象的集合,数据结构和行为都包含在对象的表示中。
6.2面向对象有什么特征?
(1)标识
(2)抽象(3)分类(4)封装(5)继承(6)多态(7)持久性
6.3OO开发有优势?
(1)语言的一致性。
我们可以用同样的术语描述问题及其解决案:
类、对象、法、属性和行为
(2)过程的一致性。
OO的过程使用数据和行为的封装形成的独立的单元。
它从需求到应用实现和测试用相同语义的概念来表示系统。
6.4OO开发过程有几个步骤?
OO需求,OO设计,OO编码和测试
第七章
7.1为什么说编码工作纷繁复杂甚至令人气馁?
(1)设计人员可能没有处理平台和编程环境的所有特性。
易于用图表描述的结构和关系并不是总能够直截了当的编写成代码
(2)我们必须以这样一种式编写代码:
不仅要在再次使用代码进行测试的时候便于自己理解,而且当系统随着时间演化时,也便于他人理解
(3)在创建易于复用的代码的同时,还必须利用这些特征:
设计的组织结构、数据结构、编程语言的概念。
7.2一般性的编程原则应该从哪些面考虑?
(1)控制结构:
当设计转变成代码时,我们希望保留组件的控制结构,在隐含调用的面向对象设计中,控制是基于系统状态和变量而变化的。
(2)算法:
在编写代码时,程序设计通常会制定一类算法,用于编写组件。
(3)数据结构:
编写程序时,应该安排数据的格式并进行存储,这样的数据管理和操作才能简明易懂。
7.3论述编码阶段实现某种算法时说涉及的问题。
(1)编写更快代码的代价。
可能会是代码更加复杂,从而要花费更多的时间编写代码
(2)测试代码的时间代价。
代码的复杂度要求有更多的测试用例或测试数据
(3)用户理解代码的时间代价。
(4)需要修改代码时,修改代码的时间代价。
7.4在编程程序部文档时,除了HCB外,还应添加什么注释信息?
(1)对程序正在做什么,为程序提供逐行的解释。
(2)用注释将代码分解成标识主要活动的段,接着每个活动还可以分解成更小的步骤。
(3)随着时间进行修改的记录
7.5什么是极限编程(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 软件工程 复习 重点 整理