《软件工程》试读: 第一部分 软件工程导论
这一部分的目标是对软件工程做一般性的介绍。将介绍软件工程的一些重要概念,如软件过程和敏捷方法。描述软件开发中的基本活动,从初始的软件描述到系统进化。这部分的各章设计为支持软件工程一个学期的课程。
第1章是一个概述,介绍了专业软件工程并定义了一些软件工程的概念,也就软件工程职业道德方面的问题进行了简短的讨论。我认为软件工程师们认真思考所从事工作的深远影响是很重要的。这一章也介绍了贯穿本书使用的3个案例研究,分别是:保存正在接受心理健康问题治疗的病人记录的系统、治疗糖尿病患者的便携式胰岛素泵的控制系统和野外气象系统。
第2章和第3章分别介绍软件工程过程和敏捷开发。第2章介绍常用的软件过程模型,如瀑布模型,也介绍了这些软件过程中的基本活动。第3章增加了一个关于软件工程的敏捷开发方法的讨论。我喜欢使用极限编程作为敏捷方法的例子,这里也简要地介绍了Scrum的内容。
这部分剩余的各章是对在第2章中介绍的软件过程活动的深入阐述。第4章讲解需求工程的最为重要的话题,对系统应该做什么的需求给予了定义。第5章介绍使用UML语言对系统建模,专注于用例图、类图、时序图和状态图这些软件系统建模的方法。第6章介绍体系结构设计、体系结构的重要性以及在软件设计中体系结构模式的使用。
第7章介绍面向对象的设计和设计模式的使用,还介绍了重要的实现问题——复用、配置管理、宿主机-目标机的开发,并且讨论了开源开发。第8章主要介绍软件测试,从系统开发时的单元测试到软件的发布测试。此外,第8章还讨论了测试驱动开发的使用,这是在敏捷方法中率先使用的一种方法,现在已经得到广泛应用。最后,第9章概述软件进化问题,包括进化过程、软件维护和遗留系统管理。 第1章 Software Engineering,9E概述目标
本章的目标是介绍软件工程的概念,并为理解本书其他部分内容提供一个框架。读完本章,你将了解以下内容:
■ 什么是软件工程,为什么它很重要;
■ 开发不同类型的软件系统可能需要不同的软件工程方法;
■ 道德和职业问题对于软件工程的重要性;
■ 介绍3个不同类型的软件系统,这3个系统将作为贯穿全书的例子。现代社会离不开软件。国家基础设施和公共建设都是由基于计算机的系统控制,大多数的电子产品都有计算机和控制软件。工业制造和分销已经完全计算机化了,金融系统也是这样。娱乐业,包括音乐产业、计算机游戏产业、电影和电视产业,也是一个软件密集型的产业。因此,软件工程对于一个国家和整个国际社会的运转都是必不可少的。
软件是抽象的、不可触摸的,它不受物质材料的限制,也不受物理定律或加工过程的制约,这一方面使软件工程得以简化,因为软件的潜能不受物理因素的限制;另一方面,由于缺乏自然约束,软件系统也就很容易变得极为复杂,理解它会很困难、改变它价格高昂。
从简单的嵌入式系统到复杂的全球信息系统,有很多不同类型的软件系统。正是由于不同的软件系统需要不同的技术,所以试图为软件工程寻求通用的符号系统、方法和技术是毫无意义的。开发一个机构信息系统和开发一个科学仪器的控制器是完全不同的。而这些系统都跟图形密集型的计算机游戏没有太多的共同点。所有这些应用都需要软件工程,但不是都需要相同的软件工程技术。
现在仍有许多有关软件项目出问题和“软件失败”的报道。软件工程因不能充分支持现代软件的开发而遭非议。然而,在我看来,这些所谓的软件失败源于以下两方面的原因:
1 不断增长的需求由于新的软件工程技术可以帮助我们构建更大更复杂的系统,用户的需要因而在发生改变。系统必须更快速地构建并交付;需要更大更复杂的系统;系统必须具备在以前看来不可能实现的功能。现有的软件工程方法已经不能应对新形势,而新的软件工程技术还有待于进一步发展。
2 期望值太低不采用软件工程的方法和技术去编写计算机程序相对来讲要容易一些。许多公司因为他们的产品和服务在逐步发展而在软件开发中随波逐流。他们通常不使用软件工程方法。结果导致他们的软件比预计的费用高且不可靠。因此我们需要更好的软件工程教育和实践来解决此类问题。
软件工程人员应该为自己所做出的成绩感到自豪。当然我们在开发复杂软件时还存在问题,但如果没有软件工程,我们就不能探索太空,也就没有因特网和现代的远程通信,各种形式的旅行就会很危险且花费很高。软件工程在它诞生以后的不长时间里就已做出了巨大贡献。我坚信:随着软件工程这门学科的不断成熟,它对21世纪的贡献将是不可估量的。 软件工程的历史
“软件工程”这一概念是在 1968年召开的一个当时被称作“软件危机”的会议上首次提出的(Naur和Randell, 1969)。当时,单个的程序开发技术已经不能扩展从而应用到大型的、复杂的软件系统中。软件项目有时甚至要推迟几年才能完成,而且比预计的费用高、不可靠、难以维护。
20世纪70年代和80年代,各种新的软件工程技术和方法都得到了发展,例如结构化编程、信息隐藏和面向对象开发。工具和标准的符号系统得以研究和发展且现在得到了更广泛的使用。
http://wwwSoftwareEngineering9com/Web/History/11专业化软件开发
第一部分软件工程导论第1章概述 许多人都在编写程序。业务人员编写电子表格程序来简化工作,科学家和工程师编写程序来处理实验数据,业余爱好者为了自己的兴趣和爱好也编写程序。然而,绝大多数的软件开发是个专业化的活动,软件的开发是达到为了特定的业务目的,是为了植入到其他的设备、作为软件产品,例如信息系统、CAD系统等。那些除了开发者外还有其他用户使用的专业化软件通常都是由团队开发而不是某个人独自完成的,在其生命周期内要不断维护和修改。
软件工程的目的是支持专业化的软件开发,而不是个体编程。它包括支持程序描述、设计和进化的相关技术,而这些都不是个体软件开发所需要的。为了使大家对什么是软件工程有一个大体的认识,图11总结了一些常见的问题。 问题 答案什么是软件 计算机程序和相关文档。软件产品可针对特定客户开发或为通用市场开发什么是优良软件的特点 好的软件应具有用户所需的功能与性能,而且应该可维护、可靠、可用什么是软件工程 软件工程是关于软件生产的各个方面的工程学科什么是基本的软件工程活动 软件描述、软件开发、软件验证以及软件进化软件工程和计算机科学有何区别 计算机科学侧重理论和基础,而软件工程则侧重于软件开发和交付的实际活动软件工程和系统工程有何区别 系统工程侧重基于计算机系统的开发的所有方面,包括硬件、软件和过程工程。软件工程只是这个总体过程中的一部分软件工程面临的主要挑战是什么 不断增长的多样性、减少交付时间以及开发可靠的软件的要求什么是软件工程的成本 软件开发成本约占总成本的60%,测试成本占40%。对于定制软件而言,进化成本常常高于开发成本什么才是最好的软件工程技术和方法 由于所有的软件项目都必须进行专业化的管理和开发,所以不同的技术应适用于不同类型的系统。例如,游戏开发需要一系列原型,而安全要求极高的控制系统开发需要一个完整的和可分析的描述。因此,你不能单纯地评判一种方法比另一种方法更好Web给软件工程带来了哪些不同 Web带来了软件服务的可用性,以及开发高品质的基于服务的分布式系统的可能性。基于Web的系统开发极大地促进了编程语言和软件复用的发展图11关于软件的常见问题
许多人把软件等同于计算机程序,其实这种理解是很狭隘的。在我们讨论软件工程时,软件包括程序和所有使程序正确运行所需要的相关文档和配置信息。一个专业化开发的软件系统通常远不止一个程序。系统通常包含一些单独的程序、用于设置这些程序的配置文件,可能还包括描述系统结构的系统文档和解释如何使用该系统的用户文档,以及告知用户下载最新产品信息的Web站点。
这是专业软件开发与业余软件开发的一个重要区别。如果你只是自己编写一个程序,且除你自己之外没有别的用户的话,你就不用写程序指南和设计文档等。然而,如果你的软件有别的用户,并且别的工程师会去修改它的话,你就必须提供除了程序源码之外的其他附带的信息。
软件工程人员关心的是软件产品(即能卖给客户的软件)的开发。软件产品有以下两类:
1 通用软件产品由软件开发机构制作,在市场上公开销售,可以独立使用。这类软件产品有数据库软件、字处理软件、绘图软件以及工程管理工具等。还包括用于特定目的的所谓的“垂直”应用产品,如图书馆信息系统、财务系统等。
2 定制软件产品这些产品受特定的客户委托,由软件承包商专门为这类客户开发。这类软件有电子设备的控制系统、特定的业务处理系统和空中交通管制系统等。
这两类产品的一个重要区别在于:在通用软件产品中,软件描述由开发者自己完成,而定制软件产品,其软件描述通常是由客户给出,开发者必须按客户要求进行开发。
然而,这两类产品之间的界线正在变得越来越模糊。现在更多的公司从一个通用软件产品开始进行定制处理,以满足特别客户的具体要求。企业资源规划(ERP)这类系统,如SAP系统,就是这种方法的一个最好见证。像这样的一个庞大而复杂的系统,需要通过嵌入一系列信息,比如说业务和操作规则以及各种报表等,以适应一个新企业。
软件除了提供相应的功能以外,作为一个产品它还有一系列相关的反映质量的属性。这些属性不直接涉及软件的功能,而是反映软件在执行时的行为以及源程序的结构、组织及相关的文档。软件对用户查询的响应时间和程序代码的可理解性就属于这类属性(有时称为非功能性属性)。
软件系统在具体应用中,用户可能会要求其具有特殊的属性。例如,银行系统必须安全可靠、交互式游戏必须响应快、电话交换系统必须可靠等,这些都是设计精良的软件系统必须具有的属性,这些属性归纳于图12中。这些属性也是专业化软件系统应具备的基本属性。产品特性 描述可维护性 软件必须能够不断进化以满足客户的需求变化,这是软件产品最根本的特性,因为工作环境是不断变化的,软件也必然要跟着变化可依赖性和安全性 软件可依赖性还包括一些特性:可靠性、保密性、安全性。可靠的软件在系统失败的情况下,也不会导致物理性损害和经济损失。有恶意的人员不能访问或破坏系统有效性 软件不要浪费内存和处理器等系统资源,因而有效性应包括响应时间、处理时间和内存利用率等方面可用性 软件必须简单易用,容易被用户接受。这就意味着,它必须是容易理解的、易用的并且和其他系统是兼容的图12好软件的重要属性
>软件工程
作者: Ian Sommerville
原作名: Software Engineering, Ninth Edition
isbn: 7111334981
书名: 软件工程
页数: 468
译者: 程成
定价: 75.00元
出版社: 机械工业出版社
装帧: 平装
出版年: 2011-5