基于由清华大学出版社出版 软件工程导论(第六版)期末知识点复习之用。
只讲考点不讲屁话,适用于相关专业大学生期末知识点复习,部分非考点知识点会省略,想要系统完整学习本教材可以移步其余文章。
期末考试试卷分值组成:
选择题 15道
分析与设计 大题 四道:
1、有关数据流、数据字典部分知识
2、面向结构方法(综合)
3、面向对象方法(综合)
4、有关教材P218-223、227 用例关系部分知识
以上考试范围为大致出题范围,具体题型详见往年试题(大题题型与软考大题类似)。
教材目录总共13章节,其中第四章节——形式化说明技术不在考试范围内,可以忽略。
剩下章节可以依据个人理解划分为三大部分:
(考前知识点记忆也可以分成三大部分去方便记忆)
第一部分:软件工程学(面向过程方法)——各种模型/图/设计工具/测试方法
软件工程学概述、可行性研究、需求分析、总体设计、详细设计、实现、维护
第二部分:面向对象方法学——画类图/画对象关系/分析提炼对象
面向对象方法学引论、面向对象分析、设计、实现
第三部分:软件项目管理——了解为主/考察为辅
代码行技术、工作量估算、进度计划、人员组织、质量保证等等......
前两部分是期末试题考察重点部分,概念类较多偏向“文科”,但是都可以以模块化思维去记忆知识点,知识多但不难。考察核心就是对于软件开发过程中遇到的各种情景可以做出判断,会使用数据流图、数据字典、实体关系图、状态转换图等等手段去分析解决实际问题,考察画图+分析对象结构+基本概念。
1、软件工程学概述
重点:基本概念理解,四个模型(瀑布、快速原型、增量、螺旋模型)优缺点和适用范围。
(1)软件:程序+数据结构+文档
(2)软件危机:计算机软件的开发和维护过程中所遇到的一系列严重问题
(3)软件危机产生原因:
客观:①软件缺乏可见性②软件规模庞大
主观:①忽视软件需求分析②对用户要求没有清晰认知③轻视软件维护
如何消除软件危机:正确认识+技术措施+管理措施
技术措施 + 管理措施 = 软件工程
(4)软件工程基本目标:满足用户需求、及时交付、不超预算、质量高。
(5)软件工程方法学 = 方法 + 工具 + 过程
(6)软件生命周期:
① 定义时期:问题定义 ---> 可行性研究 ---> 需求分析
② 开发时期:总体/概要设计 ---> 详细设计 ---> 编码和单元测试 ---> 综合测试
③ 维护时期:软件维护——持续时间最长、费用最多的阶段
(7) 软件生命周期模型:
考察题型:
①瀑布模型——最基础和传统的模型
瀑布模型就是文档驱动的带有反馈的传统软件开发生命周期的基本流程,只能按部就班完成当前阶段工作之后才能进入下一阶段,某一阶段有问题只能返工直到问题解决,由于需求在一开始就已经确定所以不可能在软件开发的过程中修改需求,否则不论开发到什么程度,都要重头开始。
优点:文档驱动——规范开发过程、质量保证、易于后期维护、降低预算
缺点:不可逆转、难以在开发过程中发现问题,系统可能不满足需求。
适用范围:需求明确且全面、软件使用环境稳定不易变动、用户要求低。
②快速原型模型——简化的、不带反馈的瀑布模型
通俗来说就是快速实现一个基本可用的程序,根据用户使用反馈再进一步对需求进行修改、优化,不断优化直到接近满足用户的真实需求。
要明确的是,在实际软件开发中,用户实际上对于自己的需求根本没有一个明确的要求,都是在不断写程序——交给用户测试——提出缺陷——修改程序 这一循环过程中一步步补充直到完善的。
优点:关注并满足用户需求、开发过程线性(参考上文描述)。
缺点:原型设计困难、容易导致效率低、难以创新。(改了一大顿甲方说要第一版。。。)
适用范围:对开发的领域熟悉且有快速的原型开发工具。
③增量模型——化整为零的多构件递归开发模型
在完成了基本的需求分析和概要设计之后,将即将开发的系统拆分成若干构件,逐个构件进行增量开发,分解时唯一必须遵守的约束条件是:当把新构件集成到现有软件中时,所形成的产品必须是可测试的。
优点:反馈及时、短时间内可交付部分功能、用户适应产品快
缺点:构件划分和继承较困难、容易退化成边做边改而不是做好集成的模式
④螺旋模型——增加了风险分析过程的快速原型模型
高级的快速原型模型
优点:风险驱动、利于将软件质量作为开发目标、减少过多测试或者测试不足
缺点:风险驱动要求开发人员具有丰富经验,否则将面临灾难
适用范围:内部开发的大规模软件项目,节省预算,规避风险
⑤喷泉模型——面向对象的迭代开发模型
优点:无缝、迭代
缺点:过多的迭代次数会增加开发成本,延迟交付时间
2、可行性研究
重点:数据流图和数据字典。
(1)目的:以最小的代价在尽可能短的时间内确定问题是否能够解决
(2)核心:对现有的系统进行分析
(3)系统流程图:掌握基本符号即可
(4)数据流图(DFD):描述信息流和数据从输入到输出所经受的变换。没有任何具体物理部件,只是描绘数据在软件中流动和被处理的逻辑过程
基本符号:
核心就是区分:谁做了什么用到了什么数据。其中这个“谁”,就是数据流图中的原点/终点,画图就是矩形,“做”了什么就是圆角框,也就是实际上操作的“行为”,用到的数据就是开口矩形,存储读写的数据,最后用实线箭头将他们连接起来,在数据流箭头上标注关系,也就是谁做了什么,谁和做二者的关系。
在实际做题过程中,分析题干中的流程,优先确定基本框架,也就是谁干了什么。接着确定谁先干了什么,后干了什么,进一步细化细节,最后对于细化的再予以补充进一步细化,也就是教材43-44页的内容。考试出题会从两种角度考察:要么给出文字叙述数据流,让你根据文字分析并画出数据流图,要么是给出不完整的数据流图,让你补充缺失的数据原点/终点对应的对象,或者补充数据处理行为,也就是考你谁做了什么中,谁是指的什么,做了什么做了什么具体行为。
以2016-2017年真题为例做参考:
这部分考点不难,只要可以静下心来仔细分析这部分的分数都能拿到。
(5)数据字典:是关于数据的信息集合,即对数据流图中包含的所有元素定义的集合,由数据流、数据元素、数据存储、处理 四类元素的定义组成
数据元素的基本类型:顺序(xx + xx)、选择([xx | xx])、重复(0{数字}5)、可选
符号表示:
=
的意思是等价于+
的意思是和(即连接两个分量)- [] 的意思是或(即从括号内的分量中选择一个)
|
的意思是隔开供选择的分量{}
的意思是重复()
的意思是可选(即括号内的分类可有可无)
真题参考:
与前文的数据流图为考试必须拿到的大题分数,这两类题完全可以做到满分,多揣摩理解。
3、需求分析
重点:实体关系/联系图和状态转换图。
(1)结构化分析方法——模型的分析与创建
(2)需求分析的任务:回答系统必须做什么的问题
(3)实体—联系图(E-R图)
①由 数据对象(实体)、属性、联系三者组成。
②联系存在:一对一(1:1)、一对多(1:N)、多对多(M:N)的关系。
(4) 状态转换图:
符号:初态用实心圆表示、终态用一对同心圆(内实外线)表示、中间状态用圆角矩形表示,其中用两条横线分成三个部分。
书中举例:
此部分没有找到往年真题,不是考察重点,仅学习掌握基本知识即可,遇到题干会进行分析及画出简单的ER图或者状态图即可
(5)IPO图——辅助说明数据流图(仅作了解)
4、总体设计
重点:①深入理解模块耦合、内聚、深度、宽度、扇入扇出等概念
②掌握总体设计工具:层次图、HIPO图、结构图
(1)目的:解决系统怎样做的问题
(2)任务:设计软件结构、确定系统中每个程序有哪些模块组成及模块间的相互关系
(3)主要阶段:系统设计阶段和结构设计阶段
(4)高质量结构标准:高内聚、低耦合、顶层模块高扇出、底层模块高扇入。
(5)模块独立(耦合和内聚的概念要理解记忆):
耦合:不同模块之间互连程度的度量
数据耦合:模块间通过参数交换数据信息
标记耦合:模块间通过数据结构本身传递
控制耦合:模块间传递的信息中包含控制信息
外部耦合:一组模块都访问同一全局简单变量不通过参数表传递该全局变量的信息
特征耦合:被调用模块只使用了传入的数据结构中的部分数据元素
公共耦合:多模块通过一个公共数据环境相互作用
内容耦合:一个模块直接访问另一个模块的内部数据、一个模块不通过正常入口转到另一个模块内部、两个模块有一部分程序代码重叠或者一个模块有多个入口
耦合度从低到高:
无直接耦合—>数据耦合—>标记耦合—>控制耦合—>外部耦合—>公共耦合—>内容耦合
内聚: 模块内各元素彼此结合的紧密程度
偶然内聚:一个模块完成一个任务,这些任务彼此间即使有关系,关系也是很松散的
逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类
时间内聚:一个模块内包含的任务必须在同一段时间内执行(初始化)
过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行
通信内聚:模块中所有的元素都使用同一个输入数据和(或)产生同一个输出数据
顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个元素的输出数据作为下一个元素的输入数据)
功能内聚:模块内所有处理元素属于一个整体,完成单一的功能
内聚度从低到高:
偶然内聚—>逻辑内聚—>时间内聚—>过程内聚—>通信内聚—>顺序内聚—>功能内聚
(6)深度、宽度、扇出和扇入:
深度:表示软件结构中控制的层数,粗略标志了一个系统的大小和复杂程度
宽度:软件结构内同一个层次上的模块总数的最大值
扇出:一个模块直接控制(调用)的模块数量 / 调用下级模块数量(平均3-4 上限5-9)
扇入:一个模块被调用的上级模块数量
宽度影响最大的因素是模块的扇出。
(7)层次图——描绘软件的层次结构
层次图中一个矩形框代表一个模块,方框间的连线表示调用关系
(8)结构图
结构图中一个矩形框代表一个模块,尾部空心圆箭头表示传递数据,实心圆表示传递控制信息。
层次图和结构图并不严格表示模块的调用次序。
5、详细设计
重点:
①详细设计工具:程序流程图、盒图、PAD图、判定表和判定树
②Jackson图:面向数据结构设计方法
③掌握计算环形复杂度的方法
(1)目标:确定应该怎样具体地实现所要求的系统——精确描述目标系统
(2)基本控制结构:顺序、选择和循环
(3)详细设计工具:
①程序流程图:
②盒图:又称N-S图
历年真题参考:
③PAD图/判定表/判定树仅作了解,看书即可。
④Jackson图——面向数据结构的设计方法,不用掌握画法。
(4)计算环形复杂度方法:(三种方法,个人推荐最后一种)
①流图中线性无关的区域数等于环形复杂度
②V(G) = E - N + 2,其中E是流图中边的条数,N是结点数
③V(G) = P + 1,其中P是流图中判定结点的数目
判定结点:找图中一个箭头进,两个箭头出的圆形结点就是判定结点。
6、实现
重点:单元测试、集成测试、白盒/黑盒测试技术
编码+测试统称为实现,这一部分内容以测试技术为重点考察对象,考察如何设计测试用例并给出预计测试结果等。
(1)软件测试目的:竭力证明程序有错误,不能按照预定要求正确工作
(2)测试方法:黑盒测试—功能测试,白盒测试—结构测试
黑盒测试:不考虑程序内部结构和处理过程,当作一个黑盒子,只在程序接口进行测试,只测试程序的输入和输出,又称功能测试。
白盒测试:按照程序内部的逻辑,检测程序中的主要执行通路是否按照预定要求正确工作,当作一个透明白盒子,又称结构测试。
(3)测试步骤:
模块/单元测试—>子系统测试—>系统/集成测试—>验收/确认测试—>平行运行
(4)单元测试:
检测软件设计的最小单元——模块,利用白盒测试技术,依据详细设计文档测试。
(5)集成测试:分为自顶向下和自底向上两种集成策略。
(6)确认测试/验收测试:采用黑盒测试法。
(7)白盒测试技术:
1、逻辑覆盖:
①语句覆盖:至少每个语句应该执行一次
②判定覆盖:不仅每个语句至少执行一次,每个判定的每种可能结果都至少执行一次
③条件覆盖:不仅每个语句至少执行一次,判定表达式中的每个条件都取到各种可能的结果
④判定/条件覆盖:选取足够多的数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都能取到各种可能的结果
⑤条件组合覆盖:每个判定表达式中条件的各种可能组合都至少出现一次
⑥点覆盖:程序执行路径至少经过流图的每个结点一次(与语句覆盖标准相同)
⑦边覆盖:程序执行路径至少经过流图的每条边一次(与判定覆盖标准相同)
⑧路径覆盖:程序的每条可能路径都至少执行一次
覆盖程度:
语句覆盖 = 点覆盖 < 判定覆盖 = 边覆盖 < 条件覆盖 < 判定/条件覆盖 < 条件组合覆盖
2、控制结构测试:①基本路径测试②条件测试③循环测试(看书了解即可)
(8)黑盒测试技术:
①等价划分②边界值分析③错误推测
7、维护
四个维护:改正性维护、适应性维护、完善性维护、预防性维护
软件可靠性定义:维护人员理解、改正、改动或改进这个软件的难易程度
决定软件可维护性的因素:
①可理解性 ②可测试性 ③可修改性 ④可移植性 ⑤可重用性
8、面向对象方法学引论
重点:
①理解基本概念(面向对象方法学、对象、类、实例、封装、集成、多态等)
②会正确根据题意画出三个模型(对象模型、动态模型和功能模型)
(1)面向对象方法学组成:对象+类+继承+对象间通讯
OO = objects+classes+inheritance+communication with messages
(2)各类概念:
①对象:对问题域中某个实体的抽象
②类:对具有相同属性和行为的一个或多个对象的描述
③实例:由某个特定的类所描述的一个具体的对象
④封装:把数据和实现操作的代码集中起来放在对象内部
⑤继承:子类自动地共享基类中定义的数据和方法的机制
⑥多态:类的不同层次中可以共享相同命名,但不同层次的每个类需要独自实现逻辑。
(3)面向对象建模——对象模型、动态模型和功能模型
(4)对象模型——类图
①类的定义:
②属性定义: 可见性 属性名:类型名=初值{性质串}
可见性:公有的(public)+ 私有的(private)- 保护的(protected) #
③类的六种关系:
(5)动态模型——状态图(见前文)
(6)功能模型——UML用例图
9、面向对象分析
核心:读题干描述,找名词定位。
面向对象分析的五个层次:主题层、类与对象层、结构层、属性层和服务层
10、面向对象设计
面向对象设计准测:模块化、抽象、信息隐藏、弱耦合、强内聚、可重用(99%考)
启发规则:①设计结果清晰易懂②一般-特殊结构的深度适当③设计简单的类④使用简单的协议⑤使用简单的服务⑥把设计变动减至最小
深入理解P268 图11.2 四大组成部分,会根据题干找出对应部分
11、面向对象实现
非重点,略
12、软件项目管理
代码行技术:程序规模小——LOC 程序规模大——KLOC
优点:易于计算代码行数
缺点:不同语言实现同样功能代码行数并不相同,不严谨
功能点技术:根据对软件信息域特性和软件复杂性来估算软件规模
此处详细计算过程和方法参考教材P306-307
软件质量保证:浏览了解教材P324-328内容即可。
至此结束,祝考试顺利!