软件工程——实践者的研究方法_第1页
软件工程——实践者的研究方法_第2页
软件工程——实践者的研究方法_第3页
软件工程——实践者的研究方法_第4页
软件工程——实践者的研究方法_第5页
已阅读5页,还剩613页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程实践者的研究方法前言第一部分产品和过程第 1 章产品第 2 章过程第二部分软件项目的管理第 3 章项目管理的概念第 4 章软件过程和项目的度量第 5 章软件项目计划第 6 章风险管理第 7 章项目进度安排及跟踪第 8 章软件质量保证第 9 章软件配置管理第三部分传统软件工程方法第 10 章系统工程第 11 章分析概念和原则第 12 章分析建模第 13 章设计概念和原则第 14 章设计方法第 15 章实时系统的设计第 16 章软件测试技术第 17 章软件测试策略第 18 章软件的技术度量第四部分面向对象的软件工程第 19 章面向对象的概念和原则第 20 章面向对象分析第 21 章面向对象设计第 22 章面向对象测试第 23 章面向对象系统的技术度量第五部分软件工程高级课题第 24 章形式化方法第 25 章净室软件工程第 26 章软件复用第 27 章再工程第 28 章客户/服务器软件工程第 29 章计算机辅助软件工程第 30 章未来之路第一部分 产品和过程在本书的这一部分中我们主要讨论什么是工程产品和如何为工程技术提出一个框架的过程。在下面的章节中,我们主要解决下列问题:到底什么是计算机软件?为什么我们不断努力要建造高质量的基于计算机的系统?我们如何对计算机软件的应用领域分类?关于软件仍存在什么样的神话?什么是软件过程?是否存在一般性的方法评价一个过程的质量?软件开发中可以应用什么过程模型?线性过程和迭代过程有何区别?它们的优点和缺点是什么?在软件工程中可以建议什么更高级的过程模型?一旦回答了这些问题,读者就能够更好地理解本书其余部分给出的工程原则的管理和技术方面的知识。第 1 章 产品本书的第 1 版在 80 年代初出版后不久,Business Weekly(商业周刊)杂志在头版给出如下的大标题:“软件:新的驱动力”。编辑们当时并没有意识到他们的预见是多么的正确。那时,大多数人对软件还是一无所知。大软件公司,如微软公司,还不存在;拥有 15000 平方英尺专门出售包装好的软件的计算机超市闻所未闻;在电视上为计算机操作系统做 60 秒钟商业广告的想法是可笑的;而互联网仅为个别研究者和高等学校学生所知。但是,在不到 20 年的时间里,所有这些(甚至更多)已经成为现实。计算机软件已经成为一种驱动力。它是进行商业决策的引擎;它是现代科学研究和工程问题解决的基础;它也是区分现代产品和服务的关键因素。它在各种类型的系统中应用,如交通、医药、通讯、军事、产业化过程、娱乐、办公难以穷举。软件在现代社会中的确是必不可少的。而且当我们进入 21 世纪,软件将成为从基础教育到基因工程的所有各领域新进展的驱动器。所有这一切已经改变了软件的常见概念。计算机软件是无所不在的,人们把软件看作是生活中现实的技术。在很多情况下,人们把他们的工作、他们的舒适、他们的安全、他们的娱乐、他们的决策、甚至他们的整个生活都依赖于计算机软件。软件千万可不能出错。本书介绍的若干技术是那些想要建造正确的计算机软件的人们需要用到的。这些技术包括一个过程,一组方法和一系列工具,我们称之为软件工程。1.1 软件的发展 今天,软件担任着双重角色。它是一种产品,同时又是开发和运行产品的载体。作为一种产品,它表达了由计算机硬件体现的计算潜能。不管它是驻留在蜂窝电话中,还是操作在主机上,软件就是一个信息转换器产生、管理、获取、修改、显示或转换信息,这些信息可以很简单,如一个单个的位(bit),或很复杂,如多媒体仿真信息。作为开发运行产品的载体,软件是计算机控制(操作系统)的基础、信息通信(网络)的基础,也是创建和控制其他程序(软件工具和环境)的基础。许多人相信 21 世纪最重要的产品是信息,软件充分体现了这一观点。它处理个人数据(如个人的金融事务),使得这些数据在局部范围中更为有用;它管理商业信息增强了商业竞争力;它提供了通往全球信息网络(如 Internet)的途径;它也提供了以各种形式获取信息的手段。计算机软件的角色在 20 世纪后半叶发生了很大的变化。硬件性能的极大提高,计算机体系结构的不断变化,内存和硬盘容量的快速增加,以及大量输入输出设备的多种选择,均促进了更为成熟和更为复杂的基于计算机的软件系统的出现。如果一个系统是成功的,那么这种成熟性和复杂性能够产生出奇迹般的结果,但是它们也给建造这些复杂系统的人员带来很多的问题。在 70 年代和 80 年代出版的受欢迎的书对于计算机、软件和它们对我们文化的影响等方面提供了有用的历史的视角。OsborneOSB79称之为一次“新的工业革命”。TofflerTOF80称微电子的发展是人类历史上的“第三次浪潮”,NaisbittNAI82则预言了从工业社会向“信息社会”的转变。Feigenbaum和 McCorduckFEI83认为由计算机控制的信息和知识将是 20 世纪中表现能力的焦点,StollSTO89则提出由网络和软件产生的“电子社会”将是全球知识交换的关键。进入 90 年代,TofflerTOF90描述了“权利的转移”,因为计算机和软件导致了“知识的民主化”,因而旧的权利结构(政府,教育,工业,经济,及军事)将要瓦解。YourdonYOU92担心美国公司在软件相关的业务中会失去竞争力,并预言“美国程序员的衰落和下降”。Hammer 和 ChampyHAM93提出信息技术将在“公司的再工程”中起到很关键的作用。在 90 年代中期,计算机和软件的流行产生了大量“新劳工运动”的书籍(例如:由 James Brook 和Iain Boal 编辑的“抵制虚拟的生活”,以及 Stephen Talbot 写的“未来不是计算”)。这些作者把计算机看成是魔鬼,强调了其合法性,而忽略了已被人们意识到的巨大的利益LEV95问题。在计算机发展的早期阶段,大多数人把软件看成是不需预先计划的事情。计算机编程很简单,没有什么系统化的方法。软件的开发没有任何管理,一旦计划延迟了或成本提高了,程序员才开始手忙脚乱地弥补,而他们的努力一般情况下也会取得成功。在通用的硬件已经非常普遍的时候,软件却相反,对每一类应用均需自行再设计,应用范围很有限。软件产品还在婴儿阶段,大多数软件均是由使用它们的人员或组织自己开发的,如你写软件,使其运行,如果它有问题,你负责改好。工作的可变性很低,管理者必须得到保证:一旦发生了错误你必须在那里。因为这种个人化的软件环境,设计往往仅是人们头脑中的一种模糊想法,而文档就根本不存在。在早期,我们了解了很多关于计算机系统的实现,但对于计算机系统工程几乎一无所知。但是公平地讲,我们应该感谢这个时期开发的许多卓越的计算机系统,其中不少一直到今天还在使用,并继续发挥着巨大的作用。计算机系统发展的第二阶段跨越了从 60 年代中期到 70 年代末期的十余年(如图 11)。多道程序设计、多用户系统引入了人机交互的新概念。交互技术打开了计算机应用的新世界,以及硬件和软件配合的新层次。实时系统能够从多个源收集、分析和转换数据,从而使得进程的控制和输出的产生以毫秒而不是分钟来进行。在线存储的发展导致了第一代数据库管理系统的出现。第二阶段还有一个特点就是软件产品的使用和“软件作坊”的出现。软件被开发,使得它们可以在很宽的范围中应用。主机和微机上的程序能够有数百甚至上千的用户。来自工业界、政府和学术界的企业家们纷纷开始开发各类软件包,并赚了大笔钱财。早期 第二阶段 第三阶段 第四阶段面向批处理 多用户 分布式系统 强大的桌面系统有限的分布 实时 嵌入“智能” 面向对象技术自定义软件 数据库 低成本硬件 专家系统软件产品 消费者的影响 人工神经网络并行计算网络计算机随着计算机系统的增多,计算机软件库开始扩展。内部开发的项目产生了上万行的源程序,从外面购买的软件产品加上几千行新代码就可以了。这时,一团黑云出现在地平线上,当发现错误时需要纠正所有这些程序(所有这些源代码);当用户需求发生变化时需要修改;当硬件环境更新时需要适应。这些活动统称为软件维护。在软件维护上所花费的精力开始以惊人的速度消耗资源。更糟糕的是,许多程序的个人化特性使得它们根本不能维护。“软件危机”出现了。计算机系统发展的第三阶段始于 70 年代中期并跨越了整整十年。分布式系统多台计算机,每一台都在同时执行某些功能,并与其他计算机通讯极大地提高了计算机系统的复杂性。广域网和局域网、高带宽数字通讯以及对“即时”数据访问需求的增加都对软件开发者提出了更高的要求。然而,软件仍然继续应用于工业界和学术界,个人应用很少。第三阶段的主要特点是微处理器的出现和广泛应用。微处理器孕育了一系列的智能产品从汽车到微波炉,从工业机器人到血液诊断设备但那一个也没有个人计算机那么重要,在不到十年时间里,计算机真正成为大众化的东西。计算机系统发展的第四个阶段已经不再是着重于单台计算机和计算机程序,而是面向计算机和软件的综合影响。由复杂的操作系统控制的强大的桌面机,广域和局域网络,配合以先进的软件应用已成为标准。计算机体系结构迅速地从集中的主机环境转变为分布的客户机/服务器环境。世界范围的信息网提供了一个基本结构,使得学者和政治家可以同样考虑“信息高速公路”和“网际空间连通”的问题。事实上,Internet 可以看作是能够被单个用户访问的“软件”。软件产业在世界经济中不再是无足轻重的。由产业巨子如微软做的一个决定可能会带来成百上千亿美元的风险。随着第四阶段的进展,一些新技术开始涌现。面向对象技术(本书第四部分)在许多领域中迅速取代了传统软件开发方法。虽然关于“第五代”计算机的预言仍是一个未知数,但是软件开发的“第四代技术”确实改变了软件界开发计算机程序的方式。专家系统和人工智能软件终于从实验室里走了出来,进入了实际应用,解决了现实世界中的大量问题。结合模糊逻辑应用的人工神经网络软件揭示了模式识别和类似人的信息处理能力的可能性。虚拟现实和多媒体系统使得与最终用户的通讯可以采用完全不同的方法。“遗传算法”BEG95则提供了可以驻留于大型并行生物计算机上的软件的潜在可能性。但是,一系列软件相关的问题在计算机系统的整个发展过程中一直存在着,而且这些问题还会继续恶化:1.硬件的发展一直超过软件,使得我们建造的软件难以发挥硬件的所有潜能。2.我们建造新程序的能力远远不能满足人们对新程序的需求,同时我们开发新程序的速度也不能满足商业和市场的要求。3.计算机的普遍使用已使得社会越来越依赖于可靠的软件。如果软件失败,会造成巨大的经济损失,甚至有可能给人类带来灾难。4.我们一直在不断努力建造具有高可靠性和高质量的计算机软件。5.拙劣的设计和资源的缺乏使得我们难以支持和增强已有软件。为了解决这些问题,整个产业界开始采用了软件工程实践。1.1.1 产业的观点在计算机发展的早期,计算机系统是采用面向硬件的管理方法来开发的。项目管理者着重于硬件,因为它是系统开发中最大的预算项。为了控制硬件成本,管理者建立了规范的控制和技术的标准。他们要求在真正开始建造系统之前,进行详尽的分析和设计,他们度量过程,以发现哪里还可以进一步改进,他们坚持质量控制和质量保证,他们设立规程,以管理变化。简言之,他们应用了控制、方法和工具,我们可以称之为硬件工程。但遗憾的是软件只不过是事后才考虑的事情。在早期,程序设计被看作是一门“艺术”。几乎没有规范化的方法,也没有人使用它们。程序员往往从试验和错误中积累经验。建造计算机软件的专业性和挑战性,使其披上了一种神密的面纱,管理者们很难了解它。软件世界真是完全无序这是一个开发者的为所欲为的时代。今天,计算机系统开发成本的分配发生了戏剧性的变化。软件,而不是硬件,是最大的成本项。在近二十年里,管理者和很多开发人员在不断地问以下的问题:为什么需要那么长时间才能结束开发?为什么成本如此之高?为什么我们不能在把软件交给客户之前就发现所有的错误?为什么在软件开发过程中我们难以度量其进展?这些问题以及其他许多问题都表明了对软件及其开发的方式是必须关注了这种关注最终导致了软件工程实践的出现。1.1.2 老化的软件工厂在 50 和 60 年代,许多评论家批评美国的钢铁产业缺少对其工厂的投入。工厂开始恶化,现代化的方法很少被采纳,最终产品的质量和成本难以容忍,外来的竞争开始赢得市场份额。这些企业在管理中确定把主要的投资投入到其主营业务中,以保持竞争力。随着时间的推移,美国的钢铁产业蒙受了巨大损失,大量市场份额被外来竞争者占领这些企业拥有新工厂,采用更为现代化的技术,并且得到政府的资助,使得他们极具价格优势。在那个时期,羽翼未丰的计算机产业中的很多人都以蔑视的态度评价钢铁产业,“如果它们不愿在自己的业务上投入,那当然会失去市场份额”。这些话现在轮到说我们自己了。听上去很戏剧化,今天的软件产业就像五、六十年代的钢铁产业,无论大公司还是小公司,都有一个老化的“软件工厂”有成千上万的重要的基于软件的应用程序急待更新: 20 年前开发的信息系统应用程序经过了几十次的修改,已经真正不可维护了。即使是最小的修改也会引起整个系统失败。一些用于生成关键设计数据的工程应用程序,由于不断的修改和老化,已经没有人真正了解其内部结构。嵌入式系统(有成千上万的这类应用程序,其中包括核电站控制、航空调度和工厂管理)表现出奇怪的有时甚至是无法解释的行为,但又不能不用它们,因为目前还没有其他方法可以替代它们。有问题就“打补丁”,并给这些应用程序一个时髦的界面,仅仅如此是不够的。软件工厂的许多构件需要再生产,否则它们就不再具有竞争力了。但不幸的是,许多企业的管理者并不愿投入资源去进行再生产,他们辩解:“这些应用程序仍能工作,投入资源去使得它们更好是不经济的”。1.1.3 软件的竞争 许多年来,大、小公司雇佣的软件开发人员仅仅在公司内部服务,而且他们也愿意这样。因为每一个计算机程序都是自行开发的,这些“自家”的软件人员控制着成本、进度和质量。今天,所有这一切都改变了。软件目前是一个竞争很强的行业。曾经要自行开发的软件现在可以在货架上买到,许多公司过去雇佣了大量的程序员开发特定的软件,现在它们大部分的软件工作已交给第三方厂商去完成MIN95。成本、进度和质量将是未来若干年中导致软件激烈竞争的主要因素。美国和西欧有很成熟的软件产业,而远东(如韩国,新加坡)、亚洲(如印度、中国)和东欧的一些国家拥有大量的有天份、受过良好教育且相对较低廉的专门人才ECO94。这种压力导致了必须迅速采用现代化的软件工程实践的需要,同时软件开发也是一个必须认真考虑的因素,因为世界范围的软件从业人员都在追求尽量少的开发费用。在关于信息服务对美国及世界的影响的论著中,Feigenbaum 和McCorduckFEI83作了如下陈述:知识就是力量,而计算机是这种力量的倍增器美国的计算机产业是创新的、充满活力的和成功的。在某种程度上,它是一个理想的产业。它通过转化知识分子的脑力劳动来产生价值,而几乎不需要什么能源和原材料。今天,我们在这个最重要的现代技术上领导着世界的想法和市场,但明天会怎样哪?是的,明天会怎样哪?计算机硬件已经成为一种商品,可从很多渠道得到。但软件仍然是美国保持着“创新的、充满活力的和成功的”一个产业。但我们还会继续保持领先吗?至少答案的一部分就在这里:我们将采用什么样的方法去建造下一代计算机系统的软件。1.2 软件在 1970 年,只有不到 1的人能够比较准确地描述出什么是“计算机软件”。而现在,大多数专业人士和许多业外公众都认为他们了解了什么是软件。但他们真的了解吗?关于软件,教科书上一般是如下定义的:软件是(1)能够完成预定功能和性能的可执行的指令(计算机程序);(2)使得程序能够适当地操作信息的数据结构;(3)描述程序的操作和使用的文档。毫无疑问,也可以给出其他更详细的定义。但我们不只是需要一个形式上的定义。1.2.1 软件特征 要理解软件的含义(以及对软件工程有一个全面的理解),首先要了解软件的特征是很重要的,据此能够明白软件与人类建造的其他事物之间的区别。当建造硬件时,人的创造性的过程(分析、设计、建造、测试)能够完全转换成物理的形式。如果我们建造一个新的计算机,初始的草图、正式的设计图纸和面板的原型一步步演化成为一个物理的产品(VLSI 芯片、线路板、电源等等)。而软件是逻辑的而不是物理的产品。因此,软件具有与硬件完全不同的特征:1.软件是由开发或工程化而形成的,而不是传统意义上的制造产生的。虽然在软件开发和硬件制造之间有一些相似之处,但两者本质上是不同的。这两者,都可以通过良好的设计获得高质量,但硬件在制造过程中可能会引入质量问题,这种情况对于软件而言几乎不存在(或是很容易改正)。软件成为产品之后,其制造只是简单的拷贝而已;两者都依赖于人,但参与的人和完成的工作之间的关系不同;两者都是建造一个产品,但方法不同(见第 3 章)。软件成本集中于开发上,这意味着软件项目不能象硬件制造项目那样来管理。在 80 年代中期,“软件工厂”的概念被正式引入MAN84、YAJ84。应该注意到这个术语并没有把硬件制造和软件开发认为是等价的。而是通过软件工厂这个概念提出了软件开发中应该使用自动化工具(见第 5 部分)。2.软件不会“磨损”。图 12 刻划了随着时间的改变硬件故障率的变化曲线图。其关系,常常被称作“浴缸曲线”,表明了硬件在其生命初期有较高的故障率(这些故障主要是由于设计或制造的缺陷);这些缺陷修正之后,故障率在一段时间中会降到一个稳定的曲线上(很低)。随着时间的改变,故障率又提升了,这是因为硬件构件由于种种原因会不断受到损害,例如灰尘、振动、滥用、温度的急剧变化以及其他许多环境问题。简单讲,硬件已经开始磨损了。软件并不受到这些引起硬件磨损的环境因素的影响。因此,理论上讲,软件的故障率曲线呈现出如图 13 所示的形式。隐藏的错误会引起程序在其生命初期具有较高的故障率。但这些错误改正之后(我们假设理想情况下改正过程中并不引入其他错误),曲线就趋于平稳,如图所示。图 13 给出了实际软件故障模型的一个总的简化图(第 8 章将给出更多信息)。其意义很清楚软件不会磨损,不过它会退化。这个说法表面上似乎是矛盾的,我们可以通过图 14 来解释清楚。在其生命期中,软件会经历修改(维护),随着这些修改,有可能会引入新的错误,使得故障率曲线呈现为图 14 所示的锯齿形。在该曲线能够恢复到原来的稳定状态的故障率之前,又需要新的修改,又引起一个新的锯齿。慢慢地,最小故障率就开始提高了软件的退化由于修改而发生了。关于磨损的另一个侧面也表明了硬件和软件之间的不同。当一个硬件构件磨损时,可以用另外一个备用零件替换它,但对于软件就没有备用零件可以替换了。每一个软件故障都表明了设计或是将设计转换成机器可执行代码的过程中存在错误。因此,软件维护要比硬件维护复杂得多。3.大多数软件是自定的,而不是通过已有的构件组装而来的。我们先看一看一个基于微处理器的控制硬件是如何设计和建造出来的。设计工程师画一个简单的数字电路图,做一些基本的分析以保证可以实现预定的功能,然后查阅所需的数字零件的目录。每一个集成电路(通常称为“IC”或“芯片”)都有一个零件编号、固定的功能、定义好的接口和一组标准的集成指南。每一个选定的零件,都可以在货架上买到。而软件设计者就没有上述这种荣幸了。几乎没有软件构件。有可能在货架上买到的软件,它本身就是一个完整的软件,而不能作为构件再组装成新的程序 。虽然关于“软件复用”已有大量论著,但这种概念的成功实现还只是刚刚开始。1.2.2 软件构件 随着工程化的发展,大量标准的设计构件产生了。标准螺丝和货架上的集成电路芯片仅仅是成千上万的标准构件中的两种,机械和电子工程师在设计新系统时会用到它们。这些可复用构件的使用使得工程师们能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论