软件工程项目的开发方法概述.docx

上传人:小飞机 文档编号:1716548 上传时间:2022-12-15 格式:DOCX 页数:622 大小:877.76KB
返回 下载 相关 举报
软件工程项目的开发方法概述.docx_第1页
第1页 / 共622页
软件工程项目的开发方法概述.docx_第2页
第2页 / 共622页
软件工程项目的开发方法概述.docx_第3页
第3页 / 共622页
软件工程项目的开发方法概述.docx_第4页
第4页 / 共622页
软件工程项目的开发方法概述.docx_第5页
第5页 / 共622页
点击查看更多>>
资源描述

《软件工程项目的开发方法概述.docx》由会员分享,可在线阅读,更多相关《软件工程项目的开发方法概述.docx(622页珍藏版)》请在三一办公上搜索。

1、软件工程实践者的研究方法作者简介译者序前言第一部分产品和过程第1章产品第2章过程第二部分软件项目的管理第3章项目管理的概念第4章软件过程和项目的度量第5章软件项目计划第6章风险管理第7章项目进度安排及跟踪第8章软件质量保证第9章软件配置管理第三部分传统软件工程方法第10章系统工程第11章分析概念和原则第12章分析建模第13章设计概念和原则第14章设计方法第15章实时系统的设计第16章软件测试技术第17章软件测试策略第18章软件的技术度量第四部分面向对象的软件工程第19章面向对象的概念和原则第20章面向对象分析第21章面向对象设计第22章面向对象测试第23章面向对象系统的技术度量第五部分软件工程

2、高级课题第24章形式化方法第25章净室软件工程第26章软件复用第27章再工程第28章客户/服务器软件工程第29章计算机辅助软件工程第30章未来之路作者简介Roger S.Pressman是软件工程领域国际知名的咨询专家和作者。他以优等成绩从Connecticut大学获得学士学位,从Bridgeport大学获得硕士学位,从Connecticut大学获得工学博士学位。已有超过25年的产业经验。主要从事工程产品软件和系统软件的开发技术工作和管理工作。作为产业的实践者和管理者,Pressman博士主要从事的是航空航天应用中高级工程和制造的CAD/CAM系统的开发,他也从事科学及系统程序设计方面的工作。

3、除了他的产业经验之外,Pressman博士还是Bridgeport大学计算机工程系的兼职副教授和该大学的计算机辅助设计和制造中心的主任。Pressman博士是R.S.Pressman Associates,Inc公司的总裁,这是一家专门从事软件工程方法和培训的咨询公司。他是公司主要的咨询专家,专门负责帮助其他公司建立有效的软件工程方法。他开发了RSPA软件工程评估方法,该方法采用独特的数量和质量分析混合的方式,帮助客户评估他们软件工程实践的当前状况。除了给500多个客户提供咨询服务外,R.S.Pressman Associates,Inc公司还提供大量的软件工程培训及过程改善服务。公司开发了一

4、个艺术式的录像课程“Essential SoftwareEngineering”,它全面地讲述了产业界关于这一主题的内容。另一个产品“Process Advisor”是指导企业软件工程改进的自测系统。Pressman博士还在产业期刊上发表了许多技术论文,是企业期刊的特约撰稿人并出版了6本书。除了本书外,还有:“Making Software Engineering Happen(Prentice Hall出版公司出版)”,这是第一本涉及到改善软件工程实施过程中的主要管理问题的书籍;“Software Shock(DorsetHouse出版公司出版)”,该书叙述了软件及其对商业和社会的影响;“A

5、 Managers Guide toSoftware Engineering(McGrawHill出版公司出版)”,该书使用独特的QA方式表示了创立和理解技术的管理指南。Pressman博士是杂志American Programmer(美国程序员)和IEEESoftware(IEEE软件)的编委,是IEEE Software的Manager(管理员)专栏的编辑。他还是ACM、IEEE、Tau Beta Pi、Phi Kappa Phi、Eta Kappa Nu和Pi Tau Sigma的会员。译者序20世纪末发生在我们这个星球上的最大变化之一无疑是席卷全球的信息技术(IT)革命,人们将这场革命

6、视为21世纪知识经济时代的前奏曲。在这场IT革命中,软件无疑扮演了极其重要的角色。软件产业作为一个独立形态的产业,正在全球经济中占据越来越举足轻重的地位。而软件工程正是软件产业健康发展的关键技术之一。从1968年软件工程概念的正式提出到现在,软件工程已有逾30年的发展,出现了大量的研究成果,也进行了大量的技术实践。正是由于学术界和产业界的共同努力,软件工程正在逐步发展为一门成熟的专业学科,以解决软件生产的质量和效率问题为宗旨,在软件产业的发展中起到了重要的技术保障和促进作用。本书是一本系统而全面地介绍软件工程理论、技术和实践的专著,是北美学术界和产业界的畅销书之一。本书作者Roger S.Pr

