当前位置:文档之家› 第一章 概论

第一章 概论

软件工程 (103J02A )

Software Engineering

第一章 概论

一一、、 软软件件工工程程的的诞诞生生

那是1968年,北大西洋公约组织(NATO )的计算机工作者在前联邦德国召开国际软件研讨会,会议的主题是探讨摆脱“软件危机”的途径和方法,在这次会议上正式提出并使用了“软件工程”这一名词,从此一门新兴的工程学科——“软件工程”就此诞生了。

二二、、 软软件件危危机机

这么说来“软件工程”是和“软件危机”纠缠在一起的,那麽什么是“软件危机”呢?

计算机技术是在上世纪七十年代开始迅猛发展起来的,这种“迅猛”真可谓“迅雷不及掩耳”,人类到今天恐怕已完全离不开计算机了。要注意的是这种发展实际上是指计算机硬件的发展,软件可没有这份荣耀。而计算机硬件的发展主要表现在集成电路的集成度的迅速提高(电子管,晶体管,小、中、大、超大规模集成电路……)Intel 公司的戈登●摩尔用他的“摩尔定律”描述了计算机芯片集成度发展的轨迹:每过一年半,计算机行业就将芯片上的晶体管数翻一番,而价格却下降一番。(有一天硅芯片技术达到物理极限时,碳纳米管将会取而代之,赋予摩尔定律新的生命。1991年NEC 发现

碳纳米管不久,IBM 单分子电路问世,这标志着人类“向纳米微处理器迈进”)这是因为芯片的生产技术提高了,产品的合格率也随之提高,价格也会自然地降下来:现在我们使用的电脑,所用芯片若含有一千万个晶体管,其价格低于一千万个订书钉;若豪华汽车也这么降价的话,最好的汽车至今也不会超过一块人民币,这似乎难以想象,但这毕竟是事实。计算机硬件的发展创造了人类文明史上前所未有的奇迹,至今没有任何技术领域能够和它媲美! 软件的发展又怎么样呢?虽然软件技术也有了长足的进步,但软件的生产率(以每个人-年或人-月交付的源程序的数量计)仅以每年4%到7%的速度在提高。这又怎能和硬件发展的速度相比呢?事实上,占计算机系统费用80%以上的软件已严重制约了计算机系统的发展,成了计算机发展的绊脚石。大家不难想像。硬件是大规模工业化生产,而借以创造人类最先进科学技术成就的软件技术基本上停留在手工作业的落后状态,软件作业仍在沿用四、五十年以前的“古老”模式的语言,在程序纸上一格格地爬行——这就是一切软件问题的症结所在。实践证明:对一切传统的软件开发模式的完善、改良的努力,都无法从根本上改变当前软件的落后状态,软件技术的发展已到了一个关键时期,一场彻底的变革势在必行。

人们把计计算算机机软软件件开开发发和和软软件件维维护护过过程程中中所所遇遇到到的的一一系系列列严严重重问问题题统统称称为为““软软件件危危机机””。。概括地说,软件危机包含两方面的问题:一是如何开发软件,怎样满足人们对软件日益增长的需求?二是如何维护软件,使它们持久地满足人们的要求。

[[注注]]张张海海藩藩开开始始扯扯蛋蛋::软软件件危危机机的的典典型型表表现现、、产产生生软软件件危危机机的的原原因因、、消消除除软软件件危危机机的的途途径径…………

[[注注]]

11..日日前前的的““软软件件工工程程””技技术术造造成成这这些些现现象象和和发发生生,,这这反反而而是是充充分分证证明明了了其其不不成成熟熟;;

22..用用不不太太恰恰当当的的方方法法去去完完成成一一件件不不能能用用传传统统的的工工程程方方法法来来进进行行的的工工作作,,必必然然导导致致难难于于自自圆圆其其说说、、出出现现各各种种自自相相矛矛盾盾。。

三三、、 软软件件

33..11定定义义

(1)ISO(International Standards Organization):

包含与数据处理系统操作有关的程序、规程、规则以及相关文档的智力创作称为软件(计算机)。

文档是描述程序开发过程的,是智力创作的真实记录,是创作活动的历史档案和结晶。

(2)中华人民共和国《计算机软件保护条例》: 计算机软件(以下简称软件),是指计算机程序及其有关文档。

