第一章、软件工程学概述
软件危机
软件危机: 是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含下述两个方面的问题:
- 如何开发软件,以满足对软件日益增长的需求。
- 如何维护数量不断膨胀的已有软件。
软件工程学
软件工程 :指导计算机软件开发和维护的一门工程学科。
软件工程: 包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
软件工程学的一个重要的目标: 就是提高软件的可维护性,减少软件维护的代价。
通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学 ,也称为泛型 。
软件工程方法学(包括传统方法学、面向对象方法学)包含三个要素: 方法、工具和过程。
- 方法: 是完成软件开发的各项任务的技术方法,回答“怎样做”的问题。
- 工具: 是为运用方法而提供的自动的或半自动的软件工程支撑环境。
- 过程: 是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
面向对象方法学具有下述四个要点:
- 把对象作为融合了数据及在数据上的操作的软件构件。
- 把所有对象都划分成类。
- 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。
- 对象彼此间仅能通过发送消息互相联系。
面向对象方法学的优点: 降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。
软件生命周期: 软件生命周期由软件定义、软件开发和运行维护三个时期组成。
软件定义: 问题定义、可行性研究和需求分析。
软件开发 :总体设计,详细设计,编码和单元测试,综合测试。
- 问题定义: 问题定义阶段必须回答的关键问题是:“要解决的问题是什么? ”。
- 可行性研究: 这个阶段回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”
- 需求分析: 确定软件必须“做什么”,即软件必须具备哪些功能。
- 总体设计: 把任务分成不同模块。总体设计又称为概要设计。
- 详细设计: 设计实现每个模块所需要的数据结构和算法
- 编码和单元测试: 这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。
- 综合测试 :这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求。
- 软件维护: 关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。
软件的组成: 程序、数据和文档。
- 软件 :是程序、数据及相关文档的集合。
- 程序: 是能够完成预定功能和性能的可执行的指令序列。
- 数据: 是使程序能够适当地处理信息的数据结构。
- 文档 :是开发、使用和维护程序所需要的图文资料。
生命周期模型包括 :瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型
-
瀑布模型:
瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
缺点:
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4)瀑布模型的突出缺点是不适应用户需求的变化。 -
快速原型: 是快速建立起来的、可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成功能的一个子集。
优点:有助于所开发出的软件产品满足用户的真实需求。 -
增量模型: 它分批地逐步向用户提交产品,整个软件产品被分解成许多个增量构件,开发人员一个构件一个构件地向用户提交产品。
-
螺旋模型: 基本思想是使用原型及其他方法来尽量降低风险。理解这种模型的一个简单方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。(使用于内部开发的大规模软件项目)
-
喷泉模型: 是典型的面向对象的软件过程模型之一。充分体现了面对对象软件开发过程迭代和平滑过渡的特征。
第二章 、可行性研究
可行性研究概述
可行性研究的目的: 是用最小的代价在尽可能短的时间内研究并确定客户提出的问题是否有行得通的解决办法。
可行性研究的目的不是解决问题,而是确定问题是否值得去解决。
对每种解法都应该仔细研究它的可行性,一般说来,至少应该 从下述 3 个方面研究每种解法的可行性:
1)技术可行性 2)经济可行性 3&