7、essman是软件工程领域国际知名的咨询专家和作者,著有多本学术专著,本书已是其第四版。本书第二版曾在国内翻译出版,并被很多学校选为软件工程教材,在我国软件工程研究、教学和实践中起到了很好的借鉴和参考作用。而第四版并不仅仅是简单的修订,而是被完全重构以适应软件工程领域快速的增长并着重于新的、重要的软件工程方法。从早期版本保留的章节被全面地修订,并加入了12章新内容,以提供对当代趋势和技术的完整讨论。书中还加入了很多新例子、思考题、推荐阅读文献及其它参考信息源。本书的翻译出版旨在向国内软件工程领域的研究、教学、管理和技术人员提供一个全面的参考文献、教材或实践指南。本书由黄柏素、梅宏组织翻译,其中

8、梅宏负责第二部分7、8、9章和第三部分的翻译工作,黄柏素翻译了其余部分并负责全书的统稿工作。同时译者希望向参与了部分章节翻译工作的李克勤、张路、袁望洪、常继传、郭立峰、谢涛、郭耀、马黎等,以及参与了插图绘制和参考文献录入工作的徐松青、沈璞、刘洋、孟祥文等表示诚挚的感谢。由于译者自身的知识局限及时间的仓促,译稿中难免存在错误和遗漏。谨向读者及原书作者致以歉意,并欢迎指正。黄柏素、梅宏黄柏素(女),博士,北京大学计算机科学技术系副教授。1993年于西北工业大学获得博士学位。同年进入北京大学计算机科学技术系博士后流动站。1995年出站后留校工作。主要研究方向为软件工程、软件开发环境及工具、面向对象技

9、术、用户界面管理系统等。承担了软件工程课程教学工作。目前已发表学术论文20余篇,并获得多项国家及部委科技成果奖和个人奖。梅宏,博士,北京大学计算机科学技术系教授。1992年于上海交通大学获工学博士学位,1994年从北京大学计算机科学技术系博士后出站。研究、教学工作主要涉及软件工程及软件开发环境、软件复用及软件构件技术、(分布)对象技术、软件工业化生产技术及支持系统、新型程序设计语言等。已在国内外学术刊物及国际、全国学术会议上发表学术论文60余篇。并多次获得国家及部委级科技成果奖,以及其他个人荣誉奖。前 言软件工程已进入到目前的第四代,它已具有许多优势,虽然它仍存在同时代人曾经历的某些弱点,但其

10、早年的天真和热情已被更合理的经历多年培育的期望(以及甚至善意的嘲讽)所替代,软件工程正带着许多成就步入中年,然而还有大量工作需要去做,今天,它已被公认为一个重要学科,值得认真地研究、细心地学习和热烈地争论。在整个产业界,“软件工程师”已经替代“程序员”成为更受欢迎的工作头衔。产业应用软件中已广泛而成功地采用了软件过程模型、软件工程方法以及软件工具。管理者和实践者均认识到,需要一个更严谨的软件方法来支持手头的工作。但是,在本书的早期版本中很多讨论的问题仍然存在,很多个人和公司仍然在随意地开发软件,很多专业人员和学生不知道现代方法,最终,我们生产的软件仍然存在大量质量问题。此外,关于软件工程方法的

11、真实性质的争论仍在继续。然而,今天软件工程已成为研究的热点,人们对它的态度已有很大变化,它的发展也很明显,但是,要使软件工程最终发展成为一个完全成熟的学科还需做大量工作。本书的第4版试图成为正逐步走向成熟的软件工程学科的一个指南。和前面三版一样,第4版的主要读者群仍然是学生和实践者,而且在写作风格上我们力图仍然保持前面各版的格式和风格。本书的基本目标仍然是:作为产业界专业人员的指南以及作为高年级大学生和一年级研究生的软件工程的全面导论。我们在第4版中并不仅仅简单地修订了原稿,为适应本领域快速的增长我们完全重新组织了书中的内容,并着重讨论了新的重要的软件工程方法,还全面地修订了从早期版本保留的章

