软件工程期末
软件生命周期有哪些阶段组成?(1.3)p
软件定义:问题定义+可行性研究+需求分析
软件开发:总体设计+详细设计+编码和单元测试+综合测试
软件维护:也称为运行维护(运维
可行性研究过程(2.2)p36
- 复查系统规模和目标
- 研究目前正在使用的系统
- 导出新系统的高层逻辑模型
- 进一步定义问题(与用户沟通,必要时重新定义问题
- 导出和评价供选择的解法
- 推荐行动方针
- 草拟开发计划
- 书写文档提交审查
⭐**数据字典(2.5)**p47
常见符号
符号 含义 举例 + 和 a+b = 赋值 c=a+b [] 可选 [a|b]:选a或b {} m{……}n 重复
取括号内长度为m-n的内容1{数字}3:取1到3位数字
3{数字}3:取3位数字() 可选 .. 数字多少到多少 0..9:数字0-9 例:某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不是0。校外电话又分为本市电话和外地电话两类。拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0) ,若是外地电话则拨区码(3-5位)后再拨8位电话号码(第一位不是0) 。
电话号码 = [ 校内电话 | 校外电话 ]
校内电话 = 非零数字 + 三位数字
非零数字 = [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]
三位数字 = 3{数字}3
数字 = [ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]
校外电话 = [ 本市电话 | 外地电话 ]
本市电话 = 0 + 八位非零开头数字
八位非零开头数字 = 非零数字 + 七位数字
七位数字 = 7{数字}7
外地电话 = 0 + 三位区码 + 八位非零开头数字
区码 = 3{数字}5进行成本/效益分析时,如何计算货币的时间价值、投资回收期、纯收入与投资回收率?(2.6.2)p51
1)货币的时间价值
假设年利率为i,如果现在存入P元钱,则n年后可得到的钱数为

反之,如果n年后收入F元,那么这些钱现在价值是

例:有一个库存管理系统,开发该系统共需50000元;使用该系统后,能及时订货,避免了商品短缺,估算每年可节约25000元,共使用5年。假定年利率为5%。
针对此案例,进行成本/效益分析。每年节约25000,可理解为每年挣了25000(将来值)

2)投资回收期
多久可以回收成本(50000元)
前两年回收46485.26元,还需50000-46485.26=3514.74元
3514.74/21595.94=0.16年 投资回收期为2.16年
3)纯收入
累计现在值-成本
108236.91-50000=58236.91元
4)投资回收率
投资回收率 =(投资收益 - 投资成本)/投资成本*100%
例:现在用100w成本投资一个项目,最终收益150w,该项目投资回收率为(150-100)/100*100%=50%
需求分析的任务?(3.1)p56
功能需求(能完成什么)
性能需求(完成的怎么样)
可靠性和可用性需求
可靠性:出问题的频率
可用性:系统可被使用的程度(时间、模块上)
出错处理需求
系统发现错误做出的响应,主要在系统关键部分设置
接口需求
用户接口、硬件接口、软件接口、通信接口等
约束
精度、工具和语言约束、设计约束、硬件约束、标准等
逆向需求(不该实现什么功能)
将来可能提出的要求(为将来扩充做准备)
从哪些方面验证软件需求的正确性?(3.8.1)p70
四方面
- 一致性 ==> 所有需求必须一致
- 完整性 ==> 需求必须完整
- 现实性 ==> 需求应该是用现有的硬件和软件技术基本上可实现的
- 有效性 ==> 必须证明需求是正确有效的
⭐需求分析阶段的图形工具有哪些?并对每种图形工具作简单说明(或给出例子)(3.4,3.6&3.7) p63、65、67
实体-联系图

状态转换图
状态转换图即系统的行为建模,就是通过描述系统的状态以及引起状态变化的事件来表示系统的行为,将系统运行时详细的状态变化呈现给用户。


层次方框图
由方框构成的多层次树形结构,表示系统的组成关系。

Warnier图
用树状结构描绘信息
- 花括号:用来区分数据结构的层次。一个花括号包含同一级或同一类的信息;
- 异或符号:两选一;
- 元素的重复出现:名字右边括号内的数字。

IPO图
清楚地描述了输入数据、处理数据与输出数据之间的关系。(可称为“三步曲”)
粗箭头清楚地指出数据通信的情况或模块间的联系。

总体设计过程的步骤(5.1)p91
设想供选择方案(数据流图是基础)
选取合理方案:每个合理方案要提供:系统流程图、组成系统的物理元素清单、成本/效益分析、实现这个系统的进度计划
推荐最佳方案(给用户、软件开发相关部门)
功能分解(细化数据流图)
设计软件结构(通过软件结构系统组织各模块)软件结构常由层次图或结构图来描绘
设计数据库
制定测试计划
书写文档
审查和复查

