1.基本概念 - wolai 笔记

1.软件

软件是计算机系统中与硬件相互依存的另一部分,它是包括程序数据及其相关文档的完整集合。(软件=程序+数据+文档)
软件发展经历的三个阶段:程序设计、程序系统、软件工程

2.软件危机

软件危机是指在计算机软件开发和维护的过程中所遇到的一系列严重问题。包括两点:
  1. 如何开发软件,以满足对软件日益增长的需求;
  2. 如何维护数量不断膨胀的已有软件。
软件开发和维护过程中存在的许多严重问题,一方面与软件本身的特点有关,另一方面和软件开发与维护方法不正确有关。具体表现在:
  1. 软件是逻辑部件而不是物理部件;
  2. 软件的规模越来越大,复杂性越来越大;
  3. 轻视需求分析的重要性,轻视软件维护的错误观点和方法。

3.软件工程

软件工程是以质量为核心,为了经济地开发满足客户需求的软件而研究、建立和应用的系统化的、有规则的、可度量的和可控制的工程原则、方法,涉及到软件工程、项目管理、开发方法、软件度量和开发工具等各个方面。
1968年在第一届NATO会议上的早期定义:“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。
1993IEEE的定义:把系统化、规范化、可度量的途径应用于软件开发、运行和维护过程中;研究其实现途径。

软件工程方法学

把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。
软件工程方法学包括三个要素:方法工具过程
  • 方法:完成软件开发各项任务的技术方法,回答“怎么做”
  • 工具:为运用方法提供的自动或半自动软件工程支撑环境
  • 过程:是为了获得高质量软件所需要完成的一系列任务框架,回答“何时做”

4.软件工程方法模型

软件工程方法包括:传统方法学面向对象方法学
常用的开发模型有:
  • 瀑布模型:需求稳定,而且可以预先指定的大型系统工程项目。
  • 原型模型:需求模糊或者随时间变化,适合需求模糊或者随时间变化的中小型项目
  • 增量模型:分析员先做出需求分析和概要设计,用户参与逐步完善
  • 螺旋模型:将瀑布模型与原型模型结合起来,并加入了风险分析
  • 喷泉模型:是开发过程具有迭代性和无间隙性

5.软件生命周期

一个软件从定义、开发、使用和维护,直到最终被放弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为软件生命周期。

生命周期的阶段

三个阶段:定义、开发、维护

生命周期的步骤

八个步骤:
软件定义
1、问题定义:弄清楚用户要解决的问题。关于规模和目标的报告书;
2、可行性研究:上阶段确定问题是否可行。系统的高层逻辑模型:数据流图、成本效益分析
目的:用最小的代价在最小的时间内确定问题是否能够解决
过程
  • 分析和澄清问题定义;
  • 导出系统的逻辑模型;
  • 根据逻辑模型探索若干种可供选择解法;
  • 研究每种解法可行性:经济可行性、技术可行性、操作可行性
3、需求分析:为解决问题,系统需要什么功能。系统的逻辑模型:数据流图、数据字典、算法描述
需求分析是确定系统必须完成那些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。一般来说需求分析的任务包括以下几方面:
  1. 确定对系统的综合要求。主要有:功能需求、性能需求、运行需求、将来可能提出的需求
  2. 分析系统的数据要求
  3. 导出系统的逻辑模型:数据流图、实体-联系图、状态转换图、数据字典、算法流程等
  4. 修正系统开发计划
软件开发
4、总体设计设计软件结构,根据需求文档,确定程序由那些模块组成及其模块之间的关系。
  • 系统设计:或分出组成系统的程序、文件、数据库、人工过程和文档等物理元素
  • 结构设计:确定系统中每个程序是由那些模块组成的,以及这些模块相互间的关系,不涉及木块内部算法流程
5、详细设计:设计详细规格说明,确定算法和数据结构。HIPO图或PDL
目的: 确定怎样具体地实现所要求的系统。得出对目标的精确描述。
任务:
  • 过程设计:即设计软件体系结构中所包含的每个模块的实现算法。
  • 数据设计:设计软件数据结构。
  • 接口设计:设计软件内部各模块之间的接口
6、编码和单元测试:将详细设计内容用语言实现。源程序清单,单元测试方案和结果
7、集成测试:集成测试方法,结果集成测试,验收测试,完整一致的软件配置
软件维护
8、运行维护:维护记录以及改正性维护、适应性维护、完整性维护和预防性维护

7.软件与硬件

软件是一种逻辑部件,而不是具体的物理部件。软件在开发、生产、使用、维护等方法与硬件有明显的差异。
软件是开发,硬件是制造;软件是自定的,硬件是组装的;软件不会磨损,硬件存在机械磨损问题。

8.软件过程模型

是为了获得高质量软件所需要完成的一系列任务框架。通常用软件生命周期模型描述软件过程

8.1 瀑布模型

将软件生存周期的各项活动规定为依照固定顺序连接的若干阶段工作,最终得到软件产品
特点:
  • 阶段具有顺序性和依赖性
  • 推迟实现观点
  • 质量保证观点:每阶段坚持两个重要做法:一是每阶段都必须完成完整、准确的文档。二是每阶段结束前对文档评审。
改进的瀑布模型:
优缺点
  • 优点:提高软件质量,降低维护成本,缓解软件危机。
  • 缺点:模型缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际。

8.2 快速原型模型

快速建立可运行的程序,它完成的功能往往是最终产品功能的一个子集
优点: 开发的软件产品通常满足用户需求;软件产品开发基本是线性过程
缺点: 准确原型设计困难;原型理解可能不同;不利于开发人员创新

8.3 增量模型

先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求
优点:短时间内可提交完成部分功能 ;逐渐增加产品功能,用户适应产品快。
缺点:增量构件划分以及集成困难;容易退化为边做边改模型
风险更大的增量模型

8.4 螺旋模型

在每个阶段之前都增加了风险分析过程的快速原型模型。看作增加了风险分析的快速原型模型。
优点: 利于把软件质量作为软件开发目标;减少测试;维护和开发不分开
缺点: 风险估计困难

8.5喷泉模型

典型的面向对象软件过程模型。体现迭代和无缝的特性






Comment