数字媒体软件工程复习大纲.docx
《数字媒体软件工程复习大纲.docx》由会员分享,可在线阅读,更多相关《数字媒体软件工程复习大纲.docx(24页珍藏版)》请在冰豆网上搜索。
数字媒体软件工程复习大纲
2010级数字媒体《软件工程导论》期末考试复习大纲
一、软件工程学概论
(1)软件危机的主要表现(了解,选择题或判断题)
对软件开发成本和进度的估计常常很不准确;
用户对“已完成的”软件系统不满意的现象经常发生;
软件产品的质量往往靠不住;
软件常常是不可维护的;
软件通常没有适当的文档资料;
软件成本在计算机系统总成本中所占的比例逐年上升;
软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
(2)何为软件?
(了解,选择题或判断题)注意不仅仅是源代码
应该彻底消除“软件就是程序”的错误观念。
1983年IEEE为软件下的定义是:
计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。
(3)软件的特点(了解,选择题或判断题)
1、软件是一种逻辑实体,不是具体的物理实体。
2、软件产品的生产主要是研制。
3、软件具有“复杂性”,其开发和运行常受到计算机系统的限制。
4、软件成本昂贵,其开发方式目前尚未完全摆脱手工生产方式。
5、软件不存在磨损和老化问题,但存在退化问题。
(4)何为软件工程?
(了解,选择题或判断题)(IEEE1993的定义):
软件工程是:
(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
(2)在
(1)中所述方法的研究。
另外,软件工程强调管理和技术两个方面
(5)软件工程经历了四个阶段。
软件工程的发展已经历了四个重要阶段:
1、第一代软件工程—传统的软件工程
60年代末到70年代为了克服“软件危机”(Softwarecrisis)提出“软件工程”的名词,将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。
称为传统的软件工程。
2、第二代软件工程—对象工程
80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。
3、第三代软件工程—过程工程
80年代中开始,人们在软件开发的实践过程中认识到:
提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。
4、第四代软件工程—构件工程
90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。
称为构件工程。
(6)软件工程方法学的三个要素。
目前最为广泛的两种方法学是传统方法学(结构化方法学)和面向对象方法学。
1、传统方法学
也称为生命周期方法学或结构化范型。
它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。
问题简单化、便于阶段性审查、有一定应用、便于区别面相对象方法学。
2、面向对象方法学
当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难,原因是这种技术要么面向行为(即对数据的操作),要么面向数据,还没有既面向数据又面向行为的结构化技术。
面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
面向对象方法学具有下述4个要点:
(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
(2)把所有对象都划分成类(class)。
(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。
(4)对象彼此间仅能通过发送消息互相联系。
软件工程方法学:
包括内容(3个要素):
方法、工具和过程。
方法:
技术方法
工具:
软件工程支撑环境
过程:
一系列任务框架,以保证质量。
(7)软件生命周期包括软件定义、软件开发和软件维护期。
软件定义阶段包括问题定义、可行性研究、需求分析;
软件开发阶段包括总体设计、详细设计、编码和单元测试,其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
软件维护包括校正性维护(或称改正性维护)、适应性维护、完善性维护和预防性维护。
软件生命周期包括:
软件定义、软件开发和软件维护期。
软件定义期~问题定义、可行性研究、需求分析(定义期也成为系统分析)。
主要目的:
确定软件开发工程必须完成的总目标;
确定工程的可行性;
导出实现工程目标应该采用的策略及系统必须完成的功能;
估计完成该项工程需要的资源和成本,并且制定工程进度表。
软件开发期~总体设计、详细设计、编码和单元测试,其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
软件维护期~使软件持久地满足用户的需要。
当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;
当用户有新要求时应及时改进,满足用户新需要
(8)瀑布模型的七个阶段。
瀑布模型的优缺点。
1.阶段间具有顺序性和依赖性
必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
前一阶段的输出文档就是后一阶段的输入文档。
2.推迟实现的观点
瀑布模型分析与设计阶段的基本任务主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现。
3.质量保证的观点
每个阶段都必须完成规定的文档
完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。
每个阶段结束前都要对文档进行评审
尽早发现问题,改正错误。
瀑布模型有许多优点:
可强迫开发人员采用规范的方法(结构化技术);
严格地规定了每个阶段必须提交的文档;
要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
2、瀑布模型有以下缺点:
1)在项目各个阶段之间极少有反馈。
2)只有在项目生命周期的后期才能看到结果。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
(9)快速原型模型适用的场合。
快速原型是快速建立起可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
快速原型没有反馈环,同用户已经充分交流、开发人员对系统也充分了解。
广泛地使用第四代语言(4GL)构建快速原型
适合于需求动态变化,事先难以确定系统
(10)螺旋模型的优点。
螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。
螺旋模型的优点
有助于获取用户需求,加强对需求的理解
尽早发现软件中的错误
支持需求的动态变化
支持风险分析,可降低或者消除软件开发风险
适合于需求动态变化、开发风险较大的系统
(11)Rational统一过程模型将软件过程分为初始、精化、构建和移交四个阶段。
RUP软件开发生命周期中4个阶段
初始阶段:
建立业务模型,定义最终产品视图,并确定项目的范围;
精化阶段:
设计并确定系统的体系结构,制定项目计划,确定资源需求;
构建阶段:
开发出所有软件并集成为用户需求的产品,经测试确定所有功能;
移交阶段:
将开发的产品提交用户使用。
(12)Scrum敏捷过程的四种不同会议。
Scrum的计划会议
订出Sprint目标和需要完成的Backlog
对本次Sprint的Backlog进行必要的细化和任务分割
会议的结束后,团队将会决定他们能够交付哪些东西,以及验收的标准
Scrum的每日例会
团队成员间工作进度的沟通和协调
昨天做了什么
存在什么问题
今天准备做什么
沟通任务板和燃尽图
Scrum的评审会议
团队在会议中向最终用户展示这次Sprint工作成果
评审检查是否已达到Sprint的目标
团队成员得到反馈,并以之创建或变更Backlog条目
Scrum的回顾会议、
继续做……(保持好的做法)
停止做……(去除错误的做法)
更好地做……(改进有问题的做法)
二、UML补充
(1)用例图(综合应用题)
用例图:
从用户角度描述系统的功能,并指出各功能的操作者。
执行者指用户在系统中所扮演的角色。
即在确定执行者时,应主要考虑他所起的作用。
多个用户可能扮演同一个角色。
一个用户也可能扮演多个角色。
一个执行者可以执行多个用例。
一个用例也可以由多个执行者使用。
用例建模建议
少用泛化关系
适度使用扩展和包含关系
用例之间的关系
包含关系:
当一个相似的动作跨越多个用例时,可以使用包含关系。
泛化关系:
当一个用例与另一个用例相似,但所做的动作多一些时,要用到泛化关系。
扩展关系:
它是一种依赖关系,与泛化关系有点类似在基用例中声明扩展点,扩展用例只能在这些扩展点上进行扩展。
(2)类图(综合应用题):
掌握类与之间的关系(泛化、关联、聚合、组成、实现等)
类图:
定义系统中类的内部结构和类之间的相互关联。
描述在系统的整个生命周期都是有效的静态关系。
类图描述了系统中的类及其相互之间的各种关系,其本质是反映系统中包含的各种对象类型以及对象间的各种静态关系。
类之间的静态关系主要有:
关联(聚集和组成是两种特殊的关联)
泛化
实现
依赖
在UML中,可从三个不同的抽象层次来看待类图。
概念层:
概念层类图描述的是应用领域中的概念或事物。
概念层类图与实现它的软件没有直接的联系。
说明层:
说明层类图主要关注的是软件的接口部分,而不是软件的实现部分。
实现层:
实现层类图揭示了软件实现体的构成情况。
类图的三个抽象层次,对于画类图和理解类图都是至关重要的。
(3)状态图(了解其用途、构成元素)
描述一类对象的所有可能状态,以及事件发生时状态转移的条件。
通常只需为那些有多个状态,并且其行为受外界环境的影响而发生变化的类绘制状态图。
状态图的基本要素
状态之间的转移上可以带有一个标注。
其文法格式为:
事件[条件]/动作E[C]/A
状态内可以带有一个活动。
其文法格式为:
do/活动名
动作与活动都是一种过程,都由对象中的方法来实现。
动作与转移关联,持续时间短,不能被中断。
活动与状态关联,持续时间长,可以被中断。
转移中的事件表示输入条件。
在状态中的活动完成后,当相应的输入事件发生时,转移才会发生。
状态图的基本要素
对于一个给定的状态,最终只能产生一个转移。
从相同状态出来的、事件相同的几个转移之间的条件应该是互斥的。
对于不包含活动的状态,其作用主要是等待某个事件的发生。
基状态是一种使状态图表示更简洁的机制。
状态图的基本要素
一个状态在响应一个事件时,如果只执行一个动作,不产生任何状态转移,则应在状态内用“事件名/动作名”格式及文字说明进行描述。
(因为它们不能用状态之间的转移来描述)
三、需求分析
(1)分析模型应向设计者提供信息、功能和行为的表示。
(2)分析模型必须实现的三个主要目标:
描述客户需要什么、为软件设计奠定基础、定义在软件完成后可以被确认的一组需求。
(3)分析建模的方法主要有面向对象分析和结构化分析两种。
前者关注于定义类和影响客户需求的类之间的协作方式。
而后者则考虑数据和数据处理的分析建模方法。
(4)分析模型主要包括基于场景的元素、基于类的元素、行为元素和面向信息流的元素。
基于场景的建模从用户的角度表现系统;面向流的建模在说明数据对象如何通过处理函数进行转换提供了表示;基于类的建模定义了对象、属性和关系;行为建模描述了系统状态、类和事件在这些类上的影响。
●基于场景的模型从用户的角度描述软件需求。
用例是主要的建模元素,还可以适用活动图说明场景,泳道图显示了处理流如何分配给不同的用户。
●面向流的建模,常常使用DFD(数据流图)。
它开始于环境图,结束于模块规格说明。
●在基于类的建模型中,按职责划分可将类分为实体类、控制类和边界类三种。
●可以运用UML的状态图和顺序图进行行为建模。
(5)结构化分析模型主要由数据流图、实体关系图、状态转换图和数据字典构成。
四、总体设计
(1)软件设计是软件工程过程的技术核心,它开始于需求分析和需求建模完成之后。
设计模型提供了数据/类设计、体系结构设计、接口设计和构件设计的细节。
(2)软件设计工程中,进行数据/类设计、体系结构设计、接口设计和构件设计的目的
1数据/类设计:
将分析类模型转化为设计类的实现以及软件实现所要求的数据结构。
2体系结构设计:
定义软件的主要结构元素之间的联系、可用于达到系统所定义需求的体系结构风格和设计模式以及影响体系结构实现方式的约束。
3接口设计:
描述软件和协作系统之间、软件和使用人员之间是如何通信的。
4构件设计:
将软件体系结构的结构元素变换为对软件构件的过程性描述。
(3)HP公司开发了软件质量属性FURPS:
1功能性(Functionality):
评估程序的特征集和能力、所提交功能的普遍性以及整个系统的安全性。
2易用性(Usability):
通过考虑人为因素、整体美感、一致性和文档来评估。
3可靠性(Reliability):
通过测量故障的频率和严重性、输出结果的精确性、故障平均时间、故障恢复能力和程序的可预见性来评估。
4性能(Performance):
度量处理速度、响应时间、资源消耗、吞吐量和效率。
5可支持性(Supportability):
综合了可扩展性、适应性和耐用性三面的能力。
(4)抽象是人类处理复杂问题的基本方法之一,主要有数据抽象和过程抽象两种。
(5)模式(Pattern)是解决某一类问题的方法论,它将解决某类问题的方法总结归纳到理论高度。
软件模式主要有分析模式、体系结构模式、设计模式和编码模式(又称习惯用语)四种。
(6)模块化是将软件被划分为独立命名的、可寻址的构件(又被称为模块),把这些构件集成到一起可以满足问题的需求。
(7)信息隐蔽原则建议模块应该具有的特征是:
每个模块对其他所有模块都隐蔽自己的设计决策。
(8)通过开发具有“专一”功能和“避免”与其他模块过多交互的模块,可以实现功能独立。
独立性可以使用内聚性(显示模块相关功能的强度)和耦合性(显示模块间的相互依赖性)两条定性的标准评估。
(9)求精是一个细化的过程,它和抽象是互补的概念。
(10)重构是在不改变代码(或设计)的外部行为的前提下,改进软件系统内部结构的过程。
通过重构提高模块的内聚性,降低模块间的耦合性,在实施重构前,保证已有足够的测试用例,以在重构之后进行回归测试。
(11)在设计模型通常定义了用户接口类、业务域类、过程类、持久类和系统类五种不同的设计类。
良定义设计类的四个特征是完整性与充分性、原始性、高内聚和低耦合。
(12)传统的结构化设计需要映射变换流和事务流两种数据流到软件体系结构。
五、详细设计
(1)构件是系统中某一定型化的、可配置的和可替换的部件,该部件封装了实现并暴露一系列接口。
构件级设计定义了数据结构、算法、接口特征和分配给每个软件构件的通信机制。
(2)基于类的构件基本设计原则:
1开关原则:
模块对外延具有开放性,对修改具有封闭性。
2LISKOV替换原则(或里氏替换原则):
子类可以替换它们的基类。
3依赖倒置原则:
依赖于抽象,而非具体实现。
4接口分离原则:
多个用户专用接口比一个通用接口要好。
(3)内聚性意味着构件或者类只封装那些相互关联密切,以及与构件或类自身有密切关系的属性和操作。
按从强到弱排序内聚性:
功能内聚、分层内聚、通信内聚、顺序内聚、过程内聚、暂时内聚、实用内聚。
(4)藕合是类之间彼此联系程度的一种定性度量。
按从强到弱排序耦合性:
内容藕合、共用耦合、控制耦合、印记耦合、数据耦合、例程调用耦合、类型使用耦合、包含或者导入耦合、外部耦合。
(5)模块的高内聚和低藕合是构件设计建模的重要目标。
(6)传统构件的设计常用表示方法有图形化设计表示(程序流程图、N-S图)、表格式设计表示(决策表:
条件、动作、条件组合和处理规则)和程序设计语言(PLD)。
六、软件测试技术
(1)软件测试是一个为了发现错误而执行程序的过程,软件测试的目标是用尽可能少的测试用例,来发现尽可能多的软件错误。
(2)软件测试方法主要有白盒测试方法和黑盒测试(又称行为测试)方法。
前者主要根据程序内部的逻辑结构设计测试用例,而后者则主要根据程序完成的功能设计测试用例。
(3)白盒测试的目标:
(了解)
1对每一个模块中的所有独立路径至少被执行一次
2对所有的逻辑值均需测试真和假
3在上下边界和可操作的范围内执行所有的循环
4检验内部数据结构以确保其有效性
(4)黑盒测试能发现以下类型的错误(了解)
1功能不正确或遗漏
2接口错误
3数据结构或外部数据库访问错误
4行为或性能错误,
5初始化和终止错误。
(5)常用的白盒测试方法有:
逻辑覆盖测试、基本路径覆盖测试、数据流测试和循环测试
(6)逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。
逻辑覆盖测试主要包括语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖。
(7)基本路径测试是TomMcCabe提出的一种白盒测试技术,其设计过程为:
1首先根据程序或设计图画出控制流图
2计算其区域数,确定一组独立的程序执行路径(称为基本路径)
3为每一条基本路径设计一个测试用例。
程序的控制流图(也称程序图)
流图由结点和边组成,分别用圆和箭头表示。
设计图中一个连续的处理框(对应于程序中的顺序语句)序列和一个判定框(对应于程序中的条件控制语句)映射成流图中的一个结点,设计图中的箭头(对应于程序中的控制转向)映射成流图中的一条边。
对于设计图中多个箭头的交汇点可以映射成流图中的一个结点(空结点)。
上述映射的前提是设计图的判定中不包含复合条件。
如果设计图的判定中包含了复合条件,那么必须先将其转换成等价的简单条件设计图。
我们把流图中由结点和边组成的闭合部分称为一个区域(region),在计算区域数时,图的外部部分也作为一个区域。
例如,右图所示的流图的区域数为3。
独立路径是指程序中至少引进一个新的处理语句序列或一个新条件的任一路径,在流图中,独立路径至少包含一条在定义该路径之前未曾用到过的边。
在基本路径测试时,独立路径的数目就是流图的区域数
例如,对一个PDL程序进行基本路径测试,该程序的功能是:
最多输入N个值(以-999为输入结束标志),计算位于给定范围内的那些值(称为有效输入值)的平均值,以及输入值的个数和有效值的个数。
其区域数为6,我们选取独立路径如下:
路径1:
1-2-10-11-13
路径2:
1-2-10-12-13
路径3:
1-2-3-10-11-13
路径4:
1-2-3-4-5-8-9-2-10-12-13
路径5:
1-2-3-4-5-6-8-9-2-10-12-13
路径6:
1-2-3-4-5-6-7-8-9-2-10-11-13
为每一条独立路径设计测试用例。
假设:
n=5;minimum=0;maximum=100
路径1:
1-2-10-11-13
测试数据:
value=[90,-999,0,0,0]
预期结果:
Average=90,total.input=1,total.valid=1
路径2:
1-2-10-12-13
测试数据:
value=[-999,0,0,0,0]
预期结果:
Average=-999,total.input=0,total.valid=0
路径3:
1-2-3-10-11-13
测试数据:
value=[-1,90,70,-1,80]
预期结果:
Average=80,total.input=5,total.valid=3
路径4:
1-2-3-4-5-8-9-2-10-12-13
测试数据:
value=[-1,-2,-3,-4,-999]
预期结果:
Average=-999,total.input=4,total.valid=0
路径5:
1-2-3-4-5-6-8-9-2-10-12-13
测试数据:
value=[120,110,101,-999,0]
预期结果:
Average=-999,total.input=3,total.valid=0
路径6:
1-2-3-4-5-6-7-8-9-2-10-11-13
测试数据:
value=[95,90,70,65,-999]
预期结果:
Average=80,total.input=4,total.valid=4
值得注意的是,某些独立路径(如例中的路径1和路径3)不能以独立的方式进行测试,此时,这些路径必须在其他的独立路径测试中被覆盖。
(8)常用的黑盒测试方法有(了解):
基于图的测试方法、等价划分、边界值分析、正交数组测试。
确定等价类的规则:
(1)如果输入条件规定了取值范围,则可以确定一个有效等价类(输入值在此范围内)和两个无效等价类(输入值小于最小值及大于最大值)
例如,规定输入的考试成绩在0..100之间,则有效等价类是“0£成绩£100”,无效等价类是“成绩<0”和“成绩>100”。
(2)如果输入条件规定了值的个数,则可以确定一个有效等价类(输入值的个数等于规定的个数)和两个无效等价类(输入值的个数小于规定的个数和大于规定的个数)
例如,规定输入构成三角形的3条边,则有效等价类是“输入边数=3”,无效等价类是“输入边数<3”和“输入边数>3”
(3)如果输入条件规定了输入值的集合(即离散值),而且程序对不同的输入值做不同的处理,那么每个允许的值都确定为一个有效等价类,另外还有一个无效等价类(任意一个不允许的值)。
例如,规定输入的考试成绩为优、良、中、及格、不及格,则可确定5个有效等价类和一个无效等价类。
(4)如果输入条件规定了输入值必须遵循的规则,那么可确定一个有效等价类(符合此规则)和若干个无效等价类(从各个不同的角度违反此规则)。
例如,在Pascal语言中对变量标识符规定为“以字母开头的……串”。
那么有效等价类是“以字母开头的串”,而无效等价类有“以数字开头的串”、“以标点符号开头的串”…等。
(5)如果输入条件规定输入数据是整型,那么可以确定三个有效等价类(正整数、零、负整数)和一个无效等价类(非整数)。
(6)如果输入条件规定处理的对象是表格,那么可以确定一个有效等价类(表有一项或多项)和一个无效等价类(空表)。
以上只是列举了一些规则,实际情况往往是千变万化的,在遇到具体问题时,可参照上述规则的思想来划分等价类。
边界值分析方法选择测试用例的规则如下:
1.如果输入条件规定了值的范围,则选择刚刚达到这个范围的边界的值以及刚刚超出这个范围的边界的值作为测试输入数据。
例如,规定输入的考试成绩在0~100之间,则取0,100,-1,101作为测试输入数据。
2.如果输入条件规定了值的个数,则分别选择最大个数、最小个数、比最大个数多1、比最小个数少1的数据作为测试输入数据。
例如,规定一个运动员的