软件设计过程中应遵循的基本原理(5.2)p94
模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,集成起来构成一整个整体
抽象:提炼事物本质而暂时不考虑细节
逐步求精:是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。为了能集中精力解决主要问题而尽量推迟对问题细节的考虑
信息隐藏和局部化:信息隐藏是指设计模块时,使得一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。局部化是指把一些关系紧密的软件元素物理地放的彼此靠近。
模块独立:软件系统中每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单
软件设计中的启发规则(5.3)p99
•启发式规则多数是经验、规律,对改进设计、提高软件质量,往往有重要的参考价值。
•但是,启发式规则既不是设计的目标,也不是设计时普遍遵循的原则/原理(模块化、抽象、逐步求精、信息隐蔽和局部化、模块独立)。
- 改进软件结构提高模块独立性
- 模块规模应该适中
- 深度、宽度、扇出、扇入都应适当
- 模块作用域应该在控制域之内
- 力争降低模块接口复杂程度
- 设计单入口单出口模块
- 模块功能应该可预测
面向数据流的设计方法中变换分析的步骤(5.5.2)p105
- 复审基本系统模型
- 复审并精化数据流图
- 确定数据流图具有变换特性还是事务特性
- 确定输入流输出流的边界,从而孤立出变换中心
- 完成“第一级分解”
- 完成“第二级分解”
- 采用启发式设计策略,精化程序结构雏形,改进软件质量
⭐过程设计的工具有哪些?能够对每种工具作简单说明(或给出例子);能够使用判定表、判定树表示算法(或问题)(6.3)p124
程序流程图:

盒图:
特点:
①没有箭头,不允许转移控制;
②每个矩形框(多分支结构中的判断条件除外)都是一个功能域(即一个特定结构的作用域),结构清晰;
③很容易确定局部及全程数据的作用域;
④容易表示嵌套关系以及模块的层次结构。
缺点:
随着程序结构的层数不断增加,最里面的方框将越来越小,从而增加绘图的难度,使图的清晰性受影响。

PAD图:

⭐判定表:
•判定表是一种二维表格,常用于较复杂的组合条件。
•判定表能清晰地表示复杂的条件组合与应做的动作之间的关系。
•通常由四部分组成:
①条件框:条件定义
②条件条目:各条件的取值及组合
③操作框:操作的定义
④操作条目:在各条件取值组合下所执行的操作

⭐判定树:

⭐过程设计语言:
•特点:
①关键字的固定语法(if-then-else,for-end;外部语法);
②自然语言的自由语法(内部语法)
③数据说明(可表示简单或复杂的数据结构);
④模块定义、调用时,应该提供模块接口的描述。

Jackson方法的步骤(6.4.3)p132
可以看看这个面向数据结构的设计jackson方法_哔哩哔哩_bilibili


- Jackson程序设计方法由五个步骤组成
- 用Jackson图描绘I/O的数据结构

- 在两个图中指出有直接因果关系,可以同时处理的单元(对于重复出现的单元,重复次序和次数必须均一致)

- 把有对应关系的单元合为一个处理框,画在相应层次中

- 在程序结构图中,将操作、条件添加到适当位置


- 用伪码表示程序

⭐量度量程序复杂程度的McCabe方法(6.5.1)p137
掌握程度:
1)依据伪码或程序画出程序流程图;
2)将程序流程图转换成流图;
3)依据流图计算环形复杂度。复杂度:V(G)=E-N+2=P+1(E为流图边数,N为结点数,P为判断节点数目
软件测试准则(7.2.2)p150
- 所有测试都能追溯到用户需求
- 应该远在测试开始前就指定出测试计划
- 把Pareto原理应用到软件测试中
- 从“小规模”测试开始,并逐步进行“大规模”测试
- 穷举测试是不可能的
- 为达到最佳测试结果,测试过程不可能执行每个可能的路径
大型软件系统的测试步骤(7.2.4)p151
- 模块测试
- 子系统测试
- 系统测试
- 验收测试
- 平行运行
⭐**使用白盒测试技术中的逻辑覆盖设计测试用例(7.6.1)**p162
白盒测试是根据程序内部逻辑结构进行的测试,也称为结构测试。
⭐**使用黑盒测试技术中的等价划分设计测试用例(7.7.1)**p172
ü不深入代码细节的测试方法;
ü 又称为功能测试。
⭐**估算平均无故障时间的方法(7.9.2)**p180



软件维护的类型(8.1)p189
改正性维护、适应性维护、完善性维护、预防性维护
软件再工程过程的6类活动(8.6)p198
- 库存目录分析
- 文档重构
- 逆向工程
- 代码重构
- 数据重构
- 正向工程
面向对象方法学的优点(9.1.2)p205
- 与人类习概的思维方式一致
- 稳定性好
- 可重用性好
- 较易开发大型软件产品
- 可维护性好
面向对象建模的3个子模型与5个层次(10.1.2)p232
三个子模型:静态结构(对象模型)、交互次序(动态模型)、数据变换(功能模型)
五个层次:主题层、类与对象层、结构层、属性层、服务层
建立对象模型时,如何确定类与对象?(10.3.1) p236
- 找出候选的类与对象
- 筛选正确的类和对象
使用面向对象方法学开发软件的启发规则(11.2) p261
- 设计结果清晰易懂
- 一般-特殊结构深度应适当
- 设计简单类
- 使用简单协议
- 使用简单服务
- 设计变动减至最小
补充
- 数据流图
基本概念

例子



- 程序流程图

椭圆:开始 平行四边形:输入输出 棱形:if判断 长方形:执行语句

