软件工程概述 为什么要学软件工程

明确三个问题

1、什么是软件工程?

2、为什么要学软件工程?

3、怎么学好软件工程?

软件工程

第1章 软件工程概述

第1章 软件工程概述

1.1 软件\r\n1.2 软件工程的概念\r\n1.3 软件生命周期\r\n1.4 软件生命周期模型\r\n1.5 软件开发方法和工具

本章学习目标:\r\n\r\n1、理解与软件工程相关的一些基本的概念和知识,其中包括软件与软件的特点、软件工程的概念等。\r\n2、掌握软件生命周期的基本概念,熟悉一些典型的软件生命周期模型。\r\n3、了解有关软件开发方法和开发工具的知识。

第1章 软件工程概述

1.1 软件

1.1.1 软件与软件的特点 \r\n\r\n1.1.2 软件危机

1.1.1 软件与软件的特点

一、软件定义: \r\n                软件=程序 数据 文档\r\n程序:完成特定功能和满足性能要求的指令序列\r\n数据:程序运行的基础和操作的对象\r\n文档:与程序开发、维护和使用有关的图文材料 \r\n\r\n独唱--> 小合唱--> 合唱--> 万人大合唱\r\n |                      |                      |\r\n简单程序    较复杂程序          软件

1.1.1 软件与软件的特点

二、软件的特点\r\n 1、计算机软件是一种抽象的逻辑产品。 \r\n 2、软件的生产与硬件不同。 \r\n 3、软件产品不会用坏,不存在硬件产品那样的机械磨损、老化等问题。

图1-1 软硬件失效率曲线

1.1.1 软件与软件的特点

4、软件产品的生产主要是脑力劳动。 \r\n5、软件费用不断增加,软件成本相当昂贵。 \r\n6、软件工作涉及到各种社会因素。

计算机系统软、硬件成本比例的变化情况

软件的分类

按软件的功能进行划分:\r\n系统软件\r\n操作系统\r\n数据库管理系统\r\n设备驱动程序\r\n通信处理程序等

支撑软件\r\n文本编辑程序\r\n文件格式化程序\r\n磁盘向磁带向数据传输的程序\r\n程序库系统\r\n支持需求分析、设计、实现、测试和支持管理的软件

软件的分类

应用软件\r\n商业数据处理软件\r\n工程与科学计算软件\r\n计算机辅助设计/制造软件\r\n系统仿真软件\r\n智能产品嵌入软件\r\n医疗、制药软件\r\n事务管理、办公自动化软件\r\n计算机辅助教学软件

软件的分类

按软件规模进行划分:\r\n\r\n类别  参加人员数  研制期限    源程序行数     \r\n微型  1            1~4周          0.5k    \r\n小型      1            1~6月        1k~2k\r\n中型      2~5            1~2年        5k~50k\r\n大型      5~20 2~3年      50k~100k\r\n甚大型 100~1000    4~5年     1M(=1000k)\r\n极大型 2000~5000  5~10年     1M~10M

软件的分类

按软件工作方式划分:\r\n\r\n 实时处理软件\r\n 分时软件\r\n 交互式软件\r\n 批处理软件

软件的分类

1.1.2 软件危机

定义:\r\n 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。\r\n\r\n软件危机包含下述两方面的问题:\r\n\r\n如何开发软件,以满足对软件的日益增长的需求;\r\n如何维护数量不断膨胀的软件。

软件危机典型表现:\r\n\r\n对软件开发成本和进度的估算很不准确\r\n用户很不满意\r\n质量很不可靠\r\n软件常常是不可维护的\r\n没有完整的文档\r\n软件成本比重上升,特别是软件维护成本迅速增加,已经占据软硬件总成本的40%~75%\r\n供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势

1.1.2 软件危机

硬  件

软件开发

软件维护

1955年                     1970年                    1985年

100%

80%

60%

40%

20%

软件、硬件成本变化趋势

1、1993年距伦敦90英里的塞兹韦尔核电站正式投入运行,但是,工作人员很快发现核电站的反应堆内温度控制失灵。事后查明,在反应堆的主要保护系统中,有个10万行代码的控制软件几乎有一半未能通过测试。

几个典型的由软件质量问题引发的事故