计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装臵执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。

文档,是指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等。 [注]两者的区别:

ISO :文档是针对整个软件开发过程的,是一种管理、控制的重要手段——文档描述的是“过程”;

条例:既然文档是描述程序本身的,理应从属于程序,而不是对应软件的开发过程——软件基本上就是程序——文档描述的是“结果”——《程序员保护条例》

(3)软件的描述性定义:

软软件件由由计计算算机机程程序序,,数数据据结结构构和和文文档档组组成成。。

计算机程序执行特定的功能;数据结构是程序运行所需的数据;文档是描述程序开发、使用和维护的资料。

33..22软软件件的的特特征征

(1)抽象性:软件是计算机系统的逻辑实体,而不是物理实体,我们可以把它存储在某种介质上,但却无法看到它,因而具有抽象性。(通过观察、分析、思考、判断等,才能了解它的功能和性能)

(2)非生产性:软件是在人的思维过程中生产出来的,其“生产”过程具有不可见性,不能按传统的生产含义来理解:一是软件的质量由设计决定;二是软件的大批量生产几乎不要成本。

(3)无损性:软件在长期的使用过程中不会磨损、老化、用旧。

(4)相关性:软件的开发与运行与硬件相关,即软件依赖于硬件所提供的条件。为了消除这种依赖性,在软件开发中提出了软件移植的问题,并把“可移植性”作为衡量软件质量的因素之一。

[[注注]]软件和硬件的相关性,从本质上来说是和计算机系统的CPU ——CPU 支持的体系结构CISC 或RISC 相关。

注]]计算机自1946年问世以来,经历了五代和最有意义的两项变革:[[注

1)体系结构从复杂指令集(CISC)过度到精简指令集(RISC);

2)高端系统和应用从32位走向64位。

(5)定制性:大多数软件是定做的,而不是用已有的构件组装而来的。新方法:软件复用技术、自动生成技术等。

(6)集中性:软件的生产成本集中在计划与研制过程中。

33..33软软件件的的形形态态

(1)计算机不可执行的部分:编码语言、文档

(2)计算机可执行的部分:机器指令

33..44软软件件的的类类别别

难以作出科学的分类,但鉴于不同类型的软件,对其进行开发和维护有着不同的要求和方法,因此需要给出划分。既然找不到一个统一的严格的分类标准,我们从不同的方面去分类还是比较符合实际情况的。

3.4.1 按软件的功能分类(《GB/T 13702-92 计算机软件分类与代码》)(1)系统软件:1)和硬件有频繁的相互作用;2)和多个用户有关系;3)协调资源的共享;4)完成复杂的进程管理,以及复杂的数据结构处理。能使计算机系统的各个部分、相关的软件和数据协调、高效地工作。

※系统软件是计算机系统必不可少的组成部分

(2)支撑软件:是协助用户开发软件的软件——开发工具——软件工具,帮助程序人员开发软件产品,帮助管理人员控制开发进程。

(3)应用软件:帮助人们完成特定应用领域工作的软件。

3.4.2 按软件规模分类

E.Yourdon(约当)曾给出一种“软件规模分类”:微型、小型、中型、大型、甚大型、极大型。

3.4.3 按软件工作方式分类

(1)实时处理软件:在处理对象发生不断变化的活动中,能随时配合完成数据采集、分析、控制的软件,其处理时间有严格的限定,一般在1微秒到1分钟之间。

(2)交互式软件:是人机交互的软件,是用户和计算机系统对话的接口,一般来说时间没有规定。

(3)分时软件:按固定的时间段,轮流处理多个任务,一般具有较强的交互性。

(4)批处理软件:把多个任务以成批的方式送入机器,并按一定的顺序自动处理。该类软件具有很强的处理能力。

3.4.4 按软件服务对象的范围分类

3.4.5 按软件使用的频度分类

3.4.6按软件失效的影响分类

四四、、 软软件件工工程程的的概概念念

定义之多,无聊之极。

4.1定义

(1)鲍姆(B.W.Boehm ,P7):运用现代科学技术知识来设计并构造计算机程序,及为开发、运行、维护这些程序所必需的相关文件资料。 (2)IEEE(Institute of Electrical and Electronics Engineers 美国电气和电子工程师协会是一个国际性的电子技术与信息科学工程师的协会,是世界上最大的专业技术组织之一,拥有来自175个国家的36万会员。):软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工工程程应用于软件;②研究①中提到的途径。(P5)