12、节,加入了12章新内容,以提供对当代趋势和技术的完整讨论。加入了很多新例子、思考题,每一章中还增补了推荐阅读文献及其他信息搜索地址,包括数百个新的出版站点以及超过160个WWW信息站地。第4版由5个部分共30章构成。这样做的目的是按专题安排内容,并使那些没有时间在一个学期内完成书中内容教学任务的老师,可以按需取用。第一部分:产品和过程,简介软件工程的相关语境,引出书中主要内容,并着重介绍了以后章节用到的概念;第二部分:管理软件项目,讨论那些与计划、管理和控制软件开发项目的人员相关的话题;第三部分:传统软件工程方法,讨论那些被视为传统软件工程不同“学派”的分析、设计和测试方法;第四部分:面向对象

13、软件工程,讨论跨越整个软件工程过程的面向对象方法,包括分析、设计和测试方法;第五部分:软件工程高级课题,分章专门讨论形式化方法、净室软件工程、复用、再建工程、客户/服务器软件工程和CASE。第4版比以前版本更多地强调了度量和测度方面的相关技术。有三章和软件度量相关,分别是:软件过程和项目的度量、软件的技术度量、面向对象系统的技术度量。本书的组织使得老师可以根据时间和学生需要安排授课话题。一个学期可选择一个或多个部分。例如,“设计课程”可能只需要第三或第四部分,“方法课程”可能只需第三、第四和第五部分的部分章节,“管理课程”可能只需要第一和第二部分。按这种方式组织本书第4版,目的是给老师提供灵活

14、的教学选择。第4版的写作工作已成为我生活中持续最长的技术计划。即使当写作停止时,从各种技术文献中提炼、组织信息的工作也一直在进行,为此,我要感谢许多书籍、论文和文章的作者,以及新一代的电子媒体(新闻组和WWW)的贡献者们,他们在过去的15年中给我提供了大量的信息资源、思想和评注,很多信息资源已在每章的参考文献中列出,他们在这个快速发展的领域中的贡献是值得称道的。我还要感谢第4版的审阅者:Wayne State University的Frank H.Westervelt、The University of Connecticut的Steven A.Demurjian、California Sta

15、te PolytechnicUniversity的Chung Lee、University of Colorado的Alan Davis、QSM Associates的Michael C.Mah、University of CaliforniaIrvine的Richard N.Taylor、Virginia Tech.的Osman Balci、AuburnUniversity的James H.Cross、Portland State University的Warren Harrison、NortheasternUniversity的Mieczyslaw M.Kokar,他们的评注和批评是无价的

16、。本书第4版内容的成型有赖于许多曾经使用过本书以前版本的产业界专业人员、大学教授和学生,他们花了很多时间和我通信交流他们的建议、批评和思想,我要感谢他们中的每一位。此外,我也要向我们的在北美和欧洲的许多产业客户表示感谢,他们教我的比我教他们的要多。Roger S.Pressman第一部分 产品和过程在本书的这一部分中我们主要讨论什么是工程产品和如何为工程技术提出一个框架的过程。在下面的章节中,我们主要解决下列问题:到底什么是计算机软件?为什么我们不断努力要建造高质量的基于计算机的系统?我们如何对计算机软件的应用领域分类?关于软件仍存在什么样的神话?什么是软件过程?是否存在一般性的方法评价一个过

17、程的质量?软件开发中可以应用什么过程模型?线性过程和迭代过程有何区别?它们的优点和缺点是什么?在软件工程中可以建议什么更高级的过程模型?一旦回答了这些问题,读者就能够更好地理解本书其余部分给出的工程原则的管理和技术方面的知识。第1章 产品本书的第1版在80年代初出版后不久,Business Weekly(商业周刊)杂志在头版给出如下的大标题:“软件:新的驱动力”。编辑们当时并没有意识到他们的预见是多么的正确。那时,大多数人对软件还是一无所知。大软件公司,如微软公司,还不存在;拥有15000平方英尺专门出售包装好的软件的计算机超市闻所未闻;在电视上为计算机操作系统做60秒钟商业广告的想法是可笑的

18、;而互联网仅为个别研究者和高等学校学生所知。但是,在不到20年的时间里,所有这些(甚至更多)已经成为现实。计算机软件已经成为一种驱动力。它是进行商业决策的引擎;它是现代科学研究和工程问题解决的基础;它也是区分现代产品和服务的关键因素。它在各种类型的系统中应用,如交通、医药、通讯、军事、产业化过程、娱乐、办公难以穷举。软件在现代社会中的确是必不可少的。而且当我们进入21世纪,软件将成为从基础教育到基因工程的所有各领域新进展的驱动器。所有这一切已经改变了软件的常见概念。计算机软件是无所不在的,人们把软件看作是生活中现实的技术。在很多情况下,人们把他们的工作、他们的舒适、他们的安全、他们的娱乐、他们

