软件工程期末
软件生命周期有哪些阶段组成?(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位数字() 可选 例:某高校可用的电话号码有以下几类:校内电话号码由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图:
⭐判定表:
⭐判定树:
⭐过程设计语言:
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判断 长方形:执行语句

