软件工程第五版课本重点及课后题
1. 什么是软件危机?
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。具有长期性和症状不明显特征。
2. 软件危机表现在以下几个方面:(1)用户对开发出的软件很难满意。(2)软件产品的质量往往靠不住。(3)一般软件很难维护。(4)软件生产效率很低。(5)软件开发成本越来越大。(6)软件成本与开发进度难以估计。(7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。特点:长期性和症状不明显性。
3. 为什么会产生软件危机?
一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
4. 什么是软件工程?
软件工程是指导计算机软件软件开发和维护的一门工程学科,采用工程的概念,原理,技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济的开发出高质量的软件并有效的维护它,这就是软件工程。 具体的定义:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。
5. 软件生命周期的8个阶段:
(1)问题定义(确定问题);(2)可行性研究(可研报告);(3)需求分析(规格说明,逻辑模型);(4)总体设计(确定系统体系结构);(5)详细设计(数据结构);(6)编码和单元测试(程序清单,单元测试报告);(7)综合测试;(8)软件维护。
6. 瀑布模型(文档驱动)特点:(1)阶段间具有顺序性和依赖性;(2)推迟实现的观点;
(3)质量保证的观点。
3. 快速原型模型(建立功能原件):快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
1. 可行性研究包括哪几方面的内容?
(1)技术可行性:现有技术能否实现本系统,现有技术人员能否胜任,开发系统的资源能否满足;
(2)经济可行性:经济效益是否超出开发成本;
(3)操作可行性:系统操作在用户内部行得通吗。
2. 可行性研究的过程:
(1)复查系统的规模和目标;(2)研究目前正在使用的系统(经济角度、功能指标、环境约束)
(3)导出新系统的高层逻辑模型(工具:数据流图、数据字典);(4)进一步定义问题(5)导出和评价供选择的解法(技术角度、操作可行性、经济可行性、实现进度表);(6) 推荐行动方针;(7)草拟开发计划(8)书写文档提交审查
3. 数据流图(DFD )是一种图形化技术,它描述信息流和数据从输入移动到输出的过程中所经受的变换。
4. 4种基本符号:(1)正方形(或立方形)表示数据的源点或终点;(2)圆角矩形(或圆形)代表变换数据的处理;(3)开口矩形(或两条平行横线)代表数据存储;(4)箭头表示数据流,即特定数据的流动方向。
5. 数据存储是处于静止状态的数据,数据流是处于运动中的数据。
6. 数据流图例子:
8. 为数据流(或数据存储)命名
9. 为处理命名
10. 数据流图的作用:作为交流信息的工具;作为分析和设计的工具。
11. 数据字典最重要的用途是座位分析阶段的工具。
12. 数据字典由四类元素组成:数据流,数据流分量,数据存储,处理。
13. 数据元素出现别名的三个原因:(1)对于同样的数据,不同的用户使用了不同的名字;
(2)一个分析员在不同时期对同一个数据使用了不同的名字;(3)两个分析员分别分析同一个数据流时,使用了不同的名字.
14. 定义就是自顶向下的分解,所以数据字典中的定义就是对数据自顶向下的分解
15. 由数据元素组成数据的方式只有3种基本类型:(1)顺序:已确定次序连接两个或多个分量。(2)选择:从两个或多个特可能的元素中选取一个。(3)重复:把指定的分量重复零次或多次。增加了第四个为可选:一个分量是可有可无的(重复零次或一次)。
16. 数据字典的实现:
17. 成本估计的3种估计技术:代码行技术、任务分解技术、自动估计成本技术。
1. 综合性要求有哪些:(1)功能需求;(2)性能需求;(3)可靠性和可用性需求;(4)出错处理需求;(5)接口需求;(6)约束;(7)逆向需求;(8)将来可能提出的要求。
2. 与用户沟通获取需求的方法:访谈(正式的和非正式的)、面向数据流自顶向下求精(IPO 图)、简易的应用规格说明技术(面向团队)、快速建立软件原型。
3. 数据规范化:软件系统经常使用各种长期保存的信息,这些信息通常以一定方式组织并存储在数据库或文件中,为减少数据冗余,避免出现插入异常或删除异常,简化修改数据的过程,通常需要把数据结构规范化。
4. (1)第一范式:每个属性值都必须是原子值,即仅仅是一个简单之而不含内部结构.
(2)第二范式:满足第一范式条件,而且每个关键字属性都有整个关键字决定。
(3)第三范式:符合第二范式条件,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述。
5. 验证软件需求的内容:
(1)一致性:所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
(2)完整性:需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。
(3)现实性:指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。对硬件技术的进步可以做些预测,对软件技术的进步则很难做出预测,只能从现有技术水平触发判断需求的现实性。
(4)有效性:必须证明需求是正确有效的,确实能解决用户面对的问题。
6. 需求分析过程应该建立3种模型分别是数据模型,功能模型和行为模型
1. 非形式化方法的缺点:矛盾、二义性、含糊性、不完整性及抽象层次混乱等问题。
2. 形式化方法的优点:能够简洁准确地描述屋里现象、对象或动作的结果,因此是理想的建模工具。可以在不同的软件工程活动之间的平滑地过渡。提供了高层确认的手段。
3. 应用形式化方法的准则:(1)应选用适当的表示方法。(2)应形式化,但不要过分形式化。(3)应估算成本。(4)应该有形式化方法顾问随时提供咨询。(5)不应该放弃传统的开发方法。(6)应该建立详尽的文档。(7)不应该放弃质量标准。(8)不应该盲目依赖形式化方法。(9)应该测试、测试再测试。(10)应该重用。
4. 用Z 语言描述的、最简单的形式化规格说明含有4个部分:给定的集合、数据类型即常数;状态定义;初始状态;操作。
1. 总体设计通常有两个主要阶段组成:(1)系统设阶段:确定系统的具体实现方案。(2)结构设计阶段:确定软件结构。
2. 总体设计的9个步骤:设想供选择的方案、选取合理的方案、推荐最佳方案、功能分解、设计软件结构、设计数据库、稳定测试计划、书写文档、审查和复审。
3. 模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。
4. 模块化就是将程序划分乘独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
5. 模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。
6. 逐步求精:为了能集中精力解决主要问题为尽量推迟对问题细节的考虑。
7. 模块独立性的程度可以由两个定性标准度量:内聚和耦合。
8. 耦合性:是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口复杂程度,进入或访问一个模块的点,以及通过接口数据。
9. 数据耦合:如果两个模块彼此间通过参数交换信息,而且变换的信息仅仅是数据,那么这种耦合称为数据耦合。
10. 控制耦合:如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称为控制耦合。
11. 在软件设计中应该追求尽可能松散耦合的系统分为:1. 模块独立(不可能的) ;2数据耦合是低耦合;3控制耦合是中等程度的耦合;4特征耦合;5公共环境耦合;6内容耦合是最高程度耦合。
12. 采用以下设计原则:尽量使用数据耦合少用控制耦合和特征耦合限制公共环境耦合的范围,完全不用内容耦合。
13. 内聚性:标志一个模块内部各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。设计时要高内聚模块内高内聚意味着松耦合。
14. 低内聚分为:偶然内聚,逻辑内聚,时间内聚。中内聚有两类:过程内聚,通信内聚。高内聚:顺序内聚,功能内聚。
15. 优劣评分:功能内聚10分,顺序内聚9分,通信内聚7分,过程内聚5分,时间内聚3分,逻辑内聚1分偶然内聚0分
16. 模块独立性比较强的模块应该是具有高内聚性和的低耦合度。
17. 深度:软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。
18. 宽度:软件结构内同一层次上模块总数的最大值。一般说来,深度越大系统越复杂,对宽度影响最大的是模块的扇出。
19. 扇出:是一个模块控制模块的数目,扇出越大表示模块过分复杂,需要协调和控制更多的下级模块;扇出过小也不好。经验表明,一个设计好的典型系统平均扇出一般是3或4。
20. 扇入:一个模块的扇入表明有多少上级模块直接调用它,扇入越大则共享该模块的上级模块数目越多,这是有好处的,但是,不能违背模块独立原理单纯追求高扇入。
21. 扇出太大一般是因为缺乏中间层次,应该适当增加中间层次的控制模块。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。当然分解模块或合并模块必须符合问题结构,不能违背模块独立原理。
22. 面向数据流的设计方法变换分析
23. 变换分析的设计步骤:(1)复查基本系统模型;(2)复查并精化数据流图;(3)确定数据流图具有变换特性还是事物特性;(4)确定输入流和输出流的边界,从而孤立出变换中心;
(5)完成“第一级分解”;(6)完成“第二级分解”(第二级分解就是把数据流图中的每个处理映射成软件结构中一个适当的模块);(7)使用设计度量和启发式规则对第一次分割得到的软件结构进一步精华。
1. 基本的控制结构:顺序结构,分支结构,循环结构。
2. 人机界面设计问题:1系统响应时间;2用户帮助设施;3出错信息处理;4命令交互。
1. 软件测试的方法:黑盒测试,白盒测试
(1)黑盒测试:如果已经知道了产品应具有的功能,可以通过测试来检验是否每个功能都能正常使用,这就是黑盒测试:
(2)白盒测试:如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。
2. 测试步骤;(1)模块测试(2)子系统测试(3)系统测试(4)验收测试(5)平行运行
3. 测试重点:(1)模块接口(2)局部数据结构(3)重要的执行通路(4)出错处理通路(5)边界条件
4. (1)主程序:驱动程序也就是一个主程序,他接受测试数据,把这些数据传送给被测试
的模块,并且印出有关的结果,
(2)虚拟子程序:存根程序也可以称为虚拟子程序,他使用被他代替的模块的接口,可
能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。
5. 模块组装成程序时有两种方法:(1)非渐增式(2)渐增式{自顶向下集成,自底向上集成}
6. 混合法:对软件结构中较上层使用的自顶向下方法与软件结构中较下层使用的自底向上方法相结合。
7. 回归测试:在集成测试的范畴中,所谓的回归测试是指重新执行已经做过的测试的某个子集,以保证上述的这些变化没有带来非预期的副作用。
8. 确认测试:也称为验收测试,他的目标是验证软件的有效性。
验证:指的是保证软件正确的实现了某个特定要求的一系列活动。
确认:指的是为了保证软件确实满足了用户需求而进行的一系列活动。
9. 确认测试的范围:确认测试必须由用户积极参与,或者以用户为主进行。确认测试通常使用黑盒测试法
10. Alpha 和Beta 测试
(1)Alpha:有用户在开发者的场所进行,并且在开发者对用户的指导下进行测试。开发者负责记录发现的错误和使用中遇到的问题。Alpha 测试是在受控的环境中进行的。
(2)Beta :油软件的最终用户们在一个或多个客户场所进行,开发者通常不在测试的现场用户记录在测试过程中遇到的问题,并定期把这些问题报告给开发者。
11. 什么是白盒测试?
测试者了解被测程序的内部结构和处理过程, 对程序的所有逻辑路径进行测试, 在不同点检查程序状态, 确定实际状态与预期状态是否一致。 白盒测试主要采用的技术有:路径测试技术和事务处理流程技术,对包含有大量逻辑判断或条件组合的程序采用基于逻辑的测试技术。 逻辑覆盖:所谓的逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。
12. 黑盒测试:也称为功能测试, 它着眼于程序的外部特征, 而不考虑程序的内部逻辑结构。测试者把被测程序看成一个黑盒, 不用关心程序的内部结构。黑盒测试是在程序接口处进行测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如数据库或文件) 的完整性。 黑盒测试主要采用的技术有:等价分类法、边沿值分析法、错误推测法和因果图等技术。
13. 等价划分:是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出数据用例。
等价分类法的测试技术采用的一般方法?
(1) 为每个等价类编号;
(2) 设计一个新的测试方案, 以尽可能多的覆盖尚未被覆盖的有效等价类, 重复这一
步骤, 直到所有有效等价类被覆
(3) 设计一个新的测试方案, 使它覆盖一个尚未被覆盖的无效等价类, 重复这一步骤,
直到所有无效等价类被覆盖为止。
15. 调试:也称为纠错,作为成功测试的后果出现,调试是在测试发现错误之后排除错误的
过程。调试就是把症状和原因联系起来的尚未被人认识的智力过程。
16. 软件测试的一般步骤:单元测试、子系统测试、系统测试、验收测试、平行测试。
调试途径:(1)蛮干法(2)回溯法(3)原因排除法
回溯法:从发现症状的地方开始,人工沿程序的控制流往回追踪分析源程序代码,直
到找到错误原因为止。
原因排除法:(1)对分查找法(2)归纳法(3)演绎法
17. 软件可靠性的定义:软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率
软件可用性的一个定义: 软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。
18. 选择程序设计语言:(主要的实用标准)
(1)系统用户要求(2)可以使用的编译程序(3)可以得到的软件工具(4)工程规模
(5)程序员的知识(6)软件可移植性要求(7)软件的应用领域
19. 编码风格(1)程序内部的文档(2)数据说明,应易于理解便于查阅(3)语句结构,尽可能简单直观(4)输入输出,遵守人机界面准则(5)效率,能妈祖用户要求即可
19. 软件测试目标:为了发现程序中的错误
代码审查:人工测试源程序可以由审查小组正式进行,即称为审查。
审查小组组成:组长,程序的设计者,程序的编写者,程序的测试者
第八章
1. 四种软件维护类型:
(1)改正性维护:满足用户对已开发产品的性能与运行环境不断提高的要求,进而达
到延长软件寿命的目的。
(2)适应性维护:对程序使用期间发现的程序错误进行诊断和改正的过程,配合变化
了的环境进行修改软件的活动;
(3)完善性维护:满足用户在使用过程中提出增加新的功能或修改已有功能的建议而
进行的工作;
(4)预防性维护:为了改善未来的可维护性或可靠性而修改软件的工作。
2. 决定软件可维护性的因素:可理解性,可测试性,可修改性,可移植性,可重用性
3. 软件系统的文档:可以分为用户文档和系统文档
用户文档:主要描述系统功能和使用方法,并不关心这些功能怎样实现
用户文档包括:功能描述,安装文档,使用手册,参考手册,操作员指南
系统文档:描述系统设计、实现和测试等各方面的内容。
4. 软件维护:所谓的软件维护就是在软件已经交付使用之后,为了改正错误而满足心得需要而修改软件的过程。
1. 面向对象方法学的优点:(1)与人类的思维方法一致(2)稳定性好(3)可重用性好(4)较易开发大型软件产品(5)可维护性好
2. 对象的特点:以数据为中心;对象时主动的;实现了数据封装;实质上具有并行性;模块独立性好
3. 其他概念:(1)类:具有相同数据相同操作的一组相似对象的定义(2)实例(3)消息:就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明(4)方法
(5)属性(6)封装(7)继承:是指能够直接获得已有的性质和特征,而不必重复定义他们
第十三章
1. 管理:就是通过计划、组织和控制等一系列活动,合理的配置和使用各种资源,以达到
既定目标的过程
2. 软件的质量:就是软件与明确地和隐含地定义的需求相一致的程度,软件的质量是软件
与明确的叙述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
3. 工作量估算:(1)静态单变量模型(2)动太多变量模型(3)COCOMO2模型
4. 软件配置管理主要有五项任务:标示,版本控制,变化控制,配置审计,报告
5. 能力成熟度的五个等级:初始级,可重复级,已定义级,已管理级,优化级
3.怎样克服软件危机?
1)首先应该对计算机软件有一个正确的认识。
2)必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好,管理严密,各类人员协同配合,共同完成的工程项目。
3)应该开发更好的软件工具。
总而言之,为了解决软件危机,既要有技术措施,又要有必要的组织管理措施。
5,软件工程的7条基本原理
1) 用分阶段的生命周期计划严格管理
2) 坚持进行阶段评审
3) 实行严格的产品控制
4) 采用现代程序设计技术
5) 结果应能清楚的审查
6) 卡法小组的人员应该少而精
7) 承认不断改进软件工程实践的必要性
6,软件工程方法学包含3各要素:方法,工具和过程
7目前使用的最广泛的软件工程方法学分别是传统方法学和面向对象方法学
8通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也成为范型。
1. 可行性研究目的?
确定在问题定义中所提出的问题是否值得去解,在限制条件下,问题能否解决。 3可行性研究的任务:
1) 首先需要进一步分析和澄清问题定义
2) 在澄清问题定义之后,分析员应该导出系统的逻辑模型,仔细研究它的可行性。
3) 可行性研究的最根本的任务是对以后的行动方针提出建议
2为了快速的构建和修改模型,通常使用下述三种方法
1) 第四代技术
2) 可重用的软件构件
3) 形式化规格说明和原形环境
4数据模型中包含3种相互关联的信息:数据对象,数据对象的属性以及数据对象彼此间的相互连接的关系
5联系可分为
1) 一对一联系
2) 一对多联系
3) 多对多联系
7状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式
8在一张状态图中只能有一个初态,而终态可以有0至多个。
10为了有效的保证软件需求的正确性,这类软件工具应该满足下列要求
1) 必须有形式化的语法
2) 使用这个软件工具能够导出详细的文档
3) 必须提供分析规格说明书的不一致性和冗余性的手段,并且应该能够产生一组报告指明
对完整性分析的结果
4) 使用这个软件工具后,用该能够改进通信状况
模块化优点:
1) 采用模块化原理可以使软件结构清晰,是软件容易测试和调试
2) 有助于提高软件的可靠性
3) 能够提高软件的可修改性
4) 模块化有助于软件开发工程的组织管理
模块间的接口为通信,模块越多,接口越复杂
抽象就是把事物,状态或过程之间相似的方面家中个概括起来,暂时忽略他们之间的差异。
抽象与求精是一对互补的概念
局部化是指吧一些关系密切的软件元素物理的放的彼此靠近
模块”,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性:
⑴功能 即指该模块实现什么功能,做什么事情。必须注意:模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。
⑵逻辑 即描述模块内部怎么做。
⑶状态 即该模块使用时的环境和条件。
所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。即功能专一,模块之间无过多的相互作用的模块。
这种类型的模块可以并行开发,模块独立性越强,开发越容易。独立性强的模块,还能减少错误的影响,使模块容易组合、修改及测试。
启发规则往往能帮助找到改进软件设计提高软件质量的途径。主要有:改进软件结构提高模块独立性、模块规模应该适中、深度、宽度、扇出和扇入都应适当、模块的作用域应该在控制域之内、力争降低模块接口的复杂程度、设计单入口单出口的模块、模块功能应该可以预测。
模块的作用域:受该模块内一个判定影响的所有模块集合,模块的控制域是这个模块本身及所有直接或间接从属于它的模块集合
模块接口复杂是软件开发错误的主要原因
层次图+ipo图=hipo图
描绘软件结构的图形工具:描绘软件的层次结构的层次图,HIPO 图是美国IBM 公司发明的“层次图加输入/处理/输出图,结构图
结构程序设计的定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的
设计问题:系统响应时间,用户帮助设施,出错信息处理,命令交互
4系统响应时间重要属性:长度,易变性
5设计过程:用户界面设计是地带过程,先创建设计模型,再用原型实现这个设计模型由用户使用,评估,根据用户意见修改。
人机界面设计指南:1)一般交互指南
2)信息显示指南
3)数据输入指南
第七章
1. 实现:通常把编码和测试统称为实现。
测试:为了发现程序中的错误而执行程序的过程。
测试目的:在软件投入生产性运行之前,尽可能多地发现软件中的错误。 调试目的:通过测试发现错误之后诊断并改正错误。
2. 选择程序设计语言:(主要的实用标准)
(1)系统用户要求(2)可以使用的编译程序(3)可以得到的软件工具(4)工程规模(5)程序员的知识(6)软件可移植性要求(7)软件的应用领域
3. 编码风格:(1)程序内部的文档①含义鲜明的文字②注解(2)数据说明-应易于理解便于查阅(3)语句结构-尽可能简单直观(4)输入输出-遵守人机界面准则(5)效率-能满足用户要求即可
4. 软件测试的方法:黑盒测试,白盒测试
5. 软件测试的一般步骤:模块测试(单元测试)、子系统测试、系统测试(集成测试)、验收测试(确认测试)、平行运行。
6. 单元测试集中检测软件设计的最小单元——模块。单元测试可以应用人工测试和计算机测试两种不同类型的测试方法,单元测试主要使用白盒测试技术。
7. 单元测试重点:(1)模块接口(2)局部数据结构(3)重要的执行通路(4)出错处理通路(5)边界条件
8. 代码审查(人工测试):人工测试源程序可以由审查小组正式进行。 审查小组组成:组长,程序的设计者,程序的编写者,程序的测试者
9. 计算机测试:(1)主程序:驱动程序也就是一个主程序,他接受测试数据,把 这些数据传送给被测试的模块,并且印出有关的结果。
(2)虚拟子程序:存根程序也可以称为虚拟子程序,他使用被他代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。
10. 代码审查比计算机测试的优越:一次审查会上可以发现许多错误;缺点:适用于较少的程序段。
11. 集成测试是测试和组装软件的系统化技术。
12. 由模块组装成程序时有两种方法:(1)非渐增式测试(2)渐增式测试{自顶向下集成,自底向上集成}
13. 自顶向下集成(需要开发存根程序):从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。在把附属于主控制模块的那些模块组装到程序结构中去时,或使用深度优先的策略,或者使用宽度优先的策略。
深度优先的结合方法:先组装在软件结构的一条主控制通路上的所有模块,然后构造其他的控制通路。
宽度优先的结合方法:沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。
把模块结合进软件结构的具体过程4个步骤:
(1)对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块。
(2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序(新结合进来的模块往往又需要新的存根程序)。
(3)在结合进一个模块的同时进行测试。
(4)为了保证加入模块没有引进新的错误,可能需要进行回归测试(即,全部或部分地重复以前做过的测试)。
14. 自底向上集成(需要开发驱动程序):自底向上测试从“原子”模块(即在软件结构最底层的模块)开始组装和测试。
实现自底向上的结合策略的步骤:
(1)把底层模块组合成实现某个特定的软件子功能的族。
(2)第一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出。
(3)对由模块组成的子功能族进行测试。
(4)去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。
15. 实际应用中:(1)改进的自顶向下测试方法(2)混合法
混合法:对软件结构中较上层使用的自顶向下方法与软件结构中较下层使用的自底向上方法相结合。
16. 回归测试:在集成测试的范畴中,所谓的回归测试是指重新执行已经做过的测试的某个子集,以保证上述的这些变化没有带来非预期的副作用。
17. 确认测试:也称为验收测试,他的目标是验证软件的有效性。
验证:指的是保证软件正确的实现了某个特定要求的一系列活动。 确认:指的是为了保证软件确实满足了用户需求而进行的一系列活动。
18. 确认测试的范围:确认测试必须由用户积极参与,或者以用户为主进行。确认测试通常使用黑盒测试法。
确认测试的结果:(1)功能和性能与用户要求一致,软件是可以接受的。
(2)功能和性能与用户要求有差距
19.Alpha 和Beta 测试
(1)Alpha 测试:由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。Alpha 测试是在受控的环境中进行的。
(2)Beta 测试:由软件的最终用户们在一个或多个客户场所进行。开发者通常不在测试的现场用户记录在测试过程中遇到的问题,并定期把这些问题报告给开发者。
20. 测试方案:包括具体的测试目的、应该输入的测试数据和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。
21. 白盒测试(又称为结构测试):可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的内部结构和处理算法。按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
22. 白盒测试主要采用的技术有:逻辑覆盖,控制结构测试
逻辑覆盖:所谓的逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。
(1)语句覆盖:被测程序中每个语句至少执行一次(2)判定覆盖:每个语句至少执行一次,每个判定的每个分支都至少执行一次(3)条件覆盖:每个语句至少执行一次,判定表达式中每个条件都取到各种可能的结果(4)判定/条件覆盖:同时满足这两种覆盖(5)条件组合覆盖:使每个判定表达式中条件的各种可能组合都至少出现一次(6)点覆盖(7)边覆盖(8)路径覆盖
覆盖的强弱:语句覆盖
控制结构测试:(1)基本路径测试
步骤:①根据过程设计结果画出相应的流图②计算流图的环形复杂度③确定线性独立路径的基本集合④设计可强制执行基本集合中每条路径的测试用例(2)条件测试(3)循环测试
23. 黑盒测试(也称为功能测试):把程序看做一个黑盒子,完全不考虑程序的内部结构和处理过程。黑盒测试是在程序接口处进行测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如数据库或文件) 的完整性。
24. 黑盒测试主要采用的技术有:等价划分、边界值分析、错误推测
25. 等价划分:是一种黑盒测试技术,这种技术把程序的输入域划分成若干个数据类,据此导出测试用例。
使用等价划分法设计测试方案:
(1)首先需要划分输入数据的等价类
(2)设计一个新的测试方案以尽可能多的覆盖尚未被覆盖的有效等价类, 重复这一步骤, 直到所有有效等价类都被覆盖为止。
(3)设计一个新的测试方案, 使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类, 重复这一步骤, 直到所有无效等价类被覆盖为止。
26. 调试:也称为纠错,作为成功测试的后果出现,调试是在测试发现错误之后 排除错误的过程。调试就是把症状和原因联系起来的尚未被人认识的智力过程。
27. 调试途径:(1)蛮干法(2)回溯法(3)原因排除法
28. 回溯法:从发现症状的地方开始,人工沿程序的控制流往回追踪分析源程序 代码,直到找到错误原因为止。
原因排除法:(1)对分查找法(2)归纳法(3)演绎法
29. 软件可靠性的定义:软件可靠性是程序在给定的时间间隔内,按照规格说明 书的规定成功地运行的概率。
30. 软件可用性的一个定义: 软件可用性是程序在给定的时间点,按照规格说明 书的规定,成功地运行的概率。
31. 估算平均无故障时间的方法
软件的平均无故障时间MTTF 是一个重要的质量指标,往往作为对软件的一项要求,由用户提出来。 MTTF =
1 K (E T /I T -E c (τ) /I T )