19、的决策、甚至他们的整个生活都依赖于计算机软件。软件千万可不能出错。本书介绍的若干技术是那些想要建造正确的计算机软件的人们需要用到的。这些技术包括一个过程,一组方法和一系列工具,我们称之为软件工程。1.1软件的发展今天,软件担任着双重角色。它是一种产品,同时又是开发和运行产品的载体。作为一种产品,它表达了由计算机硬件体现的计算潜能。不管它是驻留在蜂窝电话中,还是操作在主机上,软件就是一个信息转换器产生、管理、获取、修改、显示或转换信息,这些信息可以很简单,如一个单个的位(bit),或很复杂,如多媒体仿真信息。作为开发运行产品的载体,软件是计算机控制(操作系统)的基础、信息通信(网络)的基础,也是

20、创建和控制其他程序(软件工具和环境)的基础。许多人相信21世纪最重要的产品是信息,软件充分体现了这一观点。它处理个人数据(如个人的金融事务),使得这些数据在局部范围中更为有用;它管理商业信息增强了商业竞争力;它提供了通往全球信息网络(如Internet)的途径;它也提供了以各种形式获取信息的手段。计算机软件的角色在20世纪后半叶发生了很大的变化。硬件性能的极大提高,计算机体系结构的不断变化,内存和硬盘容量的快速增加,以及大量输入输出设备的多种选择,均促进了更为成熟和更为复杂的基于计算机的软件系统的出现。如果一个系统是成功的,那么这种成熟性和复杂性能够产生出奇迹般的结果,但是它们也给建造这些复杂

21、系统的人员带来很多的问题。在70年代和80年代出版的受欢迎的书对于计算机、软件和它们对我们文化的影响等方面提供了有用的历史的视角。OsborneOSB79称之为一次“新的工业革命”。TofflerTOF80称微电子的发展是人类历史上的“第三次浪潮”,NaisbittNAI82则预言了从工业社会向“信息社会”的转变。Feigenbaum和McCorduckFEI83认为由计算机控制的信息和知识将是20世纪中表现能力的焦点,StollSTO89则提出由网络和软件产生的“电子社会”将是全球知识交换的关键。进入90年代,TofflerTOF90描述了“权利的转移”,因为计算机和软件导致了“知识的民主化

22、”,因而旧的权利结构(政府,教育,工业,经济,及军事)将要瓦解。YourdonYOU92担心美国公司在软件相关的业务中会失去竞争力,并预言“美国程序员的衰落和下降”。Hammer和ChampyHAM93提出信息技术将在“公司的再工程”中起到很关键的作用。在90年代中期,计算机和软件的流行产生了大量“新劳工运动”的书籍(例如:由James Brook和Iain Boal编辑的“抵制虚拟的生活”,以及Stephen Talbot写的“未来不是计算”)。这些作者把计算机看成是魔鬼,强调了其合法性,而忽略了已被人们意识到的巨大的利益LEV95问题。在计算机发展的早期阶段,大多数人把软件看成是不需预先计

23、划的事情。计算机编程很简单,没有什么系统化的方法。软件的开发没有任何管理,一旦计划延迟了或成本提高了,程序员才开始手忙脚乱地弥补,而他们的努力一般情况下也会取得成功。在通用的硬件已经非常普遍的时候,软件却相反,对每一类应用均需自行再设计,应用范围很有限。软件产品还在婴儿阶段,大多数软件均是由使用它们的人员或组织自己开发的,如你写软件,使其运行,如果它有问题,你负责改好。工作的可变性很低,管理者必须得到保证:一旦发生了错误你必须在那里。因为这种个人化的软件环境,设计往往仅是人们头脑中的一种模糊想法,而文档就根本不存在。在早期,我们了解了很多关于计算机系统的实现,但对于计算机系统工程几乎一无所知。

24、但是公平地讲,我们应该感谢这个时期开发的许多卓越的计算机系统,其中不少一直到今天还在使用,并继续发挥着巨大的作用。计算机系统发展的第二阶段跨越了从60年代中期到70年代末期的十余年(如图11)。多道程序设计、多用户系统引入了人机交互的新概念。交互技术打开了计算机应用的新世界,以及硬件和软件配合的新层次。实时系统能够从多个源收集、分析和转换数据,从而使得进程的控制和输出的产生以毫秒而不是分钟来进行。在线存储的发展导致了第一代数据库管理系统的出现。第二阶段还有一个特点就是软件产品的使用和“软件作坊”的出现。软件被开发,使得它们可以在很宽的范围中应用。主机和微机上的程序能够有数百甚至上千的用户。来自

