题型:

 选择题:15x2 = 30分



填空题:10x1 = 10分


简答题:4~5题,共30分。


分析设计题:3题,共30分。

第1章

  • 什么是软件危机,典型表现,产生原因

定义:

1. 如何开发软件以满足对软件日益增长的需求

2. 如何维护数量不断膨胀的已有软件    

典型表现:

1. 对软件开发成本和进度常常很不准确
2. 用户对软件系统结果不满意
3. 软件产品的质量往往靠不住
4. 软件常常是不可维护的
5. 软件通常没有适当的文档资料
6. 软件成本在计算机系统总成本中所占比例逐年上升
7. 软件开发生产率提高的速度 远远跟不上计算机应用速度普及深入的趋势。

原因:

1. 忽视软件需求分析的重要性
2. 认为软件开发就是写程序并设法使之运行
3. 轻视软件维护



* 什么是软件工程

 采用工程的概念,原理 技术 和方法来开发与维护软件 把经过时间考验而证明正确的管理技术和当前能够得到的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。


* 软件生命周期的各个阶段的基本任务


1. 问题定义:要解决的问题是什么
2. 可行性研究:对于上一个阶段所确定的问题有没有行得通的解决方法
3. 需求分析:确定系统必须具备哪些功能
4. 总体设计:怎样实现目标系统
5. 详细设计:具体设计系统
6. 编码和单元测试:写出容易理解和容易维护的程序模块
7. 综合测试:通过各种类型的测试使软件达到预定的要求
8. 软件维护:通过各种必要的维护活动使系统持久地满足用户的需要



* 软件生命周期模型


1. 瀑布模型

2. 快速原型模型
3. 增量模型
4. 螺旋模型
5. 喷泉模型



* 瀑布模型开发过程


1. 阶段间具有顺序性和依懒性
2. 推迟实现的观点
3. 质量保证的观点



* 增量模型开发过程


  渐增模式,最终的软件由多个构件(相互作用的模块)组成,并且能够完成特定的功能,每个新构件必须是可以测试的。

第2、3章

* 可行性分析:技术可行性、经济可行性、操作可行性、社会可行性




* ER图:组成元素,如何绘制



1. 数据对象:对软件必须理解的复合信息的抽象

2. 属性:数据对象的性质
3. 联系:数据对象彼此之间互相联系的方式

第5章

* 什么是总体设计


1. 系统设计阶段;确定系统的具体实现方式
2. 结构设计阶段:确定软件结构


 具体:

1. 设想供选择的方案
2. 选取合理的方案
3. 推荐最佳方案
4. 功能分解
5. 设计软件结构
6. 设计数据库
7. 制定测试计划
8. 书写文档
9. 审查与复查



* 软件结构的深度、宽度、扇入、扇出


1. 深度:表示软件结构中控制的层数
2. 宽度:软件结构内同一层次上的模块总数的最大值 影响最大的是模块的扇出
3. 扇出:一个模块直接控制的模块数目 平均扇出通常是3或4 上限是5-9
4. 扇入:有多少个上级模块调用它、底层模块往往有高扇入



* 模块的耦合性和内聚性原则

耦合:一个软件结构内不同模块之间的互连程度的度量

数据耦合:交换的信息仅仅是数据  属于低耦合
 控制耦合:交换的信息仅仅是控制信息(可以是数据) 中等程度耦合
 特征耦合:数据结构中,传递的数据多于需要的数据。
 公共环境耦合:两个或多个模块通过一个公共数据环境相互作用。
 内容耦合:耦合程度最高的耦合。应该尽量避免:

*           一个模块访问另一模块的内部数据
*            一个模块不通过正常入口而转到另一个模块的内部
*           两个模块有一部分程序代码重叠(只可能出现在汇编程序中)
*           一个模块有多个功能

-建议-:尽量使用数据耦合,少使用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。

内聚:一个模块内各个元素彼此结合的紧密程度,是信息隐藏和局部化概念的自然扩展 尽量做到高内聚 低内聚: 偶然内聚:一个模块完成一组任务,任务彼此间的关系比较松散 逻辑内聚:一个模块完成的任务在逻辑上属于相同或相似的一类 时间内聚:一个模块包含的任务必须在同一时间内执行

中内聚: 过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行 通信内聚:模块中所有元素都使用同一个输入数据或产生同一个输出数据

高内聚: 顺序内聚:一个模块内的处理元素和同一个功能密切相关 而且这些处理必须顺序执行 功能内聚:最高程度的内聚。模块内所有元素都是一个整体来实现一个单一的功能

* 开发成本与模块化的关系

存在一个最佳模块数量M 使得软件总成本最低(源于:随着软件模块的增多,开发单个模块的成本的减少,但是所需要的模块间的接口成本却在不断增加)

第6章

* 结构化程序的三种基本结构



1. 顺序结构
2. 循环结构
3. 选择结构



* 结构化程序设计的好处

      显著提高软件生产率和降低软件维护代价


* 程序流程图、盒图、PAD图、判定表、判定树

第7章

* 软件测试的含义


1. 为了发现程序中的错误而执行程序的过程
2. 极可能发现迄今为止尚未发现的错误
3. 发现了至今为止尚未发现的错误



* 集成测试,集成方法

集成测试:测试和组装软件的系统化技术 集成方法: 非渐增式测试方法:分别测试每个模块再把所有模块结合在一起 渐增式测试方法:把下一个测试的模块同已经测试好的那些模块结合起来测试,测试完再把下一个应该测试的模块结合进来测试 自顶向下集成:深度优先或者宽度优先 自底向上集成:

1.               把低层模块组合成实现某个特定的软件子功能的族
2.               写一个驱动程序,协调测试数据的输入输出
3.               对由模块组成的子功能族进行测试
4.               去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。          



* 驱动模块和桩模块

驱动程序:接收测试数据,把这些数据传送给被测试的模块,并且印出有关的结果。 存根程序:代替被测试的模块所调用的模块 也称虚拟子程序

* 黑盒测试技术:等价类划分法、边界值法

等价划分:把程序的输入域划分为若干个数据类,据此导出测试用例

1. 设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止
2. 设计一个新的测试方案使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止

边界值分析:首先确定边界情况,通常输入等价类和输出等价类的边界,就是应该着重测试的程序边界情况

* 白盒测试技术:逻辑覆盖


1. 语句覆盖
2. 判定覆盖
3. 条件覆盖
4. 判定/条件覆盖
5. 条件组合覆盖
6. 点覆盖
7. 边覆盖
8. 路径覆盖

第9、10、11章

* 类与实例

类:对具有相同数据和相同操作的一组相似对象的定义

实例:某个特定的类所描述的一个具体的对象

  • 类与类之间的关系

封装(encapsulation) 继承(inheritance) 多态(polymorphism) 重载(overloading)

  • 类图

p221

  • 用例图

p227

  • 状态图

p252