2、80年代中期,加拿大一家原子能公司生产的、由微处理机控制的癌症治疗仪,在美国和加拿大的多家医院使用,致使6个病人因超剂量辐射而受到严重伤害甚至死亡。

几个典型的由软件质量问题引发的事故

3、海湾战争中,一个软件故障打乱了“爱国者”导弹雷达跟踪系统,使导弹发射后未能迎击对方的“飞毛腿”导弹,反而轰击了自己的军营,造成了28名士兵丧生,98人受伤。

几个典型的由软件质量问题引发的事故

4、1996年欧洲航天局发射的阿丽亚娜5型火箭,在发射40秒后爆炸,发射场上2名法国士兵当场死亡。这个耗资10亿美元、历时9年的航天计划严重受挫,引起了国际宇航界的震惊。事故发生后,专家组的调查分析报告指明,爆炸的原因在于惯性导航系统软件中技术要求和设计错误。

几个典型的由软件质量问题引发的事故

5、德国曾由于电话计费系统的软件问题而发生用户需多交付不合理电话费的事件,引起了公众的抗议。

几个典型的由软件质量问题引发的事故

1.1.2 软件危机

造成软件危机的原因:\r\n\r\n 1、软件的规模越来越大,结构越来越复杂。\r\n 2、软件开发管理困难。现代软件一般规模大,结构复杂,需要组织众多开发人员共同完成。\r\n 3、软件开发技术落后。\r\n 4、软件产品生产方式落后。\r\n 5、软件开发工具落后。\r\n 6、用户对软件需求的描述不精确,软件开发人员对用户需求的理解有偏差。

1.2 软件工程的概念

1.2.1 软件工程的定义\r\n1.2.2 软件工程的基本目标\r\n1.2.3 软件工程的基本原理

为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。 软件工程正是从管理和技术方面研究如何更好地开发和维护计算机软件的学科。\r\n\r\n软件工程的有多种定义:\r\n        Fritz Bauer(弗里茨 鲍尔)给出的软件工程的定义是:软件工程是为了经济地获得可靠的能在实际机器上高效运行的软件而确立和使用的一系列完善的工程原理(方法)。

1.2.1 软件工程的定义

1.2.1 软件工程的定义

Boehm(布恩)对软件工程的定义为:\r\n          软件工程是现代科学技术知识在设计和构造计算机程序中的实际应用,其中包括管理在开发、运行和维护这些程序的过程中所必需的相关文档资料。\r\n\r\n1983年IEEE(国际电气与电子工程师协会)在其《IEEE软件工程标准术语》中对软件工程下的定义为:\r\n          软件工程是开发、运行、维护和修复软件的系统方法。其中的“软件”是指计算机程序、方法、规则、相关的文档资料和程序运行所必需的数据。\r\n\r\n1993年,IEEE给出了一个更加综合的定义:\r\n          ①将系统的、规范的、可度量的工程化方法应用于软件的开发、运行和维护的全过程。\r\n          ②研究①中所提到的方法。

1.2.1 软件工程的定义

软件工程的定义虽多,但其主要思想都是在强调软件开发中应用工程化原则的重要性。这种工程化的思想一直贯穿需求分析、设计、实现和维护整个软件生命过程。

软件工程研究的主要内容包括:\r\n软件工程管理\r\n软件开发技术\r\n\r\n软件工程管理主要是研究:\r\n软件管理学\r\n软件经济学\r\n软件心理学\r\n\r\n软件开发技术主要研究:\r\n软件开发方法学\r\n软件开发过程\r\n软件开发工具和环境

1.2.1 软件工程的定义

1.2.2 软件工程的基本目标

软件项目的成功主要是要达到以下几个目标:\r\n\r\n 1、付出较低的软件开发成本;\r\n 2、达到用户所要求的软件功能;\r\n 3、取得较好的软件性能;\r\n 4、所开发的软件易于移植、可重用性好;\r\n 5、需要较低的软件维护费用;\r\n 6、能按时完成开发任务,及时交付使用。

1.2.2 软件工程的基本目标

图1-2 软件工程目标之间的关系

1.2.3 软件工程的基本原理

软件工程的7条原理:\r\n1、用分阶段的生命周期计划严格管理\r\n2、坚持进行阶段评审\r\n3、实行严格的产品控制  (需求变更)\r\n4、采用现代程序设计技术\r\n5、结果应该能清楚地审查 (产品标准)\r\n6、开发小组的人员应该少而精 \r\n7、承认不断改进软件工程实践的必要性