25、工业界、政府和学术界的企业家们纷纷开始开发各类软件包,并赚了大笔钱财。早期 第二阶段 第三阶段 第四阶段面向批处理 多用户 分布式系统 强大的桌面系统有限的分布 实时 嵌入“智能” 面向对象技术自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者的影响 人工神经网络 并行计算 网络计算机随着计算机系统的增多,计算机软件库开始扩展。内部开发的项目产生了上万行的源程序,从外面购买的软件产品加上几千行新代码就可以了。这时,一团黑云出现在地平线上,当发现错误时需要纠正所有这些程序(所有这些源代码);当用户需求发生变化时需要修改;当硬件环境更新时需要适应。这些活动统称为软件维护。在软件维护上所花费

26、的精力开始以惊人的速度消耗资源。更糟糕的是,许多程序的个人化特性使得它们根本不能维护。“软件危机”出现了。计算机系统发展的第三阶段始于70年代中期并跨越了整整十年。分布式系统多台计算机,每一台都在同时执行某些功能,并与其他计算机通讯极大地提高了计算机系统的复杂性。广域网和局域网、高带宽数字通讯以及对“即时”数据访问需求的增加都对软件开发者提出了更高的要求。然而,软件仍然继续应用于工业界和学术界,个人应用很少。第三阶段的主要特点是微处理器的出现和广泛应用。微处理器孕育了一系列的智能产品从汽车到微波炉,从工业机器人到血液诊断设备但那一个也没有个人计算机那么重要,在不到十年时间里,计算机真正成为大众

27、化的东西。计算机系统发展的第四个阶段已经不再是着重于单台计算机和计算机程序,而是面向计算机和软件的综合影响。由复杂的操作系统控制的强大的桌面机,广域和局域网络,配合以先进的软件应用已成为标准。计算机体系结构迅速地从集中的主机环境转变为分布的客户机/服务器环境。世界范围的信息网提供了一个基本结构,使得学者和政治家可以同样考虑“信息高速公路”和“网际空间连通”的问题。事实上,Internet可以看作是能够被单个用户访问的“软件”。软件产业在世界经济中不再是无足轻重的。由产业巨子如微软做的一个决定可能会带来成百上千亿美元的风险。随着第四阶段的进展,一些新技术开始涌现。面向对象技术(本书第四部分)在许

28、多领域中迅速取代了传统软件开发方法。虽然关于“第五代”计算机的预言仍是一个未知数,但是软件开发的“第四代技术”确实改变了软件界开发计算机程序的方式。专家系统和人工智能软件终于从实验室里走了出来,进入了实际应用,解决了现实世界中的大量问题。结合模糊逻辑应用的人工神经网络软件揭示了模式识别和类似人的信息处理能力的可能性。虚拟现实和多媒体系统使得与最终用户的通讯可以采用完全不同的方法。“遗传算法”BEG95则提供了可以驻留于大型并行生物计算机上的软件的潜在可能性。但是,一系列软件相关的问题在计算机系统的整个发展过程中一直存在着,而且这些问题还会继续恶化:1.硬件的发展一直超过软件,使得我们建造的软件

29、难以发挥硬件的所有潜能。2.我们建造新程序的能力远远不能满足人们对新程序的需求,同时我们开发新程序的速度也不能满足商业和市场的要求。3.计算机的普遍使用已使得社会越来越依赖于可靠的软件。如果软件失败,会造成巨大的经济损失,甚至有可能给人类带来灾难。4.我们一直在不断努力建造具有高可靠性和高质量的计算机软件。5.拙劣的设计和资源的缺乏使得我们难以支持和增强已有软件。为了解决这些问题,整个产业界开始采用了软件工程实践。1.1.1产业的观点在计算机发展的早期,计算机系统是采用面向硬件的管理方法来开发的。项目管理者着重于硬件,因为它是系统开发中最大的预算项。为了控制硬件成本,管理者建立了规范的控制和技

30、术的标准。他们要求在真正开始建造系统之前,进行详尽的分析和设计,他们度量过程,以发现哪里还可以进一步改进,他们坚持质量控制和质量保证,他们设立规程,以管理变化。简言之,他们应用了控制、方法和工具,我们可以称之为硬件工程。但遗憾的是软件只不过是事后才考虑的事情。在早期,程序设计被看作是一门“艺术”。几乎没有规范化的方法,也没有人使用它们。程序员往往从试验和错误中积累经验。建造计算机软件的专业性和挑战性,使其披上了一种神密的面纱,管理者们很难了解它。软件世界真是完全无序这是一个开发者的为所欲为的时代。今天,计算机系统开发成本的分配发生了戏剧性的变化。软件,而不是硬件,是最大的成本项。在近二十年里,

