软件工程复习提纲
第一章
1.软件危机包含两方面的问题:
1)如何开发软件,以满足对软件日益增长的需求
2)如何维护数量不断膨胀的已有软件。
2.软件生命周期由软件定义软件开发运行维护三个时期组成,每个时期又可进一步划分成若干个阶段。
软件定义划分为:问题定义、可行性研究、需求分析
软件开发划分为:总体设计、详细设计、编码和单元测试、综合测试。
运行维护:不再分;
这个阶段每个阶段的基本任务是什么
1、问题定义:明确要解决的问题是什么。
2、可行性研究:这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。
3、需求分析:准确的确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。这个阶段的一项重要任务,是用正式文档准确记录对目标系统的需求,这份文档通常称为规格说明书。
4、总体设计:必须回答的关键问题是“概括的说,应该怎样实现目标系统?”总体设计又称为概要设计。首先,应该设计出实现目标系统的几种可能的方案。另一个就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块之间的关系。
5、详细设计:关键问题是“应该怎样具体的实现这个系统呢?”这个阶段将详细的设计每个模块,确定实现模块功能所需要的算法和数据结构。
6、编码和单元测试:写出正确的容易理解、容易维护的程序模块。选择一种高级语言,将详细设计的结果翻译成用选定的语言书写的程序,并且自习测试编写出的每一个模块。
7、综合测试:通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试:集成测试、验收测试;
8、软件维护:通过各种必要的维护活动是系统持久的满足用户的需要。
通常有四类维护活动:改正性维护,适应性维护,完善性维护,预防性维护。
考研步骤流程图3.软件过程的各种模型:瀑布模型(文档驱动模型),快速原型模型,增量模型,螺旋模型(风险驱动的模型),喷泉模型(适用于面向对象软件开发),Rational统一过程,敏捷过程和极限编程,微软过程。
各模型的基本特点(描述出过程的特点能识别出是哪种过程模型)
4.软件工程的基本原理:
1)用分阶段的生命周期计划严格管理
2)坚持进行阶段评审
3)实行严格的产品控制
4)采用现代程序设计技术
5)结果应能清楚地审查
6)开发小组的人员应该少而精
7)承认不断改进软件工程实践的必要性。
第二章
5.可行性研究,应该至少从三个方面研究每种解法的可行性:技术可行性、经济可行性、操作可行性。
6.可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。
7.可行性研究的过程包括哪些主要步骤?
1)复查系统规模和目标
2)研究目前正在使用的系统
3)导出新系统的高层逻辑模型
4)进一步定义问题
5)导出和评价供选择的解法
6)推荐行动方针
7)草拟开发计划
8)书写文档提交审查
8.数据流图是描绘系统逻辑功能的图形表示,掌握数据流图的基本符号和附加符号,会用数据流图描绘系统逻辑功能。
9.数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
定义数据的方法。
10.数据流图和数据字典共同构成了系统的逻辑模型。
11.货币时间价值的公式:F=P(1+i)n
第三章
12.与用户沟通获取需求的方法有哪些?
访谈,面向数据流自顶向下求精,简易的应用规格说明技术,快速建立软件原型
13.软件需求规格说明书是需求分析阶段得出的最主要文档。
14.会画实体-联系图(E-R图):实体、属性、联系
15.状态转换图,会看,明白其含义
16.层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。会画层次方框图。
17.Warnier图也用树形结构描绘信息,但是比层次方框图提供更丰富的描绘手段,会看Warnier图,明白其含义。
18.IPO图是输入、处理、输出图的简称,它能够方便的描绘输入数据、对数据的处理和输出
数据之间的关系。改进的IPO图。
第五章
19.软件设计过程中应该遵循的基本原理:
1)模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,由这些模块集成起来构成一个整体,可完成指定的功能,满足用户的需求。
2)抽象:抽出事物的本质特征而暂时不考虑它们的细节。
3)逐步求精:为了解决主要问题而推迟对问题细节的考虑,是一种把一个时期内要解决的问题按优先级排序的技术。
4)信息隐藏和局部化:信息隐藏指的是一个模块包含的信息对不需要这些信息的模块来说是不能访问的。局部化指把关系密切的软件元素物理地放得彼此靠近。
5)模块独立:开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,可做到模块独立。可用内聚和耦合来衡量模块的独立程度。
20.模块独立程度可以用内聚和耦合两个定性标准度量。耦合衡量不同模块彼此间互相依赖的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。
21.有哪些种类的耦合?各有什么特点?
数据耦合,控制耦合,特征耦合,公共环境耦合,内容耦合。
有关使用耦合的设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。
22.内聚分为高内聚、中内聚、低内聚。各有哪几种?各有什么特点?
偶然内聚、逻辑内聚、时间内聚是低内聚
过程内聚、通信内聚是中内聚
顺序内聚、功能内聚是高内聚
23.总体设计中用于改进软件设计提高软件质量的启发性规则:
1)改进软件结构提高模块独立性
2)模块规模应该适中
3)深度、宽度、扇出和扇入都应适当
4)模块的作用域应该在控制域之内
5)力争降低模块接口的复杂程度
6)设计单入口单出口的模块
7)模块功能应该可以预测
24.上题中深度、宽度、扇入、扇出的含义
深度:表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。
宽度:软件结构内同一个层次上的模块总数的最大值;
扇出:一个模块直接控制(调用)的模块数目,扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块;
扇入:一个模块的扇入表明有多少个上级模块直接调用它,扇入越大则共享该模块的上级模块数目越多,这是有好处的。
25.层次图用来描绘软件的层次结构,层次图中一个矩形框代表一个模块,方框间的连线表示调用关系。会画层次图。
26.HIPO图是“层次图加输入/处理/输出图”的英文缩写,会画HIPO图。
27.结构图是描绘软件结构的图形工具,图中一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头表示模块的调用关系。会画结构图。
第六章
结构程序设计对定义:如果一个程序的代码块仅仅通过顺序、选择、和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口,一个出口,则称这个程序是结构化的。
28.结构化程序设计三种基本控制结构是:顺序、选择、循环
29.掌握过程设计的几种工具:程序流程图、盒图(N-S图)、PAD图、判定表、判定树、过程设计语言(伪码,这个要能看懂)。
30.会画流图,能够用三种方法计算程序环形复杂度。
1)流图中的区域树等于环形复杂度;
2)流图G中的环形复杂度等于VG=EN+2E是流图中边的条数,N是节点数。
3)流图G中的环形复杂度等于VG=P+1P是图中判定结点的数目;
第七章
31.选择程序设计语言时应该尽量选用理想的高级语言,但是实际选取语言时不能仅仅使用理论上的标准,还必须同时考虑实用方面的各种限制。
32.软件测试是为了发现程序中的错误而执行程序的过程。
G.Myers给出了一些关于测试的规则,也可以看做是测试的目标或定义:
1)测试是为了发现程序中的错误而执行程序的过程。
2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
3)成功的测试是发现了至今为止尚未发现的错误的测试。
33.大型软件系统的测试过程基本上由下述几个步骤组成:模块测试(单元测试),子系统测试、系统测试(系统测试与子系统测试一起称为集成测试)、验收测试、平行运行。各步骤的含义。
1)模块测试:保证每个模块作为一个单元能正确运行,所以模块测试通常成为单元测试;
2)子系统测试:把经过单元测试的模块放在一起形成子系统来测试。模块间的协调和通信是这个测试过程中的主要问题,因此,这个步骤着重测试模块的接口。
3)系统测试:把经过测试的子系统装配成一个完整的系统来测试。不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。
4)验收测试:把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要是用实际数据进行测试。验收测试也称为确认测试。
5)平行运行:即同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。
34.软件测试准则:
1)所有测试都应该追溯到用户需求
2)应该远在测试开始之前就制定出测试计划
3)把Pareto原理应用到软件测试中(80%的错误出现在20%的模块中,因此应该重点测试它们)。
4)应该从小规模测试开始,并逐步进行大规模测试。
5)穷举测试是不可能的,因此必须精心设计测试方案,才有可能充分覆盖程序逻辑并使程
序达到所要求的可靠性。
6)为了达到最佳的测试效果,应该由独立的第三方从事测试工作。
35.测试方法分为黑盒测试(又称功能测试)和白盒测试(又称结构测试)两种。
黑盒测试法:
不考虑程序的内部结构和处理过程,只是在程序接口进行的测试,只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当的接收
输入数据产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。又称为功能测试。
白盒测试法:
完全了解程序的内部结构和处理过程,按照程序内部的逻辑测试程序,检验程序中的每条通路是否能按预定要求正确工作。又称为结构测试。
36.集成测试可以有非渐增式测试方法和渐增式测试方法,渐增式测试分为自顶向下和自底向上两种集成策略。它们各表示什么含义。
非渐增式测试:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。
渐增式测试:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合起来进行测试。
37.逻辑覆盖是对一系列测试过程的总称,主要的覆盖标准有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖。每种覆盖是什么含义。会用前5种覆盖标准设计测试用例。
38.会用基本路径测试技术设计测试用例
39.会写条件测试中的条件约束集。
40.理解结构化程序中的简单循环、嵌套循环和串接循环应该如何进行循环测试。
41.理解等价类划分和边界值分析两种黑盒测试技术。
41.1.1等价划分
等价划分是用黑盒法设计测试方案的一种技术。其基本思想是:选取少量最有代表性的输入数据,以期用较小的代价暴露出较多的程序错误。