1.3 软件生命周期

软件生命周期:\r\n         指软件产品从形成概念开始,经过定义、开发、使用和维护,直到最后退役的全过程。\r\n\r\n一般来说,软件生命周期包括 : \r\n  软件定义\r\n  软件开发\r\n  软件的使用、维护和退役

1.3.1 软件定义

软件定义的基本任务:\r\n         弄清待开发的软件系统要做什么,即软件开发工程必须完成的总目标。\r\n \r\n 1、问题定义。 \r\n 2、可行性研究。 \r\n 3、需求分析。

1.3.2 软件开发

软件开发过程:\r\n      即软件的设计和实现。\r\n\r\n软件开发过程主要分为以下几个阶段: \r\n 概要设计\r\n 详细设计\r\n 实现(编码)\r\n 测试

1.3.3 软件的使用、维护和退役

软件的维护:\r\n         为了延长软件的寿命而对软件产品进行修改或对软件需求变化做出响应的过程。\r\n         软件的维护是软件生命周期中时间最长的阶段,软件维护的工作量可能占了软件生命周期全部工作量的70% 以上。 \r\n\r\n软件的退役:\r\n      即软件的停止使用。退役意味着软件生存周期的结束,表明软件系统已不再具有维护价值。

1.4 软件生命周期模型

软件生存周期模型:\r\n         又称为软件开发模型(Software Develop Model),软件过程模型(Software Process Model)等。\r\n         软件生存周期模型是软件工程的一个重要的概念。它主要指的是反映整个软件生命期中系统的开发、运行、维护等实施活动的一种结构框架。 \r\n 瀑布模型\r\n 原型模型\r\n 螺旋模型\r\n 增量模型\r\n 基于构件的开发模型\r\n 喷泉模型

1.4.1 瀑布模型

瀑布模型的基本思想:\r\n        严格按照软件生存周期各个阶段来进行开发,上一阶段的输出即是下一阶段的输入,并强调每一阶段的严格性。它规定了各阶段的任务和应提交的成果及文档,每一阶段的任务完成后,都必须对其阶段性产品(主要是文档)进行评审,通过后才能开始下一阶段的工作。因此,它是一种以文档作为驱动的模型。

1.4.1 瀑布模型

图1-3 瀑布模型

1.4.1 瀑布模型

瀑布模型的主要特点:\r\n     各阶段之间具有顺序性和依赖性。它严格按照软件生存周期各个阶段来进行开发,前一阶段工作的结果输出是后一阶段工作的输入。\r\n\r\n瀑布模型的局限性:\r\n         1、软件开发的各个阶段特别是定义阶段的正确性和完整性很难保证。\r\n         2、模型的风险控制能力较弱。用户和项目负责人要经过设计、编码和测试等相当长的时间后才能得到软件的初始版本。\r\n         3、瀑布模型是一种理想的线性开发模式,缺乏灵活性。

1.4.2 原型模型(Prototyping Model)

原型模型又称为快速原型模型。 这种方法的核心思想是:\r\n         在软件开发的早期软件开发人员根据用户提出的软件基本需求快速建立目标软件系统的原型,反复让用户对原型进行评估并提出修改意见,然后开发人员根据用户意见对原型进行修补和完善,直到用户对所开发的系统原型满意为止。

1.4.2 原型模型

快速原型模型的开发过程如图1-4所示。

图1-4 原型模型

1.4.2 原型模型

快速开发原型的途径通常有以下三种:\r\n    1、仅模拟软件系统的人机界面和人机交互方式。\r\n    2、开发一个工作原型,实现软件系统中部分重要的或容易产生误解的功能。\r\n    3、找来一个或几个正在运行的类似软件系统进行比较,向客户展示软件需求中的部分或全部功能。 \r\n\r\n实际应用中的原型使用可采取以下两种不同的策略:  \r\n 废弃策略 \r\n 追加策略

原型模型的适应场合:\r\n\r\n     1、原型模型比瀑布模型更符合人们认识事物的过程和规律,是一种较实用的开发框架。\r\n\r\n     2、它适合于那些不能预先确切定义需求的软件系统的开发。

1.4.2 原型模型