31、管理者和很多开发人员在不断地问以下的问题:为什么需要那么长时间才能结束开发?为什么成本如此之高?为什么我们不能在把软件交给客户之前就发现所有的错误?为什么在软件开发过程中我们难以度量其进展?这些问题以及其他许多问题都表明了对软件及其开发的方式是必须关注了这种关注最终导致了软件工程实践的出现。1.1.2老化的软件工厂在50和60年代,许多评论家批评美国的钢铁产业缺少对其工厂的投入。工厂开始恶化,现代化的方法很少被采纳,最终产品的质量和成本难以容忍,外来的竞争开始赢得市场份额。这些企业在管理中确定把主要的投资投入到其主营业务中,以保持竞争力。随着时间的推移,美国的钢铁产业蒙受了巨大损失,大量市场份

32、额被外来竞争者占领这些企业拥有新工厂,采用更为现代化的技术,并且得到政府的资助,使得他们极具价格优势。在那个时期,羽翼未丰的计算机产业中的很多人都以蔑视的态度评价钢铁产业,“如果它们不愿在自己的业务上投入,那当然会失去市场份额”。这些话现在轮到说我们自己了。听上去很戏剧化,今天的软件产业就像五、六十年代的钢铁产业,无论大公司还是小公司,都有一个老化的“软件工厂”有成千上万的重要的基于软件的应用程序急待更新: 20年前开发的信息系统应用程序经过了几十次的修改,已经真正不可维护了。即使是最小的修改也会引起整个系统失败。一些用于生成关键设计数据的工程应用程序,由于不断的修改和老化,已经没有人真正了解

33、其内部结构。嵌入式系统(有成千上万的这类应用程序,其中包括核电站控制、航空调度和工厂管理)表现出奇怪的有时甚至是无法解释的行为,但又不能不用它们,因为目前还没有其他方法可以替代它们。有问题就“打补丁”,并给这些应用程序一个时髦的界面,仅仅如此是不够的。软件工厂的许多构件需要再生产,否则它们就不再具有竞争力了。但不幸的是,许多企业的管理者并不愿投入资源去进行再生产,他们辩解:“这些应用程序仍能工作,投入资源去使得它们更好是不经济的”。1.1.3软件的竞争许多年来,大、小公司雇佣的软件开发人员仅仅在公司内部服务,而且他们也愿意这样。因为每一个计算机程序都是自行开发的,这些“自家”的软件人员控制着成

34、本、进度和质量。今天,所有这一切都改变了。软件目前是一个竞争很强的行业。曾经要自行开发的软件现在可以在货架上买到,许多公司过去雇佣了大量的程序员开发特定的软件,现在它们大部分的软件工作已交给第三方厂商去完成MIN95。成本、进度和质量将是未来若干年中导致软件激烈竞争的主要因素。美国和西欧有很成熟的软件产业,而远东(如韩国,新加坡)、亚洲(如印度、中国)和东欧的一些国家拥有大量的有天份、受过良好教育且相对较低廉的专门人才ECO94。这种压力导致了必须迅速采用现代化的软件工程实践的需要,同时软件开发也是一个必须认真考虑的因素,因为世界范围的软件从业人员都在追求尽量少的开发费用。在关于信息服务对美国

35、及世界的影响的论著中,Feigenbaum和McCorduckFEI83作了如下陈述:知识就是力量,而计算机是这种力量的倍增器美国的计算机产业是创新的、充满活力的和成功的。在某种程度上,它是一个理想的产业。它通过转化知识分子的脑力劳动来产生价值,而几乎不需要什么能源和原材料。今天,我们在这个最重要的现代技术上领导着世界的想法和市场,但明天会怎样哪?是的,明天会怎样哪?计算机硬件已经成为一种商品,可从很多渠道得到。但软件仍然是美国保持着“创新的、充满活力的和成功的”一个产业。但我们还会继续保持领先吗?至少答案的一部分就在这里:我们将采用什么样的方法去建造下一代计算机系统的软件。1.2软件在197

36、0年,只有不到1的人能够比较准确地描述出什么是“计算机软件”。而现在,大多数专业人士和许多业外公众都认为他们了解了什么是软件。但他们真的了解吗?关于软件,教科书上一般是如下定义的:软件是(1)能够完成预定功能和性能的可执行的指令(计算机程序);(2)使得程序能够适当地操作信息的数据结构;(3)描述程序的操作和使用的文档。毫无疑问,也可以给出其他更详细的定义。但我们不只是需要一个形式上的定义。1.2.1软件特征要理解软件的含义(以及对软件工程有一个全面的理解),首先要了解软件的特征是很重要的,据此能够明白软件与人类建造的其他事物之间的区别。当建造硬件时,人的创造性的过程(分析、设计、建造、测试)

