软件工程学概述

软件工程学概述

软件危机

1.软件危机介绍

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机包含的两个方面的问题

(1) 如何开发软件,以满足对软件日益增长的需求

(2) 如何维护数量不断膨胀的已有软件

软件危机主要有以下典型表现:

(1) 对软件开发成本和进度的估计常常不准确

(2) 用户对“已完成的”软件系统不满意的现象经常发生

(3) 软件产品的质量往往靠不住

(4) 软件常常是不可维护的

(5) 软件通常没有适当的文档资料

(6) 软件成本在计算机系统总成本中所占的比例逐年上升

(7) 软件开发生产效率提高的速度,远远跟不上计算机应用迅速普及深入的趋势

 

2. 产生软件危机的原因

软件开发和维护过程中存在很多严重问题,一方面与软件本身的特点有关,一方面与软件开发与维护的方法不正确有关。

 

3.消除软件危机的途径

应该彻底消除“软件就是程序”的错误观念

软件是程序、数据以及相关文档的完整集合

(1) 程序是能够完成预定功能和性能的可执行的指令序列

(2) 数据是使程序能够适当地处理信息的数据结构

(3) 文档是开发、使用和维护程序所需要的图文资料

1983年IEEE  软件的定义:计算机程序、方法、规则、相关的文档以及在计算机上运行时所必需的数据。

为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

 

软件工程

第一代:传统软件工程

第二代:对象软件工程

第三代:过程软件工程

第四代:构造软件工程

  1. 软件工程的介绍

软件工程两个典型的定义:

(1) 软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理(1968年第一届NATO会议上提出)

(2) 软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径(1993年IEEE给出)

软件工程的本质特性

(1) 软件工程关注于大型程序的构造

(2) 软件工程的中心课题是控制复杂性

(3) 软件经常变化

(4) 开发软件的效率非常重要

(5) 和谐地合作是开发软件的关键

(6) 软件必需有效地支持它的用户

(7) 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品

  1. 软件工程的基本原理

(1)用分阶段的生命周期计划严格管理

(2)坚持进行阶段评审

(3)实行严格的产品控制

(4)采用现代程序设计技术

(5)结果应能清楚地审查

(6)开发小组的人员应该少而精

(7)承认不断改进软件工程实践的必要性

  1. 软件工程方法学

软件工程方法学包含3个要素:方法、工具、过程

A.方法是完成软件开发的各项任务的技术方法

B.工具是为运用方法而提供的自动的或半自动的软件工程支撑   环境

C.过程是为了获得高质量的软件所需要完成的一系列任务的框   架,它规定了完成各项任务的工作步骤

 

(1)传统方法学

传统方法学也称为生命周期方法学或结构化规范

2)面向对象方法学

A.把对象作为融合了数据及在数据上的操作行为的统一的软件   构件

B.把所有对象都划分成类

C.按照父类(或称为基类)与子类(或称为派生类)的关系,   把若干个相关类组成一个层次结构的系统(也称为类等级)

D.对象彼此间仅能通过发送消息互相联系

 

软件生命周期

软件生命周期由软件定义、软件开发和运行维护3个时期组成

1.软件定义时期的任务是:

(1)确定软件开发过程必须完成的总目标

(2)确定工程的可行性

(3)导出实现过程目标应该采用的策略及系统必须完成的功能

(4)估计完成该项目工程需要的资源和成本

2.开发时期具体设计和实现在前一个时期定义的软件

(1)系统设计:总体设计、详细设计

(2)系统实现:编码和单元测试、综合测试

3.维护时期的主要任务是使软件持久地满足用户的需要

(1)当软件在使用过程中发现错误时应该加以改正

(2)当环境改变时应该修改软件以适应新的环境

(3)当用户有新要求时应该及时改进软件以满足用户的新需 要

 

软件生命周期每个阶段的基本任务

(1)问题定义:要解决的问题是生命?

(2)可行性研究:对于上一个阶段所确定的问题有行得通的 解决办法吗?

(3)需求分析:为了解决这个问题,目标系统必须做什么

(4)总体设计:概括地说,应该怎样实现目标系统

软件设计的一条基本原理是:程序模块化

(5)详细设计:应该怎样具体地实现这个系统呢

(6)编码和单元测试:写出正确的容易理解、容易维护的程 序模块

(7)综合测试:通过各种类型的测试(及相应的调试)使软 件达到预定的要求

(8)软件维护:通过各种必要的维护活动使系统持久地满足 用户的需要

 

软件过程

软件过程描述为了开发出客户需要的软件,什么人、在什么时候、做什么事以及怎样做这些事以实现某一个特定的具体目标。

在完成开发任务时必须进行一些开发活动,并且使用适当的资源,在过程结束时将把输入转化为输出。

过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段完成的里程碑。

1.瀑布模型

(1)阶段间具有顺序性和依赖性

A.必须等前一阶段的工作完成之后,才能开始后一段的   工作

B.前一阶段的输出文档就是后一阶段的输入文档

(2)推迟实现的观点

清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想

(3)质量保证的观点

A.每个阶段都必须完成规定的文档,没有交出合格的文 档就是没有完成该阶段的任务

B.每个阶段结束前都要对所完成的文档进行评审,以便 尽早发现问题,改正错误

瀑布模型的优点:

(1)可强迫开发人员采用规范的方法

(2)严格规定了每个阶段必须提交的文档

(3)要求每个阶段交出的所有产品都必须经过质量保证小组 的仔细验证

瀑布模型的缺点:瀑布模型是由文档驱动的

2.快速原型模型

优点:

(1)有助于保证用户的真实需要得到满足

(2)软件产品的开发基本上是线性顺序进行的

3.增值模型

优点:

1)能在较短时间内向用户提交可完成部分工作的产品

2)逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击

 

4.螺旋模型

基本思想是:使用原型及其他方法来尽量降风险

螺旋模型主要使用与内部开发的大规模软件项目

优点:

(1)对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标

(2)减少了过多测试或测试不足所带来的风险

(3)在螺旋模型中维护知识模型的另一个周期,在维护和开发之前没有本质区别

5.喷泉模型

特性:迭代性、无间缝性

6.Rational统一过程

(1)最佳实践

①迭代式开发

②管理需求

③使用基于构件软件的体系结构

④可视化建模

⑤验证软件质量

⑥控制软件变更

(2)RUP软件开发生命周期

①核心工作流

②工作阶段

③RUP迭代式开发

7.敏捷过程与极限编程

(1)敏捷过程

①个体和交互胜过过程的工具

②可以工作的软件胜过面面俱到的文档

③客户合作胜过合同谈判

④响应变化胜过遵循计划

(2)极限编程

①极限编程的有效实践

②极限编程的整体开发过程

③极限编程的迭代过程

8.微软过程

(1)微软过程准则

(2)微软软件生命周期

①规划阶段

②设计阶段

③开发阶段

④稳定阶段

⑤发布阶段

(3)微软过程模型

 

posted on 2017-09-18 19:17  NS老油条  阅读(408)  评论(0编辑  收藏  举报

导航