1.4.3 螺旋模型(Spiral Model)

螺旋模型:\r\n\r\n      综合了瀑布模型和原型模型的优点,即将两者结合,并加入了风险分析机制。\r\n\r\n螺旋模型的每一个周期包括:\r\n计划(需求定义)\r\n风险分析\r\n工程实现\r\n评审

1.4.3 螺旋模型

图1-5 螺旋模型

螺旋模型的优点:\r\n         1、支持用户需求的动态变化。具有良好的可扩充性和可修改性。也支持软件系统的可维护性,每次维护过程只是沿螺旋模型继续多走一两个周期。\r\n         2、原型易于用户和开发人员共同理解需求,还可作为继续开发的基础,并为用户参与所有关键决策提供了方便。\r\n         3、螺旋模型特别强调原型的可扩充性和可修改性,原型的进化贯穿整个软件生存周期,这将有助于目标软件的适应能力。\r\n         4、螺旋模型为项目管理人员及时调整管理决策提供了方便,进而可降低开发风险。

1.4.3 螺旋模型

螺旋模型的缺点和适应场合\r\n缺点:\r\n①如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间;\r\n②使用该模型需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高。\r\n适应场合:\r\n         支持需求不明确、特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型。

1.4.3 螺旋模型

1.4.4 增量模型

软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。\r\n 第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。

1.4.4 增量模型

增量模型的优点:\r\n增加客户对系统的信心;\r\n降低系统失败风险;\r\n提高系统可靠性;\r\n提高了系统的稳定性和可维护性;\r\n增量模型的缺点:\r\n增量粒度难以选择;\r\n确定所有的基本业务服务比较困难 。

1.4.5基于构件的开发模型

基于构件的开发模型是面向对象和原型方法及重用技术的综合。

图1-6 基于面向对象的模型

1.4.6 喷泉模型(Water Fountain Model)

喷泉模型是以面向对象的软件开发技术为基础,以用户需求为动力,以对象来驱动的模型。它克服了瀑布模型不支持软件重用和生存期中多项开发活动集成的局限性,使得软件开发过程具有迭代和无间隙的特性。

1.4.6 喷泉模型

图1-7 喷泉模型

1.5 软件开发方法和工具

1.5.1 软件开发方法\r\n 结构化方法 \r\n 面向对象方法 \r\n\r\n1.5.2 软件工具与开发环境\r\n软件工具分类:\r\n软件开发工具\r\n软件维护工具\r\n软件管理和软件支持工具

1.5.2 软件工具与开发环境

1、软件开发工具\r\n(1)需求分析工具  (2)设计工具\r\n(3)编码与排错工具     (4)测试和验证工具\r\n\r\n2、软件维护工具\r\n(1)版本控制工具  (2)文档分析工具\r\n(3)开发信息库工具     (4)逆向工程工具\r\n(5)再工程工具\r\n3、软件管理和软件支持工具\r\n (1)项目管理工具\r\n (2)配置管理工具\r\n (3)软件评价工具

1.5.2 软件工具与开发环境

软件开发环境:\r\n      软件开发环境是将软件的开发工具系统化、集成化后得到的支持软件产品开发的软件系统。\r\n         软件开发环境由软件工具集和环境集成机制构成,它的目的是利用软件工具支持软件系统开发的各个阶段。

1.5.2 软件工具与开发环境

计算机辅助软件工程:\r\n 支持软件开发全过程的软件系统,称为计算机辅助软件工程CASE(Computer Aided Software Engineering)。\r\n \r\nCASE工具的种类很多,主要有以下9类:\r\n1)支撑类工具(Support Tools) \r\n2)事务系统规划工具(Business Systems Planning Tools) \r\n3)项目管理工具(Project Management Tools) \r\n4)分析和设计工具(Analysis and Design Tools) \r\n5)程序设计工具(Programming Tools)\r\n6)原型建造工具(Prototyping Tools) \r\n7)测试工具(Testing Tools) \r\n8)维护工具(Maintenance Tools) \r\n9)框架工具(Framework Tools)

小结

本章主要介绍了软件工程的一些基本概念和相关知识,包括软件与软件的特点、软件危机、软件工程的定义、软件工程的基本目标和基本原理、软件工程的原则、软件生命周期的概念、软件生命周期模型等等。