37、能够完全转换成物理的形式。如果我们建造一个新的计算机,初始的草图、正式的设计图纸和面板的原型一步步演化成为一个物理的产品(VLSI芯片、线路板、电源等等)。而软件是逻辑的而不是物理的产品。因此,软件具有与硬件完全不同的特征:1.软件是由开发或工程化而形成的,而不是传统意义上的制造产生的。虽然在软件开发和硬件制造之间有一些相似之处,但两者本质上是不同的。这两者,都可以通过良好的设计获得高质量,但硬件在制造过程中可能会引入质量问题,这种情况对于软件而言几乎不存在(或是很容易改正)。软件成为产品之后,其制造只是简单的拷贝而已;两者都依赖于人,但参与的人和完成的工作之间的关系不同;两者都是建造一个产品

38、,但方法不同(见第3章)。软件成本集中于开发上,这意味着软件项目不能象硬件制造项目那样来管理。在80年代中期,“软件工厂”的概念被正式引入MAN84、YAJ84。应该注意到这个术语并没有把硬件制造和软件开发认为是等价的。而是通过软件工厂这个概念提出了软件开发中应该使用自动化工具(见第5部分)。2.软件不会“磨损”。图12刻划了随着时间的改变硬件故障率的变化曲线图。其关系,常常被称作“浴缸曲线”,表明了硬件在其生命初期有较高的故障率(这些故障主要是由于设计或制造的缺陷);这些缺陷修正之后,故障率在一段时间中会降到一个稳定的曲线上(很低)。随着时间的改变,故障率又提升了,这是因为硬件构件由于种种原

39、因会不断受到损害,例如灰尘、振动、滥用、温度的急剧变化以及其他许多环境问题。简单讲,硬件已经开始磨损了。软件并不受到这些引起硬件磨损的环境因素的影响。因此,理论上讲,软件的故障率曲线呈现出如图13所示的形式。隐藏的错误会引起程序在其生命初期具有较高的故障率。但这些错误改正之后(我们假设理想情况下改正过程中并不引入其他错误),曲线就趋于平稳,如图所示。图13给出了实际软件故障模型的一个总的简化图(第8章将给出更多信息)。其意义很清楚软件不会磨损,不过它会退化。这个说法表面上似乎是矛盾的,我们可以通过图14来解释清楚。在其生命期中,软件会经历修改(维护),随着这些修改,有可能会引入新的错误,使得故

40、障率曲线呈现为图14所示的锯齿形。在该曲线能够恢复到原来的稳定状态的故障率之前,又需要新的修改,又引起一个新的锯齿。慢慢地,最小故障率就开始提高了软件的退化由于修改而发生了。关于磨损的另一个侧面也表明了硬件和软件之间的不同。当一个硬件构件磨损时,可以用另外一个备用零件替换它,但对于软件就没有备用零件可以替换了。每一个软件故障都表明了设计或是将设计转换成机器可执行代码的过程中存在错误。因此,软件维护要比硬件维护复杂得多。3.大多数软件是自定的,而不是通过已有的构件组装而来的。我们先看一看一个基于微处理器的控制硬件是如何设计和建造出来的。设计工程师画一个简单的数字电路图,做一些基本的分析以保证可以

41、实现预定的功能,然后查阅所需的数字零件的目录。每一个集成电路(通常称为“IC”或“芯片”)都有一个零件编号、固定的功能、定义好的接口和一组标准的集成指南。每一个选定的零件,都可以在货架上买到。而软件设计者就没有上述这种荣幸了。几乎没有软件构件。有可能在货架上买到的软件,它本身就是一个完整的软件,而不能作为构件再组装成新的程序。虽然关于“软件复用”已有大量论著,但这种概念的成功实现还只是刚刚开始。1.2.2软件构件随着工程化的发展,大量标准的设计构件产生了。标准螺丝和货架上的集成电路芯片仅仅是成千上万的标准构件中的两种,机械和电子工程师在设计新系统时会用到它们。这些可复用构件的使用使得工程师们能

42、够集中精力于设计中真正有创造性的部分(如设计中那些新的成分)。在硬件中,构件复用是工程化的必然结果。而在软件中,它还仅仅是在小范围内取得一定应用。可复用性(Reusability)是高质量软件构件的一个重要特征(第26章将给出更详细的讨论),一个软件构件应该被设计和实现为能够在多个不同程序中复用。在60年代,我们建造了科学计算子程序库,它们能够在很多工程和科学应用中复用,这些子程序库可以以一种高效的方式复用,定义明确的算法,但其应用范围有限。今天,我们已经扩展了复用的概念,不仅是算法,还可以是数据结构。现代的可复用构件包含了数据以及应用这些数据的处理过程,使得软件工程师能够从已有可复用构件中创

