1.1 软件危机
1.1.1 软件危机的介绍
1.1.2 产生软件危机的原因
1.1.3 消除软件危机的途径
1.2 软件工程
1.2.1 软件工程介绍
1.2.2 软件工程基本原理
1.2.3 软件工程方法学
1. 传统方法学
传统方法学:也称生命周期学或结构化范型
- 采用结构化技术(分析,设计,实践)来实现软件开发的各项任务。
- 将软件生命周期依次划分若干阶段,顺序完成各个阶段的任务。
- 对问题的抽象逻辑开始,一个一个阶段地顺序开发。
前一个阶段:后一个阶段的前提与基础。
后一个阶段:前一个阶段的具体化和实现细节。
前一个阶段的结束标准就是后一个阶段的开始标准。
- 阶段结束后要进行严格的技术审查和管理复审。
从技术和管理两个方面对这个阶段开发成果进行检查,通过才算结束。
- 没有通过,必须返工,返工后仍要接收审查,返回至4。
审查的一条重要标准:每个阶段都要有与开发软件完全一致的高质量文档资料(这样才能交付给下一个阶段或者用户使用)。
文档作用:通信的工具,截止目前为止工程开发的进度和下一步工作的基础。
2. 面向对象方法学
- 把对象(object)作为数据以及数据上的操作行为的统一的软件构件。
程序由复杂对象组成,复杂对象由简单对象组成。用对象分解取代了功能分解。
- 相同的所有对象划分成类(class)。
类由相同一组数据和相同一组操作的一组相似对象的定义。
数据:对象的静态属性,对象的状态信息。
操作:对象的动态属性,对象的动态行为。
-
父类(基类)派生出子类(派生类)——继承。
-
对象彼此间仅能发送消息互相联系——封装。
对象不是被动地接收外界的操作,是数据处理的主体。
要发送消息请求它执行某个处理数据的操作,不能从外界直接进行操作。
注意
- 传统方法学仍然是人吗在开发软件时使用得十分广泛的软件软件工程方法学。
面向对象方法学是尽量模拟人类的习惯思维方式。 - 传统方法学强调自顶向下地完成软件开发的各阶段任务。
面向对象方法学是一个主动地反复迭代的演化过程。
1.3 软件生命周期
软件生命周期:软件生命周期由软件定义、软件开发和软件维护3个时期组成,每个时期又进一步划分成若干阶段。
1. 软件定义时期的任务(系统分析)
- 确定软件开发工程必须完成的总任务;
- 确定工程的可行性;
- 导出实现工程目标应该采用策略及系统必须完成的功能;
- 估计完成该项工程需要的资源和成本,并且制定工程进度表。
包括3个阶段:问题定义、可行性研究和需求分析
2. 软件开发时期的任务(系统设计&&系统实现)
包括4个阶段:总体设计、详细设计、编码和单元测试、综合测试
3. 软件维护时期
- 软件要持久地满足用户的需要;
- 软件在使用过程中发生错误时应该加以改正;
- 当环境改变时应该修改软件以适应新的环境;
- 当用户有要求时应该及时改进软件满足用户的新需求。
只有:软件维护阶段
阶段详解(驱动讲解)
问题定义
要解决的问题是什么?
解决的途径:
- 对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告;
- 经过讨论和必要的修改之后得到客户的确认。
得到:
关于系统规模和目标的报告书
可行性分析
对于上一个阶段所确定的问题有行得通的解决方法吗?
解决的途径:
- 系统分析员进行一次大大压缩和简化了的系统分析和设计过程;
- 研究问题的范围,是否值得去解,是否有可行的解决方法。
得到:
系统的高层逻辑模型(数据流图、成本效益分析)
可行性论证报告
需求分析
为了解决这个问题,目标系统需要做什么?
解决的途径:
系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得到经过用户确认的系统逻辑模型。
数据流图,数据字典和简要的算法——系统的逻辑模型
得到:
系统的逻辑模型(数据流图、数据字典、简要的算法描述)
规划书
总体设计
概括地说,应该怎样实现目标系统?
解决途径:
- 应该设计出实现目标系统的几种可能方案(低成本、中等成本和高成本)
- 软件工程师应该用适当的表述工具描述各种方案,分析每种方案的优缺点
- 权衡各种方案的利弊,推荐一个最佳方案
- 根据最佳方案,制定出实现最佳方案的详细计划
确定解决问题的策略及目标系统中应包含的程序后,要设计软件的体系结构,确定程序由那些模块组成以及模块间的关系。
详细设计(模块说明)
应该怎样具体实现这个系统呢?
解决途径:
设计出程序的详细规格说明,详细设计每个模块,确定实现模块功能所需要的算法和数据结构。
编码和单元测试
得到正确的程序模块
解决途径:
- 根据目标系统的性质和实际环境,选取程序设计语言
- 将详细设计的结果翻译为选定语言的书写程序
- 仔细测试编写出的每一个模块
综合测试
通过各种类型的测试(及相应的调试)使软件达到预定的要求
解决途径:
集成测试:根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的检测。
验收测试:按照规格说明书的规定,由用户(或用户参与)对目标系统进行验收。
对软件测试结果分析可以预测软件的可靠性;反之根据可靠性决定测试和调试过程的进度。
得到:
测试计划、详细测试方案以及实际测试结果写成文档
软件维护
各种必要的维护活动使系统持久地满足用户的需要
解决途径:
- 改正性维护
- 适应性维护
- 完善性维护
- 预防性维护
得到:
完整准确的维护记录
1.4 软件过程
软件功能:为了获得高质量软件所需要完成的一系列任务的框架,框架规定了各项任务的工作步骤。
实际从事软件开发工作应根据所承担的项目的特点
来划分阶段,但是经典的软件过程模型不是针对某个特定项目讲的。
“规格说明”作为一个单独的阶段独立
问题定义和可行性研究的主要任务都是了解用户的需求
,合并为“需求分析”
总体设计和详细设计是软件的具体开发过程
,合并为“设计”
1.4.1 瀑布模型
传统瀑布模型
实际的瀑布模型
1.4.2 快速原型模型
快速原型模型
1.4.3 增量模型
增量模型
1.4.4 螺旋模型
螺旋模型
1.4.5 喷泉模型
喷泉模型