(3)教材P5

各种定义,其中心思想是把把软软件件当当作作一一种种工工业业产产品品,“采采用用工工程程学学的的原原理理来来管管理理和和从从事事软软件件的的开开发发和和维维护护,,称称为为软软件件工工程程。。”(工程学:系统化、规范化、数量化)(软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法进行软件开发和维护的学科)

40多年来人们围绕实现软件优质高产这个目标,从技术到管理做了大量努力,对“软件工程”有了初步的认识,主要内容有:软件开发方法学,软件工程工具和环境,软件工程规范和标准,软件工程管理以及有关理论。

[注]扯蛋:软件工程的本质特征(P6);软件工程的基本原理(P7)。

※不要迷信姐,姐只是一个神话。

五五、、 软软件件质质量量的的基基本本概概念念

既然我们是要做“软件”这样一种产品,当然我们首先要知道人们是如何衡量软件的质量的,不知道一种产品的质量要求就要去做它,是否很荒唐呢?

产品质量是产品的生命。运行一直都是完好的程序是否一定是正确的?在经费预算范围内按期完成,并能正确执行用户规定的功能的软件系统,用户是否一定满意呢?回答都是否定的!由于软件质量问题引发的事故是屡见不鲜:

(1) 塞兹韦尔核电站:“主要保护系统”几乎一半代码未能通过测试 注:1993年距离伦敦90英里的塞兹韦尔核电站正式投入运行,但是工作人员很快就发现核电站的反应堆内温度控制失灵,这意味着欧洲人口最为稠密的地区面临巨大危险。事后查明,在反应堆的“主要保护系统”中几乎有一半代码未能通过测试。

(2) 爱国者导弹:“雷达跟踪系统”软件故障

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

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

(4)IBM360 操作系统:

注:在我们业内最为突出的例子是IBM在1963年至1966年开发

IBM360操作系统:这一项目花了5000人-年的工作量,最多时有1000人投入开发工作,写了近一百万行的源程序,尽管投入了如此多的人力和物力,得到的结果却非常的糟糕。据统计这个操作系统平均每3个月就要发行新的版本,而新版本都是从前一版本中至少找出1000个程序错误而修正的结果。可以想象,这样的软件质量糟到什么地步。

事后这个项目的负责人F.P.Brooks于1972年发表了著名的“神秘的人-月”一书,总结了他在组织IBM360操作系统开发过程中的沉痛教训。也由于这本书,IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。

软件质量成了困扰人们的恶兽,1987年F.P.Brooks又在IEEE computer 上发表了权威性文章“没有银弹”(No Silver Bullet)(该文其实最早是1986年发表在IFIPS(International Federation for Information Processing 国际信息处理联合会)会议上的论文《没有银

弹:软件工程根本的和次要的问题》),F.P.Brooks认为,软件项目看起来并不复杂,但很可能成为一个可怕的狼人,尽管人们经过十几年来的努力,但并没有找到能使软件问题迎刃而解的银弹。

注:什么是银弹?西方民间传说:一种可怕的狼人常常向人类进攻,人们受伤以后,性格完全改变,特别是把自己的亲人当成了仇人。无奈之中,人们发现只有银弹才能制服狼人,拯救人类。

可惜的是至今人们也未能找到这样的“银弹”,人们对软件这个抽象的实体也尚未完全掌握它的特性,因此,解决如何把握它的质量问题具有相当的难度。

体会:良好的软件质量管理是获得高质量软件的重要保证!

问题:如何来衡量一个软件的质量?或者说,如何来确定、设计、实施和评价所期望的软件质量?

5.1软件质量的定义

(1)ANSI/IEEE:软件质量定义为“与软件产品满足规定的和隐含的需求能力有关的特征和特性的全体”

具体来说:1)软件产品中能满足给定需求的性质和特性的总体;

2)软件具有所期望的各种属性的组合程度。

(2)国标GB/T 12504-1990《计算机软件质量保证计划规范》:软件质量是指软件产品中能满足给定需求的各种特性的总和。

5.2软件质量特性