43、建新的应用。例如,现在交互界面都是通过可复用构件建造的,你可以使用它们创建图形窗口、下拉式菜单和各种交互机制。建造用户界面所需的数据结构和处理细节均包含在一个可复用的界面建造构件库中。软件构件使用某种程序设计语言实现,该语言具有一个有限的词汇表、一个明确定义的文法及语法和语义规则。在最底层,该语言直接反映了硬件的指令集;在中层,程序设计语言,如Ada 95、C或Smalltalk可用于创建程序的过程化描述;在最高层,该语言可使用图形化的图标或其他符号去表示关于需求的解决方案。由于可执行代码就自动生成了。机器级语言是CPU指令集的一个符号表示。当一个好的软件开发者在开发一个可维护、文档齐全的程序

44、时,使用机器语言能够很高效地利用内存并优化该程序的执行速度。当程序设计得很差且没有文档时,机器语言就是一场恶梦。中层语言使得软件开发者和程序可独立于机器。如果使用了很好的翻译器,一个中层语言的词汇表、文法、语法和语义都能够比机器语言高级得多。事实上,中层语言的编译器和解释器的输出就是机器语言。虽然目前有成百上千种的程序设计语言,但只有不到10种中层的程序设计语言在工业界广泛使用。一些语言,如COBOL和FORTRAN从它们发明至今已经流行了30余年,更多的现代程序设计语言,如Ada95、C、C、Eiffel、Java和Smalltalk也各自有一大批热心的追随者。机器代码,汇编语言(机器级语言

45、)和中层程序设计语言通常被认为是计算机语言的前三代。因为这些语言中的任何一种,都需程序员既要关心信息结构的表示,又要考虑程序本身的控制。因此这前三代语言被称为是过程语言。第四代语言,也称非过程语言,使得软件开发者更加独立于计算机硬件。使用非过程语言开发程序,不需要开发者详细说明过程化的细节,而仅仅“说明期望的结果,而不是说明要得到该结果所需要的行为”COB85。支撑软件会把这种规约自动转换成机器可执行的程序。1.2.3软件应用软件可以应用于任何场合,只要定义了一组预说明的程序步骤(如一个算法,但也有例外,如专家系统和人工神经网络)。信息的内容和确定性是决定一个软件应用的特性的重要因素。内容指的

46、是输入和输出信息的含义和形式,例如,许多商业应用使用高结构化的输入数据(一个数据库),且产生格式化的输出“报告”。而控制一个自动化机器的软件(如一个数控系统)则接受限定结构的离散数据项,并产生快速连续的单个机器命令。信息的确定性指的是信息的处理顺序及时间的可预定性。一个工程分析程序接受预定顺序的数据,不间断的执行分析算法,并以报告或图形格式产生相关的数据。这类应用是确定的。而一个多用户操作系统,则接受可变化内容和任意时序的数据,执行可被异常条件中断的算法,并产生随环境功能及时序而变化的输出。具有这些特点的应用是非确定的。在某种程度上讲我们难以对软件应用给出一个通用的分类。随着软件复杂性的增加,

47、其间已没有明显的差别。下面给出一些软件应用领域,它们可能是一种潜在的应用分类:系统软件:系统软件是一组为其他程序服务的程序。一些系统软件(如编译器、编辑器和文件管理程序)处理复杂的但也是确定的信息结构。其他的系统应用(如操作系统、驱动程序和通讯进程等)则处理大量的非确定的数据。不管哪种情况,系统软件均具有以下特点:与计算机硬件频繁交互;多用户支持;需要精细调度、资源共享及灵活的进程管理的并发操作;复杂的数据结构;及多外部接口。实时软件:管理、分析、控制现实世界中发生的事件的程序称为实时软件。实时软件的组成包括:一个数据收集部件,负责从外部环境获取和格式化信息;一个分析部件,负责将信息转换成应用时所需要的形式;一个控制/输出部件,负责响应外部环境;及一个管理部件,负责协调其他各部件,使得系统能够保持一个可接受的实时响应时间(一般从1毫秒到1分钟),应该注意到术语“实时”不同于“交互”或“分时”。一个实时系统必须在严格的时间范围内响应。而一个交互系统(或分时系统)的响应时间可以延迟,且不会带来灾难性的后果。商业软件:商业信息处理是最大的软件应用领域。具体的

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号