软件工程知识概述

(一) 知识概述

1)软件危机

什么是软件危机?

软件危机是指计算机软件开发和维护过程中所遇到的一些严重问题,主要包含以下两个方面问题:

  1. 如何满足日益增长的软件需求。
  2. 如何维护数量庞大的已有软件。
    典型表现为:
  3. 对软件开发成本与进度的估计常常很不准确。
  4. 用户对已完成的软件系统并不满意。
  5. 软件产品的质量不可靠。
  6. 软件没有适当的文档资料。
  7. 软件常常是不可维护的。
  8. 软件成本在计算机系统总成本中所占比例越来越高。
  9. 软件的开发速率赶不上计算机应用的普及趋势。

为何会出现软件危机?

原因如下:

  1. 与软件的本身特点有关。
  2. 与软件开发与维护的方法不正确有关。

如何消除软件危机?

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

2)软件工程

什么是软件工程?

一句话:软件工程是指导计算机软件开发和维护的一门工程学科。
具体解释为:采用工程的概念来开发维护软件,把正确的管理技术与当前最好的技术方法结合起来,以经济地开发出高质量软件,并有效的进行维护,这就是软件工程。
软件工程的本质特性:
1,软件工程关注于大型程序的构造;
2,软件工程的中心课题是控制复杂性;
——许多软件的复杂性主要不是由问题的内在度复杂性造成的,而是由必须处理的大量细节造成的。
3,软件经常化;
4,开发软件的效率知非常重要;
5,和谐地合作是开发软件的关键;
6,软件必须有效地支持它的用户;
7,在软件工程领域中是由一种文化背景的人替具有另一种文化背景的人创造产品。

基本原理是什么?

基本道理:
1,用分阶段的生命周期计划严格管理;
2,坚持进行阶段评审;
3,实行专严格的产品控制;
4,采用现代程序设计的技术;
5,结果应能清楚地审查;
6,开发小组的人员应该少而精;
——人属数为N时,可能的通信路径有N(N-1)/2条。
7,承认不断改进软件工程实践的必要性。

方法学有哪些?

软件工程方法学三要素:1.方法 2.工具 3.过程
使用最广泛的方法学有两种:

  1. 传统方法学(强调自顶向下
    又称生命周期方法学或结构化范型(范型与方法学在软件工程同义)。
    特征:要等到前一阶段完成,后一阶段才开始
    缺点:当软件的需求随着时间的变化时,不适合用此范型,往往不成功。这种方 法数据和方法想脱离。
  2. 面向对象方法学(强调主动地多次反复迭代
    又称面向对象范型
    特征:面向对象方法=对象+类+继承+消息
    扩展:如果只有对象和消息,只能说是基于对象的方法(如javascript),如果只有对象、类、消息只能说是基于类的方法,当满足公式时才能说是面向对象的方法。
    优点:将数据和行为结合在了一起。

3)软件生命周期(重点)

软件生命周期分为三个时期八个阶段:
软件工程知识概述

4)软件过程模型

瀑布模型

1.瀑布模型

瀑布模型的做法很形象,软件开发过程像瀑布一样,一层接着一层,完成上层步骤之后,接着开展下一项。前一阶段会形成一个文档,后一阶段根据这个文档进行操作。

特点:

  1. 阶段间具有顺序性和依赖性:
    前一阶段完成后,才能开始后一阶段
    前一阶段的输出文本为后一阶段的输入文本
  2. 推迟实现的观点
  3. 质量保证:
    每个阶段必须交付出合格的文档
    对文档进行审核

缺点

  1. 开始需要把需求做到最全
  2. 惧怕用户测试中的反馈,惧怕需求变更
    软件工程知识概述

注意:瀑布模型每一环节是带有反馈的,当后一阶段发现文档出现了错误,需要交还给前一阶段进行文档的修改。

快速原型模型

快速原型搭建的是一个具有初级功能的项目,这个项目与客户要求具有一定的功能,但只是其子集,或者说完成了其中的一部分功能,并没有全部实现。它在搭建好之后,会请顾客来进行试用,对于试用完之后的产品,顾客一般会提出改进意见,或者对于之前自己提出的需求有所更改,根据最新的指导意见,开发人员再进行开发。快速原型对比于瀑布模型,所增加的内容就是变化需求的处理。

软件工程知识概述

优点:快速原型模型在开发每一阶段,开发人员根据用户提出的需求能够快速地更改项目程序,不需要大面积返工。开发人员通过建立模型,知道了什么该做,什么不该做。减少了前期所犯的错误。因此不需要反馈环。

缺点:原型系统主要是要快速的建立起模型,以此确定用户需求,当用户需求确定之后,就直接将原型模型抛弃。

== 注意==:快速原型模型是不带有反馈环的,这是因为其自身的特点所决定的,自身特点在上段中已介绍清楚。

喷泉模型优点:

喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动.该模型的各个阶段没有明显的界限,开发人员可以同步进行开发.其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程.
缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理.此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况.
软件工程知识概述

增量模型

增量模型不同于之前两个模型是一次性交付完成,是一次次增加产量。增量模型对于不同的构件分别进行搭建,增量模型要求软件系统是开放的。第一次增量模型构建的时候,需要实现软件的核心基本功能,之后的慢慢的增加功能,直至完成整个项目的开发。只有软件体系是开放的,后面的软件模块才能够慢慢的增加。
困难:
每个新的构件集成到现有的软件结构中必须破坏原来以开发的产品,所以必须定义很好的接口
优点:
短时间内向用户提供可完成部分工作的产品
逐步增加产品功能可以使用户有时间了解和适应新产品
开放结构的软件拥有的维护性明显好于封闭结构的软件
缺陷:
容易退化为边做边改模型,从而使软件过程的控制失去整体性 
如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析
软件工程知识概述

螺旋模型

适应于内部的大规模软件开发:螺旋模型强调风险分析,许多客户都无法接受和相信这种分析因此适合于大规模软件项目(执行风险分析将大大影响项目的利润,进行风险分析就毫无意义)软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险
优点:

  1. 设计上的灵活性,可以在项目的各个阶段进行变更.
  2. 以小的分段来构建大型系统,使成本计算变得简单容易
  3. 客户始终参为保证了项目不偏离正确方向以及项目的可控性
  4. 客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互.
  5. 客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品.

缺点:

  1. 很难让用户确信这种演化方法的结果是可以控制的.
  2. 建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求.

核心:
不需要在刚开始的时候就把所有事情都定义的清清楚楚.在定义最重要的功能时,去实现它,然后听取客户的意见,之后再进入到下一个阶段.如此不断轮回重复,直到得到您满意的最终产品

每轮循环包含如下六个步骤:

  1. 确定目标,可选项,以及强制条件
  2. 识别并化解风险
  3. 评估可选项
  4. 开发并测试当前阶段
  5. 规划下一阶段
  6. 确定进入下一阶段的方法步骤.

模型如下:
软件工程知识概述