目录
第一章 软件工程学概述
1、软件危机的表现:
- 对软件开发成本和进度估计不准确
- 用户对已完成的软件系统不满意的现象常发生
- 软件产品的质量不靠谱
- 软件常常不可维护
2、软件工程方法学的三个要素:方法、工具、过程
3、软件生命周期的定义:软件从被提出到被淘汰的过程的存在期,主要包含八个部分
- 问题定义
- 可行性分析
- 需求分析
- 总体设计
- 详细设计
- 编码和单元测试
- 综合测试
- 软件维护
4、问题定义要回答的问题是什么?--“要解决什么问题?”
5、需求分析要回答的问题?--“为了解决这个问题,目标系统必须做什么?”
6、需求分析阶段的产物是什么?---软件需求规格说明书
7、软件过程的定义:软件过程是为了获得高质量软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作步骤
8、各个模型的特点,优缺点?
- 瀑布模型:特点:具有顺序性和依赖性;推迟实现的观点;质量保证的观点;优点:强迫开发人员采用规范的方法; 缺点:几乎完全依赖书面的规格说明,缺乏灵活性
- 快速原型模型:特点:快速原型模型的本质是快速,软件开发是顺序进行的
- 增量模型:特点:结构开放;优点:短时间能够向用户提交部分工作的产品;逐步添加产品功能可以使用户有较充裕的时间来学习和适应新产品,从而减少一个全新软件可能给用户组织带来的冲击。
- 螺旋模型:特点:加入了风险分析;优点:有利于软件重用;缺点:迭代效率不高;
- 喷泉模型:特点:体现了面向对象软件开发过程迭代和无缝的特性;缺点:文档审核难度大。
9、软件=程序+数据+文档
10、软件经历的三个阶段:
- 程序设计阶段
- 程序系统阶段
- 软件工程阶段
第二章 可行性研究
1、可行性研究的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决
2、可行性研究三个方面:
- 技术可行性
- 操作可行性
- 经济可行性
3、数据流图和数据字典共同定义了新系统的逻辑模型
4、系统流程图的定义:他的基本思想是用图形符号以黑盒子的形式描绘组成系统的每个部件。表达的是数据在系统各个部件之间流动的情况
5、数据流图的定义:数据流图描绘了信息流和数据从输入移动到输出的过程所经受的变换。它只是描绘数据在软件中流动被处理的逻辑过程
6、画数据流图
7、数据字典的组成
- 数据流
- 数据存储
- 数据流分量
- 处理
8、数据字典的作用
- 作为分析阶段的工具
- 数据字典中包含的每个元素的控制信息是很有价值的
- 数据字典是开发数据库的第一步
9、成本估计:代码行技术、任务分解技术
第三章 需求分析
1、需求分析的任务:准确回答“系统必须做什么?”
2、综合要求
- 功能需求
- 性能需求
- 可靠性和可用性需求
- 出错处理需求
- 接口需求
- 约束
- 逆向需求
- 将来可能提出的要求
3、获得需求的方法
- 访谈
- 面向数据流自顶向下求精
- 简易的应用规格说明技术
- 快速建立软件原型
4、需求分析过程的三个模型:数据模型(用E-R图建立)、功能模型(用数据流图建立)、行为模型(用状态转换图建立)
5、数据模型三个要素:数据对象(实体)、属性、联系
6、状态转换图的定义:通过描述系统的状态及引起系统状态转换的时间,来表示系统的行为
7、一张状态图中只能有一个初态,而终态可以有0个至多个
8、状态是任何可以被观察到的系统行为模式,一个状态代表一种行为模式。
9、事件是在某个特定的时刻发生的事情,它是对引起系统做动作获从一个状态转换到另一个状态的外界事件的抽象
10、其他图形工具
- 层次方框图:
- Warnier图:表明信息的逻辑组织,可以指出一类信息或一个信息元素是重复出现的
- IPO图
11、从哪些方面验证软件需求的正确性?“现有一完(丸),包治百病”
- 现实性
- 有效性
- 一致性
- 完整性
第四章 形式化说明技术
1、好消息:这一章不考
第五章 总体设计
1、总体设计的基本目的:就是回答“概括的说,系统该如何实现”这个问题
2、系统设计的两个主要阶段
系统设计阶段:确定系统的具体实现方案
结构设计阶段:确定软件结构
3、设计原理
- 模块化:模块是由边界元素界定的相邻程序元素的序列。
- 抽象
- 逐步求精
- 信息隐藏和局部化
- 模块独立
4、内聚:内聚标志着一个模块内各个元素彼此结合的紧密程度
5、耦合:耦合是对一个软件结构内不同模块之间互联程度的度量
6、模块独立的判断标准----高内聚、低耦合
7、有哪几种形式的内聚?---功顺通过时逻偶(功盛通过石螺欧)
- 功能内聚(从上往下,内聚程度逐渐降低)
- 顺序内聚
- 通信内聚
- 过程内聚
- 时间内聚
- 逻辑内聚
- 偶然内聚
8、有哪几种形式的耦合---数控特公内 从上至下 耦合度逐渐增大
- 数据耦合(模块之间交换的信息只是数据)
- 控制耦合(交换的信息包含 控制信息)
- 特征耦合(传递的参数包含整个数据结构)
- 公共环境耦合(模块间通过公共数据环境相互作用)
- 内容耦合(一个模块访问另一个的内部数据;一个模块有多个入口)
9、启发规则
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇入(表示有多少个上级模块调用它)、扇出(一个模块直接控制的模块数目)都应适当
- 模块的作用域应该在控制域之内
- 降低模块接口的复杂程度
- 设计单入口单出口的模块
- 模块功能应该可以预测
10、变换流的定义:信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经过加工处理以后再沿输出通路变换成外部形式离开软件系统。
11、事务流的定义:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。
第六章 详细设计
1、程序流程图(会画)
2、盒图(会画)
3、PAD图:使用PAD图提供的定义功能来逐步求精,而程序流图不可以逐步求精
4、PAD图的优点:得到的程序必然是结构化程序;表现程序逻辑,易读、易懂、易记;支持自顶向下、逐步求精方法的使用
5、判定表、判定树(判定表的变种)
判定树的优点:形式简单,一眼就能看出其含义,更加直观,但是不如判定表简洁
6、过程设计语言(PDL)也叫伪代码
7、面向数据结构的设计方法的最终目标是得出对程序处理过程的描述(Jackson
方法和warnier方法就是两种面向数据结构的方法)
8、Jackson图的逻辑数据结构有三种:顺序结构、选择结构、重复结构
9、Jackson方法的目标:得出对程序处理的详细设计
10、计算环形复杂度的方法—针对流图
- 环形复杂度V(G)=流图中区域数(最外边的大区域也算)
- 环形复杂度V(G)=E-N+2(E是流图的边数,N是结点数)
- 环形复杂度V(G)=P+1(P是判定结点的数目)
11、IPO图由 输入 处理 输出 三个框组成
第七章 实现
1、编码和测试统称为实现
2、软件测试的目标:
- 为了发现程序中的错误而执行的过程
- 发现尽可能多的错误
- 成功的测试是发现了迄今尚未发现的错误的测试
3、软件测试准则
- 所有测试都能追溯到用户需求
- 应该远在测试前就制定出测试计划
- 把Pareto原理(80%的错误是由20%的模块引起的)应用到软件测试中
- 应该从“小规模”测试开始,并逐步进行“大规模测试”
- 穷举测试是不可能的
- 为了达到最佳测试效果,应该有独立的第三方从事测试工作
4、测试方法:
- 白盒测试(结构测试):通过测试来验证产品内部动作是否按照规格说明书的规定正常运行
- 黑盒测试(功能测试):通过测试检验是否每个功能都能正常使用
5、测试步骤
- 模块测试
- 子系统测试
- 系统测试
- 验收测试(确认测试)
- 平行运行
6、测试阶段的输入信息
- 软件配置:需求说明书、设计说明书、源程序清单
- 测试配置:测试计划、测试方案
7、单元测试主要使用白盒测试
8、驱动程序的定义:驱动程序是一个“主程序”,它接受测试数据,把这些数据传送给被测试的模块,并且印出有关的结果
9、存根程序的定义:存根程序代替被测试的模块调用的模块
10、集成测试的目标:发现与接口有关的问题
11、模块组装程序时的两种方法
- 非渐增式测试:一下子把所有模块组装到一起作为一个整体测试
- 渐增式测试:先测试一小段程序,然后再将其与另一段程序组装,再测试,再组装……
12、使用渐增式测试方法的两种集成方式
- 自顶向下集成:需要存根程序、不需要驱动程序
- 自底向上集成:需要驱动程序,不需要存根程序
13、确认测试(验收测试)的目标:验证软件的有效性,软件规格说明书是进行确认测试的基础
14、Alpha测试:由用户在开发者的场所进行测试(在受控环境下测试)
15、Beta测试:由软件的最终用户在多个客户场所测试(在不可控制的环境下测试)
16、设计测试方案是测试阶段的关键技术问题
17、白盒测试技术
- 通常把输入的测试数据和预期的输出结果称为测试用例
- 判断覆盖比语句覆盖强,但只是覆盖了一半路径
- 有时判定/条件覆盖不比判定覆盖更强
- 点覆盖类似语句覆盖
- 边覆盖:执行路径至少经过程序图中每条边一次。类似判定覆盖
- 路径覆盖:每个判定表达式中条件的各种可能组合都至少出现一次
18、黑盒测试—等价划分,边界值分析,错误推测
19、软件可靠性的定义:程序在给定的时间间隔内,按照规格说明书成功地运行的概率
20、软件可用性的定义:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率吧
21、7.9---软件的可靠性 计算题---第9题和第10题
第八章 维护(大题+选择题)
1、软件维护的定义:软件已经交付使用之后,为了改正错误或者满足新的需要而修改软件的过程
2、四大维护:
- 改正性维护(17%-21%):诊断错误和改正错误的过程
- 预防性维护(4%):为了改进未来的可维护性和可靠性而修改软件的过程
- 完善性维护(占比最大55%-66%):在使用软件的过程中,用户提出增加新功能或者修改已有的功能的建议而修改软件的过程
- 适应性维护(18%-25%):为了和变化的环境适当的配合而做出的修改软件的过程
3、软件的可维护性的定义:维护人员理解、改正、改动或改进这个软件的难易程度
4、决定可维护性的因素
- 可理解性
- 可测试性
- 可修改性
- 可移植性
- 可重用性
第九章 面向对象方法学引论
1、类有私有变量和公有变量。
2、该过程需要建立的三种模型
对象模型:描述系统的数据结构(类图和对象图);(对象模型是最基本最重要的)
动态模型:描述系统的控制结构(状态图)
功能模型:描述系统的功能(用例图)
这里区别于需求分析过程的三个模型:数据模型(用E-R图建立)、功能模型(用数据流图建立)、行为模型(用状态转换图建立)
3、类图是面向对象建模最常用的图,描述的是类与类之间的静态关系
4、对象图表示一组对象之间的联系,对象图是类图的实例
5、包图由包和包间联系构成,包的联系:依赖、泛化
6、类与类之间的关系:关联(聚集是关联的特例)、依赖、泛化(继承)、细化
7、泛化包含:普通泛化和受限泛化,以下是普通泛化的例子
8、友元关系是依赖的一种:
第十章 面向对象分析
1、面向对象分析的顺序:7个
寻找类与对象、识别结构、识别主体、定义属性、建立动态模型、建立功能模型、定义服务
2、面向对象分析(OOA)的关键是识别出问题域中的类与对象
3、面向对象分析定义:抽取和整理用户需求并建立问题域精确模型的过程
4、建立动态模型的步骤 -----编设画画审
- 编写脚本
- 设想用户界面
- 画事件跟踪图
- 画状态图
- 审查动态模型
第十一章 面向对象设计
1、面向对象设计准则
- 模块化
- 抽象
- 信息隐藏
- 弱耦合
- 强内聚
- 可重用
2、软件重用三个层次:知识重用、方法和标准重用、软件成分重用
3、软件成分重用:代码重用、设计结果重用、分析结果重用
4、软件重用的效益:质量、成本、生产率
5、设计问题与子系统的步骤
- 调整需求
- 重用已有的类
- 把问题域类组合在一起
- 添加一般化类以建立协议
- 调整继承层次
6、对象间耦合:交互耦合(松散)、继承耦合(紧密)
7、可重用软构建应该具备的特点:
- 模块独立性强
- 具有高度可塑性
- 接口清晰、简明、可靠
8、三个子模型、五个层次
- 对象模型(类图和对象图)
- 功能模型(用例图)
- 动态模型(状态图)
- 主题层
- 类与对象层
- 结构层
- 属性层
- 服务层
9、任务管理部件一般在信息系统中使用较少,在控制系统中使用较多
第十二章 面向对象实现
不考
第十三章 软件项目管理
1、估计软件规模的方法:代码行技术(与编程语言有关)、功能点技术
2、Gantt图
3、软件质量的定义:软件与明确地和隐含地定义的需求相一致的程度
关注我,后期会更新操作系统知识点和计算机组成原理知识点