第1章 软件工程概述
1.1 软件基本概念
软件 = 程序 + 数据 + 文档
软件的特点 :
1.逻辑
2. 磨损
3. 依赖
4. 手工
5. 成本
软件危机 :开发和维护 严重
软件危机产生原因 :
主观上:方法论
客观上:难度复杂度
软件危机典型表现:
1.供不应求
2. 成本占比
3. 和用户交流
4. 质量
5. 不可维护
6. 重用性差
7. 文档资料
软件危机消除的途径:
在会议上提出了软件工程概念
1.2 软件工程
软件工程定义:
1.将工程化的方法应用于软件的开发、运行、维护
2.研究1中所述方法
软件工程基本原理:
1.技术
2.人员
3. 不断改进实践
4. 产品控制
5. 分阶段生命周期计划
6. 阶段评审
7. 结果清晰
软件工程学 :
- 软件开发技术(方法,过程,工具)
- 软件工程管理(技术,管理)
软件工程方法学 / 范型 :在软件生命周期全过程中使用的一整套技术方法的集合
软件工程方法学包含三个要素:方法 过程 工具
软件工程方法学的两个经典的方法学:
- 传统方法学(结构化范型,生命周期方法学)
- 面向对象方法学
1.3 软件生命周期模型
// 软件生命周期模型 :是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架
软件工程生命周期 :
- 软件定义(问题定义 可行性研究 需求分析)
- 软件开发(总体设计 详细设计 编码和单元测试 综合测试)
- 运行维护
1.4 软件过程
// 软件过程 :是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤
典型的软件过程流 :
- 线性过程流
- 迭代过程流
- 演化过程流
- 并行过程流
1.5 经典软件过程模型
- 瀑布模型
自顶向下 逐步求精 质量保证
缺点:可能满足不了用户需求
- 快速原型模型
先快速建造一个原型供用户使用,了解需求
缺点:难以建造准确的原型;用户与开发人员对原型认识不同
- 增量模型:
瀑布模型和快速原型模型的产物 分批提交软件产品 有大量时间供用户适应和学习
缺点:新的增量构件集中到软件中可能会破坏已有产品
- 螺旋模型:快速原型模型的基础上加上风险评估
有利于软件质量的保证
缺点:软件开发人员需要具备风险评估经验和专业知识,否则遭遇风险会造成重大损失
- 喷泉模型:
面向对象模型,迭代和无缝的特点
优点:没有明显的界限,可同步进行,效率高,速度快
缺点:由于阶段会重合,需要大量的开发人员,对于文档的管理较为复杂
- 敏捷过程极限开发(XP):
适用于小型项目
- 微软过程:
规划阶段 设计阶段 开发阶段 稳定阶段 发布阶段
例题
第2章 可行性研究
问题定义3W:
- WHO 为谁设计?用户是谁?
- WHAT 要解决什么问题?
- WHY 为什么要解决这个问题?
可行性研究成果:可行性研究分析报告
可行性研究的目的:用最小的代价在尽可能短的时间内研究这个问题是否值得解决以及是否能够解决
可行性研究的三个方面:
- 经济可行性(有形成本/效益 无形成本/效益 价值与时间)
- 技术可行性(是否能用技术实现)
- 操作可行性(用户的操作是否可行) (社会可行性 法律可行性)
2.2 可行性研究过程
可行性研究的过程:
1.复查目标
2. 研究正在使用的系统
3. 导出新系统的高层逻辑模型
4. 进一步定义模型
5. 评价可以选择的解法
6. 行动方针
7. 开发计划
8. 写文档并提交
2.3 系统流程图
系统流程图 表示 概括地描绘物理系统的传统工具
用图形符号以黑盒子形式组成每个部件
2.4 数据流图DFD
描绘信息流和数据从输入移动到输出的过程中所经受的变换
“某银行计算机存储系统” 这个是最大的那个处理
然后我们来确定它的源点和终点是谁,因为信息来源于储户,所以储户是源点,存款单和取款单是它向系统提供的数据流
从这第一句话我们首先画出的顶层数据流图:
那么已经确定了原点以及它传进去的数据流,再看出来的是什么数据流:“并印出存款单给储户”,“并印出利息清单给储户”,那么我们可以知道其实终点还是储户,因为信息流最终还是到了储户这里,
因此,顶层数据流图就画好了:
然后就是进行分解,中间这个系统可以分解成很多个处理,相当于进行一系列的变换,注意无论中间这个系统分解成多少个部分,它的输入输出数量是不能变的
“如果是存款则记录。。。“,这个的记录是一个处理,因此画一个圆角矩形表示这是一个处理过程
看到“核对密码”,这是一个处理过程;除此之外,我们想,这个密码是哪里来的呢?是存款的时候记录的,因为我们记录下来了,就需要有一个“存储”!
2.5 数据字典
// 数据字典是关于数据的信息的集合,是对数据流图中包含的所有元素的定义的集合
数据字典应该由对下列4类元素的定义组成:
- 数据流
- 数据流分量
- 数据存储
- 处理
首先它说电话号码分为校内电话号码和校内电话号码
2.6 成本估计
成本估算:
- 代码行技术
- 任务分解技术
- 自动估计成本技术
成本与效益分析:
- 货币的时间价值
- 投资回收期
- 纯收入
- 投资回收率
例题
第3章 需求分析
需求分析的作用:系统必须做什么
需求分析的产物:需求规格说明书
对系统的综合要求有哪些:
- 功能需求
- 性能需求
- 可靠性和可用性需求
- 出错处理需求
- 接口需求
- 约束
- 逆向需求
- 将来可能提出的要求
与用户沟通获取需求的方法:
- 访谈
- 面向数据流自顶向下求精
- 简易的应用规格说明技术
- 快速建立软件原型
掌握需求分析建模的三种模型 :
- 数据模型「ER图」、
- 功能模型「数据流图」
- 行为模型「状态图」
3.4 实体-联系图(ER)
// ER图 ---- 是用来建立数据模型的工具
3.6 状态转换图 / 状态图
// 通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为
如何验证软件需求及验证方法 :
- 一致性
- 完整性
- 现实性
- 有效性
需求组成图:业务需求->用户需求
系统需求+用户需求->功能需求
功能需求+非功能需求+设计约束-》需求规约
例题
第5章 总体设计
总体设计目的:
系统应该如何实现
总体设计的过程:
1.设想方案
2.选取合理的方案
3.推荐最佳方案
4.功能分解
5.设计软件结构
6.设计数据库
7.制定测试计划
8.书写文档
9.审查和复审
设计原理 :
模块化、抽象、逐步求精、信息隐藏和局部化、模块独立「耦合、内聚」
重点掌握软件结构设计(面向数据流的设计方法)???
层次图、HIPO图
结构图
例题
第6章 详细设计
详细设计目的:
对模块的算法设计和数据结构设计
结构程序设计的概念:如果一个程序的代码块仅仅通过顺序、选择和循环这三种控制结构进行连接,并且每个代码块只有一个入口和一个出口,则成这个程序是结构化的
人机界面设计概念:人机界面设计是接口设计的一个重要的组成部分
人机界面设计遇到的4个问题:
1.系统响应时间
2.用户帮助设施
3.出错信息处理
4.命令交互
人机界面设计的过程
三类人机界面设计指南:
1.一般交互指南
2.信息展示指南
3.数据输入指南
程序过程设计的方法或工具(程序流程图、盒图、PAD图、判定表、判定树和过程设计语言)
面向数据结构的设计方法(Jackson图);
程序复杂度的定量度量(McCabe和Halstead)流图 V(G) = E-N+2 ;V(G) = P+1;
判定节点P就是有分枝的的节点(大于等于2个分叉才算)
算出来两种结果应该一致?
例题
第7章 实现
程序设计语言的选择
编码遵循的规则
测试的概念:为了发现程序中的错误而执行程序的过程
测试的目标:发现程序中的错误
测试的准则
测试的方法:
1.黑盒测试
2.白盒测试
测试的步骤及其对应的测试方法:
1.模块测试(单元测试)
2.子系统测试
3.系统测试
4.验收测试(确认测试)
5.平行运行
单元测试的重点:(测试技术:白盒)
1.模块接口
2.局部数据结构
3.重要的执行通路
4.出错处理通路
5.边界条件
集成测试:
(发现与接口有关的问题)
1.自顶向下集成
2.自底向上集成
3.混合法
白盒测试的数据设计经典技术:(逻辑覆盖 和 控制结构测试)
逻辑覆盖:
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 点覆盖
- 边覆盖
- 路径覆盖
控制结构测试:
1.基本路径测试
2.条件测试
3.循环测试
黑盒测试:
1.等价类划分
2.边界值分析
3.错误推测
调试的方法:
1.蛮干法
2.回溯法
3.原因排除法
(与测试的区别在测试发现错误之后)
软件可靠性概念及相关指标参数:
可靠性:在给定的时间间隔内按照规格说明书的规定成功运行的概率
可用性:在给定的时间点按照规格说明书的规定成功运行的概率;
例题
第8章 维护
软件维护的概念 :软件交付使用之后为了改正错误和满足新的需要而修改软件的过程
软件维护的4类活动 :
1.改正性维护
2.适应性维护
3.完善性维护
4.预防性维护
软件维护的过程 :
1.维护组织
2.维护报告
3.维护的事件流
4.保存维护记录
5.评价维护活动
软件的可维护性 :
1.可理解性
2.可测试性
3.可修改性
4.可移植性
5.可重用性
预防性维护概念 :
把今天的方法学应用到昨天的系统上,以支持明天的需求
软件再工程过程 :
1.库存目录分析
2.文档重构
3.逆向工程
4.代码重构
5.数据重构
6.正向工程;
例题
第9章 面向对象方法学引论
面向对象方法学概述:
尽可能模拟人类习惯的思维方式,使开发软件的方法尽可能接近人类认识世界解决问题的方法与过程
面向对象方法的优点:
1.与人类习惯的思维方法一致
2.稳定性好
3.可重用性好
4.较易开发大型软件产品
5.可维护性好
面向对象概念(对象、类、实例、消息、方法、属性、封装、继承、多态性、重载)
对象模型(对象模型、动态模型和功能模型);
类间关系(关联、聚集、泛化、依赖和细化);
UML建模,重点掌握用例图、类或对象图、活动图(泳道图)、交互图(时序图或顺序图和协作图)、状态图。
例题
P229,1、2、3、4、5、6、7、8、10(没有9)
第10章 面向对象分析
面向对象分析的过程;
重点掌握面向对象的3种建模,对象模型(类或对象模型图,P235-246),动态模型(脚本和状态图,P247-252)和功能模型(交互图或数据流图,P253-256)。
例题
例题,牙科诊所系统综合例子。
第11章 面向对象设计
面向对象分析与设计的异同分析;
面向对象设计的准则 :
1.模块化
2.抽象
3.信息隐藏
4.弱耦合
5.强内聚
6.可重用
面向对象设计的启发式规则 :
1.设计结果应该清晰易懂
2.一般-特殊结构的深度应适当
3.设计简单的类
4.使用简单的协议
5.使用简单的服务
6.把设计变动减至最小;
软件重用概念 :
1.知识重用
2.方法和标准的重用
3.软件成分的重用;
软件可重用的成分 :
1.代码重用
2.设计结果重用
3.分析结果重用;
软件重用的效益 :
1.质量
2.生产率
3.成本;
面向对象设计模型4大组成部分 :
1.问题域子系统
2.人机交互子系统
3.任务管理子系统
4.数据管理子系统
(人机交互部分、问题域部分、任务管理部分和数据管理部分,参见P277-287例子)及其如何设计
例题
例题,P288,1、2、3
第12章 面向对象实现
面向对象程序设计语言的优点 :
1.一致的表示方法
2.可重用性
3.可维护性;
面向对象语言的技术特点;
面向对象程序设计遵循的准则 :
1.将来能否占主导地位
2.可重用性
3.类库和开发环境
4.其他因素;
面向对象的测试方法 :
1.面向对象的单元测试
2.面向对象的集成测试(基于线程的测试 基于使用的测试)
3.面向对象的确认测试;
例题
例题,P304,1、2、3、4、5、6、7、8
第13章 软件项目管理
重点掌握软件规模估算方法 :
1.代码行技术
2.功能点技术;
工作量估算 :
1.静态单变量模型
2.动态多变量模型
3.COCOMO2模型;
了解项目进度计划、估算进度、进度图表;
了解项目人员组织方式 :
1.民主制程序员组
2.主程序员组
3.现代程序员组;
了解如何进行软件质量保证;
了解软件配置管理;
了解软件成熟度模型
例题
例题,P335,详见项目估算案例。