软件工程概述(软件危机、软件工程、软件生命周期、软件过程)

  • 软件工程概述(1)
  • 面向结构化方法学(2-8)
  • 面向对象方法学(9-12)

一、软件的概念

软件不等同于程序。
什么是软件?

程序+数据结构+文档

软件是计算机程序、所用的数据及有关文档的集合。实际上,软件是为满足人们某种需求,被人开发,被人应用的集合体。所以,软件是由程序、数据、文档和人组成。

程序:在运行中能提供所希望的功能和性能的指令集。程序由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列。
数据结构:使程序能够正确运行的数据结构。
文档:描述程序研制过程和方法使用的文档。文档是记录软件开发活动和阶段性成果、理解软件所必需的阐述性资料。

二、软件危机

1、软件危机的概念
软件危机:指的是软件开发维护过程中遇到的一系列严重问题。
2、软件危机的表现

  • 对软件开发成本和进度的估计很不准确
  • 用户对“已完成的”软件不满意甚至拒绝接受
  • 软件质量靠不住
  • 软件的可维护性差
  • 软件通常没有适当的文档资料
  • 软件成本在计算机系统总成本中所占比例逐年上升
  • 软件开发生产速率提高的速度,跟不上硬件的发展速度

3、软件危机的典例

丹佛新国际机场
IBM360系列机的操作系统
ARIANE 5 火箭
爱国者导弹
2008年核反应堆

4、软件危机根源

  • 规模大,复杂性高
  • 软件是逻辑产品, 未完全认识其本质和特点
  • 缺乏高质量的人才(技术和管理)
  • 缺乏一种有效、系统原理、原则、方法和工具来指导软件的开发、管理和维护

出现软件危机的原因:
①软件的特点。软件的特点有知识性、社会性、复杂性、不可见性、硬件性和规模越来越大,这些特点可能使软件在开发、使用和维护中留下隐患,导致软件危机。
②开发使用维护方法不科学。例如需求分析不到位;四无开发;工具落后;无质量保证。

三、软件工程

1、软件工程定义
1.软件工程是为了经济地获得可靠的而且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。
2.把系统的、规范的、可度量的途径应用于软件的开发、运行和维护的过程。也就是把工程应用于软件中。

2、软件工程的本质特性
本质特性:
①软件工程关注于大型程序的构造;
②软件工程的中心课题是控制复杂性;
③软件经常变化;
④开发软件的效率非常重要;
⑤和谐地合作是开发软件的关键;
⑥软件必须有效地支持它的用户;
⑦在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。

3、软件工程中的角色
软件工程中的角色有项目经理、产品经理、分析设计师、程序员、测评师、实施、维护、培训师和销售。
4、软件工程的基本原理

  • 用分阶段的生命周期计划严格管理
  • 坚持进行阶段评审
  • 实行严格的产品控制
  • 采用现代程序设计技术
  • 结果应该能够清楚地审查
  • 开发小组的人员应该少而精
  • 承认不断改进软件工程实践的必要性

四、软件工程方法学

通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。

软件工程方法学构成三要素:

方法——是完成软件开发的各项任务的技术方法。
工具——是为运用方法而提供的自动的或半自动的 软件工程环境。
过程——是为了获得高质量的软件所需要完成的一系列任务框架,它规定了完成各项任务的工作步骤。

软件工程方法学:
1.传统方法学
生命周期方法学
结构化范型

2.面向对象方法学

对象:融合了数据及在数据上的操作行为的统一的软件构件。
把所有对象都划分为类
父类与子类组成一个层次结构的系统
对象彼此间仅能通过发送消息互相联系

面向对象方法学把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合在一起的方法。

五、软件生命周期

软件生命周期模型阶段

(1)问题定义;
(2)可行性研究;
(3)需求分析;
(4)总体设计;
(5)详细设计;
(6)编码和单元测试;
(7)综合测试;
(8)软件维护。

六、软件过程

1、常见的软件过程模型
(1)瀑布模型;
(2)原型模型;
(3)增量模型;
(4)螺旋模型;
(5)喷泉模型;
(6)敏捷模型;
(7)统一过程模型。

渐进式开发模型: 快速原型、增量、螺旋

2、瀑布模型(不可逆)
顺序性和依赖性
推迟实现
质量保证
3、快速原型模型
快速建立起来的可以在计算机上运行的程序,它能完成的功能往往是最终的软件产品所能完成的功能的一个子集。
4、增量模型(渐增模型)
把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
5、螺旋模型

瀑布模型+快速原型+风险分析

使用原型及其他方法以尽可能地降低风险。理解这种模型的一个简易方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。

6、喷泉模型

  • 迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统。

  • 无间隙:开发活动之间不存在明显的边界。
    7、Rational统一过程

思想:
1.以体系架构为中心
2.用例驱动
3.迭代化开发

运用 RUP意味着巨大的工具购买成本和学习成本!
RUP软件开发生命周期是一个二维的生命周期模型,横轴表示时间,纵轴表示核心工作流。

四个阶段:
初始阶段
精华阶段
构建阶段
移交阶段

8、敏捷过程与极限编程
Agile过程即敏捷过程(轻量级方法)

适合采用Agile方法的情况:
需求不确定、易挥发(Volatile,意指今天的要求明天就不需要了)
有责任感和积极向上的开发人员
用户容易沟通并能参与

极限编程是Agile方法中最著名的一个。

9、微软过程

  • 规划阶段

开展市场调查研究,结合公司战略形成产品的远景目标。

  • 设计阶段

根据产品的远景目标,完成软件的功能规格说明和总体设计,并确定产品开发的主要进度。

  • 开发阶段

    整个开发任务划分成若干递进的阶段,并设置成M1、M2、Mn等内部里程碑,在各里程碑都提交阶段性的工作成果。

  • 稳定阶段

实行全面的内部和外部测试,最终形成可发布的RTM版本。

  • 发布阶段

在确认产品质量符合发布标准之后,发布产品及其相关的消息。

七、RUP和敏捷过程优缺点

(1)RUP
RUP的优点:
①RUP是建立在非常优秀的软件工程原则基础上的,例如迭代,需求驱动,基于结构化的过程开发。
②RUP提供了几个方法,例如每一次迭代产生一个工作原型,在每一个阶段的结束决定项目是否继续,这些方法提供了对开发过程的非常直观的管理。
③rational公司已经并将继续对RUP进行开发,使这个基于html的软件工程能够被裁减以适合你的组织的实际需要。
RUP的缺点:
①RUP仅仅包含了开发过程。它没有完全覆盖软件过程,从图1能够明显看出,它丢失了维护和技术支持这两个重要的阶段。
②RUP不支持组织内的多项目开发,导致组织内的大范围的重用无法实现。
③RUP缺少开发商的支持。你能自动完成软件过程的每一个方面?rational提供了所有的工具供你选择,例如是否有rational help desk或者rational persistence modeling 4. RUP在度量管理,重用管理,人员管理和测试上有缺陷。
(2)敏捷过程
敏捷过程的优点:
①个体和交互胜过过程和工具
②可以工作的软件胜过面面俱到的文档
③客户合作胜过合同谈判
④响应变化胜过遵循计划
敏捷过程的缺点:
敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累

八、总结

软件是程序、数据以及相关文档的集合。
软件危机的表现,根源之一在于缺乏系统的方法和工具的指导。
软件工程:方法、工具和过程。
软件工程的基本原理
软件生命周期
软件过程模型

猜你喜欢

转载自blog.csdn.net/weixin_44366125/article/details/105875914