一、 可行性研究
1.目的
就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
2.可行性研究的任务
(1)实质
可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程
(2)步骤
首先需要进一步分析和澄清问题定义。
导出系统的逻辑模型
探索可行性研究方向解法
(3)根本
可行性研究最根本的任务是对以后的行动方针提出建议。
3.可行性研究过程
(1)步骤
① 复查系统规模和目标
② 研究目前正在使用的系统
③ 导出新系统的高层逻辑模型
④ 进一步定义问题
⑤ 导出和评价供选择的解法
⑥ 推荐行动方针
⑦ 草拟开发计划
⑧ 书写文档提交审查
⑨ 构成一个循环
4.系统流程图
(1)系统流程图是概括地描绘物理信息系统的传统工具
(2)基本思想是用图形符号以黑盒子形式描述组成系统的每个不见(程序、文档、数据库、人工过程等)
(3)表达的是数据在系统各部件之间流动的情况
(4)相关符号
(5)面对复杂的系统是,一个比较好的方法是分层次地描绘这个系统
5.数据字典
(1)数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出地过程中所经受的变换。
(2)它只是描述数据在软件中流动和被处理的逻辑过程
(3)相关符号
(4)成分命名:给数据流图中的每个成分命名应该仔细推敲
(5)用途:画数据流图的基本目的是利用它作为交流信息的工具。
6.成本/效益分析
成本/效益分析的目的正是要从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地作出是否投资于这项开发工程的决定。
二、 需求分析
1.目的
需求分析是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么?”这个问题。
2.分析方法都遵守下述准则
(1)必须理解并描述问题的信息域,根据这条准则应该建立数据模型。
(2)必须定义软件应完成的功能,这条准则要求建立功能模型。
(3)必须描述作为外部事件结果的软件行为,这条准则要求建立行为模型。
(4)必须对描述信息、功能和行为的模型进行分解,用层次的方式展示细节
3.需求分析的任务
(1)确定对系统的综合要求
(2)分析系统数据的要求
(3)导出系统编辑模型
通常用数据流图、实体-联系图、状态转换图、数据字典和主要的处理算法描述这个逻辑模型。
(4)修正糸统开发计刻
4.与用户沟通获取需求的方法
(1)访谈
(2)面向数据流自顶向下求精
(3)简易的应用规格说明技术
(4)快速建立软件原型
5.分析建模与规格说明
(1)分析建模
(2)软件需求规格说明
6.拓展
(1)实体-联系图
(2)数据规范化
(3)状态转换图
(4)其他图形工具
7.验证软件需求
(1)从哪些方面验证软件需求的正确性
- 一致性所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
- 完整性需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。
- 现实性指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。对硬件技术的进步可以做些预测,对软件技术的进步则很难做出预测,只能从现有技术水平出发判断需求的现实性。
- 有效性必须证明需求是正确有效的,确实能解决用户面对的问题
(2)验证软件需求的方法
- 验证需求的一致性
- 验证需求的现实性
- 验证需求的完整性和有效性
(3)用于需求分析的软件工具
工具要求:
- 必须有形式化的语法(或表),因此可以用计算机自动处理使用这种语法 。
- 使用这个软件工具能够导出详细的文档。
- 必须提供分析(测试)规格说明书的不一致性和冗余性的手段,并且应该能够产生一组报告指明对完整性分析的结果。
- 使用这个软件工具之后,应该能够改进通信状况。
三、 形式化说明技术
所谓形式化方法,是描述系统性质的基于数学的技术,也就是说,如果一种方法有坚实的数学基础,那么它就是形式化的。
形式化方法的优点:
(1)数学最有用的一个性质是,它能够简洁准确地描述物理现象、对象或动作的结果,因此是理想的建模工具。
(2)在软件开发过程中使用数学的另一个优点是,可以在不同的软件工程活动之间平滑地过渡。
(3)数学作为软件开发工具的最后一个优点是,它提供了高层确认的手段。可以使用数学方法证明,设计符合规格说明,程序代码正确地实现了设计结果。
拓展:
(1) 有穷状态机
(2) petri网
(3) Z语言
四、 总体设计
1.总体设计概念
(1)目的
总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。
(2)必要性
可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。
2.设计过程
(1)主要阶段
系统设计阶段:确定系统的具体实现方案
结构设计阶段:确定软件结构
(2)过程步骤
1. 设想供选择的方案
2. 选取合理的方案
3. 推荐最佳方案
4. 功能分解
1) 结构设计是总体设计阶段的任务
2) 过程设计是详细设计阶段的任务
5. 设计软件结构
6. 设计数据库
7. 制定测试计划
8. 书写文档
1) 系统说明
2) 用户手册
3) 测试计划
4) 详细的实现计划
5) 数据库设计结果
9.审查和复审
3.设计原理
(1)模块化
(2)抽象
(3)逐步求精
(4)信息隐藏和局部化
(5)模块独立
4.启发规则
5.描绘软件结构的图形工具
(1)层次图和HIPO图
(2)结构图
6.面向数据流的设计方法
目标:
(1)面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。
(2)通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。
概念:
面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。
信息流类型:1.交换流;2.事务流
五、 详细设计
1.详细设计的概念
目标:详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统
必要性:详细设计阶段的任务还不是具体地编写程序,而是要设计出程序的“蓝图”,以后程序员将根据这个蓝图写出实际的程序代码。
2.结构程序设计
定义:结构程序设计是尽可能少用GOTO语句的程序设计方法。最好仅在检测出错误时才使用GO TO语句,而且应该总是使用前向GO TO语句。
(1)经典的结构程序设计
(2)扩展的结构程序设计
(3)修正的结构程序设计
3.人机界面设计
(1)重要性
对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。
(2)设计问题
1)系统响应时间 2)用户帮助设施 3)出错信息处理 4)命令交互
(3)设计过程
迭代过程:
(4)人机界面设计指南
一般交互指南
信息显示指南
数据输入指南
4.过程设计的工具
它们可以分为图形、表格和语言3 类。
5.面向数据结构的设计方法
方法:Jackson图与Jackson改进型
最终目标:得出对程序处理过程的描述。
6.程序复杂程度的定量度量
(1)价值
/把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量,定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;程序的定量的复杂程度可以作为模块规模的精确限度。/
(2)方法
McCabe方法与Halstead方法
六、 实现
1.定义
通常把编码和测试统称为实现。
(1)编码
所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。
(2)测试
软件工程的根本目标是开发出高质量的完全符合用户需要的软件,因此,通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。
2.编码
**(1)选择程序设计语言
(2)编码风格**
标准:源程序代码的逻辑简明清晰、易读易懂是好程序的一个重要标准
规则:
程序内部的文档
数据说明
语句构造
输入输出
效率
3.测试
(1)软件测试基础
(2)单元测试
(3)集成测试
(4)确认测试
(5)白盒测试技术
(6)黑盒测试技术
(7)调试
(8)软件可靠性
七、 维护
软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。
1.软件维护的定义
所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
4类维护活动:
完善性维护
改正性维护
适应性维护
预防性维护
2.软件维护的特点
(1)结构化维护与非结构化维差别巨大
(2)维护的代价高昂
(3)维护的问题很多
3.软件维护过程
(1)维护过程本质上是修改和压缩了的软件定义和开发过程,而且事实上远在提出一项维护要求之前,与软件维护有关的工作已经开始了。
(2)标准
维护组织
维护报告
维护的事件流
保存维护记录
评价维护活动
4.软件的可维护性
(1)软件的可维护性定性地定义
维护人员理解、改正、改动或改进这个软件的难易程度。
(2)决定软件可维性的因素
可理解性
可测试性
可修改性
可移植性
可重用性
(3)文档
(4)可维性复审
在软件工程过程的每一个阶段都应该考虑并努力提高软件的可维护性,在每个阶段结束前的技术审查和管理复审中,应该着重对可维护性进行复审。
5.预防性维护
预防性维护方法:把今天的方法学应用到昨天的系统上,以支持明天的需求。