国际标准化组织(ISO)和国际电工委员会(IEC)于1991年发布了关于软件质量的标准:ISO/IEC 9126-1991,我国于1996年将其等同采用,成为国家标准:《GB/T 16260-1996 软件产品评价质量特性及其使用指南》;2006年又根据其修改作了更改,该标准已被分成4个部分:

《GB/T 16260.1-2006 软件工程产品质量第1部分:质量模型》

《GB/T 16260.2-2006 软件工程产品质量第2部分:外部度量》

《GB/T 16260.3-2006 软件工程产品质量第3部分:内部度量》

《GB/T 16260.4-2006 软件工程产品质量第4部分:使用质量的度量》

在此标准中将软件质量属性划分为六个特性(功能性、可靠性、易用性、效率、维护性和可移植性),并进一步细分为22个子特性。这些子特性可用内部度量或者外部度量来测量。具体请见国家标准。

(1)功能性:当软件在指定条件下使用时,软件产品提供满足明确和隐含要求的功能的能力。

(2)可靠性:在指定条件下使用时,软件产品维持规定的性能级别的能力。(3)易用性:在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力。

(4)效率:在规定条件下,相对于所用资源的数量,软件产品可提供适当性能的能力。

(5)维护性:软件产品可被修改的能力。修改可能包括纠正、改进或软件对环境、需求和功能规格说明变化的适应。

(6)可移植性:软件产品从一种环境迁移到另外一种环境的能力。

[注]

1)这六个特性的定义是基于用户的观点——面向用户的观点——面向管理的观点,且是定性描述的;

2)软件质量子特性:为了实现规定的软件质量特性,必须把这些质量特性转化为软件内部的结构特性——面向技术的观点,标准中将六个软件质量特性进一步细分为22个子特性,这些子特性进一步刻划了软件质量特性,并且有助于描述软件质量特性之间的关系,只有这样我们才可能在软件开发中切实落实软件质量。

3)软件质量度量体系:这些子特性也只是软件质量的定性描述,在实际测量某一软件质量时,必须对这些子特性进行定量评测,也就是要引进度量(metric)标准进行定量测量。

内部度量可用于开发阶段的非执行软件产品(例如标书、需求定义、设计规格说明或源代码等)。内部度量为用户提供了测量中间可交付项的质量的能力,从而可以预测最终产品的质量。这样就可以使用户尽可能在开发生存周期的早期察觉质量问题,并采取纠正措施。

外部度量可以通过测量该软件产品作为其一部分的系统行为来测量软件产品的质量。外部度量只能在生存周期过程中的测试阶段和任何运行阶段使用。在所属系统环境下运行该软件产品即可获得这样的测量。

4)评价软件质量

标准规定了软件质量的确定、设计、实施和评审等按三步进行:

(1)定义质量需求

质量需求包含两方面的内容:一是问题规定或隐含的需求;二是标

准和其它技术要求。

(2)评价准备

包括:选择质量度量,定义等级,定义评价准则。

(3)评价过程

分为三步:测量、评级、评估。

5)软件工程项目的基本目标:这些特性并非都是互补的,更可能是互斥的。从大的方面看,组织实施一个软件工程项目的成功,指得是达到以下几个主要目标:(1)低成本;(2)满足功能要求;(3)高性能;(4)易移植;(5)低维护费用(易维护)。这些目标都达到理想的程度是根本不可能的,因为各目标并非都是互补的,更可能是互斥的。因此,实施软件开发项目就是力图在各个目标(特性)的冲突中取得一定程度的平衡。综合考虑,取得平衡。

六六、、 软软件件工工程程方方法法学学((软软件件开开发发方方法法学学))

6.1软件开发方法学

几乎任何一门学科都有自己所谓的方法学(或者称方法论)。什么

是方法学呢?概括地说,方方法法学学是是指指与与完完成成任任务务所所采采取取的的途途径径有有关

关的的系系统统性性主主张张。。方法学应包括:工作概念、技术途径、以及规程和规则等方面的内容,完整的方法学还应包括具体的技术与工具等方面的内容。

软软件件工工程程方方法法学学就就是是要要从从技技术术和和管管理理上上提提供供如如何何去去设设计计和和维维护护软软件件。。

目前所谓的软件开发方法已不下几百种,甚至有些鸟说有几千种之多。从本质(逻辑)上来说,目前各种所谓的软件开发方法学不外乎三种(类):

相关主题
文本预览
相关文档 最新文档