中英对译:
系统流程图 (SFD)
数据流图 (DFD)
状态转换图 (STD)
实体联系图 (E-R)
层次图(H图) (hierarchy)
层次图加输入/处理/输出图 (HIPO图)
结构图 (SC图)
输入、处理、输出图 (IPO图)
问题分析图 (PAD图)
第 1 章:
- 什么是软件?
计算机软件--计算机系统中的程序、数据及其文档的统称。
- 软件发展的3个阶段
(1)程序设计阶段;(2)程序系统阶段;(3)软件工程阶段。
- 什么是软件危机?
软件危机是在计算机软件的开发和维护过程中所遇到的一系列严重问题。
- 什么是软件工程?
软件工程是指导计算机软件开发和维护的一门工程学科。
- 软件工程及其特殊性
1、关注于大型程序的构造;
2、中心课题是控制复杂性;
3、软件经常变化;
4、开发软件的效率非常重要;
5、和谐地合作是开发软件的关键;
6、必须有效地支持它的用户;
7、两种背景的人(技术和应用)创造产品;
- 遵循的 7 条基本原理
1、用分阶段的生命周期计划严格管理
2、坚持进行阶段评审
3、实行严格的产品控制
4、采用现代程序设计技术
5、结果应能清楚地审杳
6、开发小组的人员应该少而精
7、承认不断改进软件工程实践的必要性
- 软件工程三要素
过程、方法、工具
- 软件生命周期定义、阶段划分,每个阶段的主要活动
软件生命周期:指软件产品从规划、提出、实现、使用维护到停止使用退役的过程。
阶段划分:由软件定义、软件开发、运行维护3个时期组成。
每个阶段的主要活动:①软件定义时期包括:问题定义、可行性研究、需求分析 3个阶段;
②软件开发时期包括:总体设计、详细设计、编码和单元测试、综合测试 4个阶段;
③软件维护时期包括:软件运行和软件维护阶段。
- 快速原型模型、增量模型、螺旋模型、喷泉模型的特点和优缺点
快速原型模型
特点:(1)借助原型开发工具可较容易地做出系统原型,及早向用户展示系统要实现的界面及功能,增强用户的合作信心;(2)直观化的表达,容易交流,消除理解上的歧义(3)修改集中在前期的原型确认上,较大程度减少后期实施中的返工。后续活动遵循瀑布模型:(4)入手快,加快开发进度
优点:①快速构建、容易修改②能够处理模糊需求,容易适应需求的变化③用户参与④适于中小型软件开发
缺点:①不能建立里程碑,软件质量难以控制②资源规划和软件配置管理较为困难③软件结构缺乏整体性④不能很好适应大型软件系统的开发
增量模型特点:把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。后续每个增量可按快速原型法进行。
优点:①待开发系统能够被分成不同构件可以分批次交付软件产品②以构件为单位进行开发降低了软件开发的风险③开发顺序灵活
缺点:要求待开发系统能够被划分成不同的软件产品构件
螺旋模型特点:使用原型降低风险,可以看做是增加了风险分析过程的快速原型模型。
优点:①利于把软件质量作为软件开发目标(质量保证)②减少测试风险③维护和开发无本质区别。
缺点:风险估计困难,对开发人员要求高。
喷泉模型特点:面向对象软件开发过程迭代和无缝的特性。
优点:可以提升项目开发效率,缩短开发周期。可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点:对开发人员要求高,难以管理
练习:
1、软件工程的出现主要是由于( )。
A. 程序设计方法学的影响
B. 计算机的发展
C. 软件危机的出现
D. 其他工程科学的影响
2、软件工程方法学的三要素分别是( )。A. 方法、工具、技术
B. 方法、工具、过程
C. 方法、技术、过程
D. 方法、管理、过程
第 2-3 章:
1.数据流图作用,根据题目要求画数据流图
数据流图(DFD)是一种图形化技术,它描绘数据流从输入移动到输出的过程中所经受的变换。
数据流图是结构化分析的主要工具之一。设计DFD只需考虑系统必须完成的基本逻辑功能(What),不需要考虑如何实现这些功能(How)。
2.需求分析阶段工作目标、任务,数据流图的做法,数据字典的内容和用途
工作目标:把用户对待开发软件提出的"要求"或"需要"进行分析与整理,确认后形成描述完整、清晰与规范的文档,确定软件需要实现哪些功能,完成哪些工作。准确地回答"系统必须做什么"的问题。
任务:①确定对系统的综合要求②分析系统的数据要求③导出系统的逻辑模型④修正系统开发计划
3.需求分析的主要方法
①访谈法②问卷法③观察法④文档分析法⑤头脑风暴法
⑥用例分析法⑦数据流图法⑧原型法⑨场景分析法⑩工作流分析法
第 5 章:
1.设计原理、启发式规则(深度宽度、扇入扇出)
设计原理:
①模块化②抽象③自顶向下,逐步细化
④信息隐藏和局部化⑤模块独立⑥启发式原则
启发式规则:
改进软件结构提高模块独立性
模块规模应该适中
深度、宽度、扇出和扇入都应适当(尽可能减少高扇出结构,随着深度增大扇入。 如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。)
模块的作用域应该在控制域之内
力争降低模块接口的复杂程度
6.设计单入口单出口的模块
7.模块功能应该可以预测
2.耦合与内聚的设计原则
耦合:耦合是影响软件复杂程度的一个重要因素。 设计时力争做到低耦合。尽量使用数据耦合,少用控制耦合和标记耦合,限制公共耦合的范围,完全不用内容耦合。
内聚: 设计时力求高内聚 ,有能力通过修改设计提高模块的内聚程度并且降低 模块间的耦合 程度,从而获得较高 的模块独立性。
第 6 章:
1.模块的三个属性
功能、逻辑和状态
2.描绘软件结构的工具:N-S、PAD、判定表、判定树
N-S图 ****:****一种不允许违背结构程序设计精神的图形工具
****PAD:****问题分析图用结构化设计原则表现程序逻辑结构的图形工具。PAD也设置了五种基本控制结构的图式,并允许递归使用。
****判定表:****能够清晰地表示复杂的条件组合与应做的动作之间的对应关系
****判定树:****判定表的变种,自能清晰地表示复杂的条件组合与应做的动作之间的对应关系。
****Jackson方法用途:****按输入、输出和内部信息的数据结构进行软件设计,把数据结构的描述映射成程序结构描述。
3.Jackson 方法用途
(1)用Jackson图描绘输入输出数据结构。
(2)找出输入/输出数据结构中有对应关系的数据单元,虚线表示。
(3)由数据结构图导出描绘程序结构的Jackson图。
(4)列出所有操作和条件,把这些操作和条件分配到程序结构图的适当位置
(5)用伪码表示程序
4.MaCabe 方法计算复杂度、环形复杂度
计算环形复杂度的方法:
(1)流图中线性无关的区域数等于环形复杂度。
一条线性无关路径:至少包含有一条在其他线性无关路径中从未有过的边的路径。
(2) 流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
(3) 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
第 7-8 章:
逻辑覆盖法:
1语句覆盖 2判定覆盖 3条件覆盖 4判定/条件覆盖
5条件组合覆盖 6路径覆盖
有效等价类 ****:****是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。
无效等价类 ****:****是指对于程序的规格说明来说,是不合理的无意义的输入数据构成的集合。
- 测试目标、意义
目标:
1发现软件错误
2检查系统是否满足需求
3改进软件过程
****意义:****测试是为了发现程序中的错误,而不是证明程序无错误。
- 测试各阶段主要工作
单元测试:
集成测试:
确认测试:
回归测试:
- 帕累托定律在测试中意义
测试发现的错误中80%很有可能是由程序中20%的模块造成的。
-
白盒测试、黑盒测试的作用
-
等价划分法
等价划分法:
将所有可能的输入数据划分成若干个等价类,然后从每一类中选取少数有代表性的数据作为测试用例。
- 软件可靠性
**软件可靠性:**程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。软件可靠性随着给定的时间间隔的加大而减少。
**软件可用性:**程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。
可靠性和可用性之间的主要差别: 可靠性意味着在0到t这段时间间隔内系统没有失效,而可用性只意味着在时刻t,系统是正常运行的。
- 区分 4 种维护
****改正性维护:****在任何大型程序的使用期间,用户必然会发现程序错误,并且把他们遇到的问题报告给维护人员。把诊断和改正错误的过程称为改正性维护。
****适应性维护:****为了和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。
****完善性维护:****使用软件的过程中用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见。为了满足这类要求,需要进行完善性维护。这项维护活动通常占软件维护工作的大部分。
****预防性维护:****为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件时,称为预防性维护。目前这项维护活动相对比较少。
- 文档的作用
1文档是开发、使用和维护程序所需要的图文资料。
2文档是影响软件可维护性的决定因素。
3文档比程序代码更重要。
第 9~12 章:
- 概念理解:对象、类、消息、继承、多态、封装
****对象:****对问题域中某个实体的抽象
对象 = 对象名+数据(属性)+操作(行为)
****类:****具有相同属性和行为的一个或多个对象的描述。
****消息:****消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。
****继承:****子类自动地共享基类中定义的数据和方法的机制。
****多态:****子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。
****封装:****把数据和实现操作的代码集中起来放在对象内部。封装就是信息隐藏,通过封装对外界隐藏对象的实现细节。
- 类与类之间四种关系
关联,泛化,聚集(聚合),依赖和细化
-
根据题目要求画类图或用例图
-
面向对象设计的几个特性
①模块化②抽象③信息隐蔽④高内聚⑤低耦合⑥可重用
- 基线
对已正式通过复审和批准的规格说明可作为进一步开发的基础,且只能通过正式的变化控制过程改变.
- 软件配置项
是指软件配置管理的对象。
软件过程的输出信息可以分为3类
1计算机程序(源代码和可执行程序)
2描述计算机程序的文档(供技术人员或用户使用)
3数据(程序内包含的或在程序外的)。
人们上述这些项组成了在软件过程中产生的全部信息,把它们统称为软件配置,而这些项就是软件配置项。
- 软件配置管理
****软件配置管理:****软件配置管理是在软件的整个生命期内管理变化的一组活动。