软件工程 第1章 软件工程概述.ppt
《软件工程 第1章 软件工程概述.ppt》由会员分享,可在线阅读,更多相关《软件工程 第1章 软件工程概述.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章软件工程概述【本章引言】自从1946年第一台电子计算机诞生以来,计算机的研究生产和应用得到迅猛的发展,计算机系统已经经历了四个不同的发展阶段,计算机科学成为当今世界上发展最快和应用最广的学科之一。然而,我们仍然没有彻底摆脱“软件危机”困扰,软件已经成为限制计算机系统发展的关键因素。为了克服这种困扰,软件工作者在不断的研究消除软件危机的方法,从而逐步形成了计算机科学技术领域中的一门新兴的工程学科软件工程。本章将对软件概念、软件分类、软件发展、软件危机、软件工程概念、软件生命周期及软件开发模型等方面做简要的介绍,通过本章学习,可为后几章软件工程的深入学习打下基础。【本章重点】软件工程概念软件
2、生命周期软件开发模型【学习目标】理解软件工程的基本概念和软件生命周期了解软件开发的几种模型1.1 软件概述1.2 软件工程的概述1.3 软件生命周期1.4 软件开发模型1.5 小结1.6 习题第一章软件工程概述1.1.1 软件的概念1.1.2 软件的分类1.1.3 软件的发展1.1.4 软件危机1.1 软件概述1.1.1 软件的概念随着计算机技术的快速发展,硬件性能有了极大的提高,计算机体系结构发生了深刻的变化,内存和存储容量的快速增加,以及各种各样的输入和输出选择等,所有这些都促进了更高级和更为复杂的基于计算机系统的开发。软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关
3、文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。1.1.2 软件的分类 软件多种多样,随着软件复杂程度的增加,软件的界限越来越不明显。按软件的作用,一般可以分为以下几类。1系统软件 系统软件(system software)是指能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件、和数据协调高效地工作的软件。系统软件是计算机系统的重要组成部分,它支持应用软件的开发和运行。系统软件包括:操作系统、网络软件、编译程序、数据库管理程序、文件编辑系统、系统检查与诊断软件等。2应用软件 应用
4、软件(application software)则是在系统软件基础上,为解决特定的领域应用而开发的软件。按其性质不同可以分为以下几类:事务软件 事务信息处理是一个最大的软件应用领域。如工资单、收/支计算、存货盘点报表等。这些独立的系统可以组成管理信息系统(MIS)软件,它从一个或多个装有事务信息的数据库中存取数据。在这个领域中的应用是重新建立已有的数据,便于事务操作或做出管理决策。另外,除了传统的数据处理应用,事务软件还可以实现交互计算(如营业点的交易处理)。1.1.2 软件的分类实时软件 监视、分析和控制现实世界中发生的事件,能以足够快的速度对输入信息进行处理并在规定的时间内作出反应的软件,
5、称之为实时软件。实时软件包括四个组成部分:数据采集器(负责从外部环境中获取和格式化信息)、分析器(负责将信息转换成应用所需要的形式)、输出/控件器(负责响应外部环境)、管理器(负责协调系统各个部件工作,使系统能保持在一个可接受的响应时间内给实时响应)。实时系统必须在严格的时间范围内响应,因此实时软件和计算机系统必须有很高的可靠性和安全性。1.1.2 软件的分类工程和科学软件 工程和科学软件具有数值算法的特点。其应用范围从天文学到火山学;从自动应力分析到空间航天飞机轨道动力学;从分子生物学到自动化制造。但是,在工程和科学领域中的新的应用已经远离传统的数值算法。计算机辅助设计(CAD)、系统模拟和
6、其他交互应用系统已经做到具有实时和系统软件的特点。1.1.2 软件的分类嵌入式软件 嵌入式计算机系统将计算机嵌入在某一系统之中,使之成为该系统的重要组成部分、控制该系统的运行,进而实现一个特定的物理过程。用于嵌入式计算机系统的软件称为嵌入式软件(embedded software)。大型的嵌入式计算机系统软件可用于航空航天系统、指挥控制系统、武器系统等;小型的嵌入式计算机系统软件可用于工业的智能化产品之中,这时嵌入式软件驻留在只读存储内,为该产品提供各种控制功能和仪表的数字或图形显示功能等。如汽车的刹车控制,空调机、洗衣机的自动控制等。1.1.2 软件的分类个人计算机软件 个人计算机软件市场在
7、过去的十几年就已经兴起。发展字处理、电子报表、计算机图形、家庭游戏、数据库管理、个人和事务财务应用、外部网络或数据库存取等数百种应用。事实上,个人计算机软件体现了一些最具有创新的软件人机界面设计。基于Web的软件 浏览器检索的Web界面是软件,它结合了可执行的指令(CGI、HTML、Perl或Java)和数据(超文本和视频及音频的多种数据)。本质上,网络变成了一个巨大的计算机,提供了一个几乎无限的可通过任何调制解调器被访问的软件资源。1.1.2 软件的分类人工智能软件 人工智能(AI)软件采用非数值算法来解决不适于直接计算和分析的复杂问题。一般说来,这些问题都不能通过计算或直接分析而得到答案。
8、迄今为止,在专家系统、模式识别、自然语言理解、人工神经网络、程序验证、自动程序设计、机器人学等领域开发了许多人工智能应用软件,用于诊断疾病、产品检测、自动定理证明、图像和语言自动识别、语言翻译等。1.1.2 软件的分类3工具软件 这是20世纪80年代发展起来,是系统软件和应用软件之间的支持软件。一般用来辅助和支持开发人员开发和维护应用软件,以提高软件的开发质量和生产率。它包括需求分析工具、设计工具、编码工具、测试工具、维护工具和管理工具等。工具软件又可分为垂直工具软件和水平工具软件。垂直工具软件是指生命周期的某一阶段特定活动所使用的工具软件,如分析、设计、测试等活动;水平工具软件是指整个生命周
9、期活动所使用的工具软件,如项目管理、配置管理等活动。1.1.2 软件的分类4可重用软件 可重用技术是最近几年提出来的。实际上过去就有这种技术,如各种标准程序库,通常它是计算机厂家提供的系统软件中的一部分,对这些标准程序库里的标准子程序稍加改造,甚至不经改造就可以把它们编入新开发的程序。但过去的这种标准程序应用面比较窄,大多只限于一些数学子程序。今天,世界已把可重用范围扩展到算法以外,数据结构也可以重用。20世纪90年代的可重用构件则是把数据和相应的操作两者封装在一起(通常叫做类或对象),使软件工程师能够用可重用构件来建立新的应用程序。例如,现在的交互式界面一般就是用这种可重用构件组成的。这些可
10、重用构件能够建立图形窗口、下拉菜单、以及各种交互机制。建立这样的界面所需要的数据结构和处理细节都包含在一个由界面构件所组成的可重用库里。1.1.2 软件的分类1.1.3 软件的发展 自20世纪40年代世界上第一台计算机问世以来,软件经历了程序设计、程序系统及软件工程三个阶段的发展。程序设计阶段(20世纪50年代至60年代)的软件指的是程序,程序的开发采用个体工作的方式,开发工作主要依赖于开发人员的个人技能和程序设计的技巧,软件的质量得不到保证,缺乏与程序有关的文档。程序系统阶段(20世纪60年代至70年代)的软件是指程序和说明书,软件开发采用开发小组工作的方式,开发工作主要依赖于开发小组的水平
11、,文档资料的不齐全给软件维护带来了很大的难度,软件技术的发展不能满足需要。软件工程阶段(20世纪70年代以后)的软件则是指程序、文档、数据,由开发小组及大中型软件开发机构承担开发软件的任务,开发工作主要依赖于整个机构的管理水平,采用多种开发技术。目前在很多应用领域,人们开始采用面向对象的软件开发技术。专家系统、人工智能软件开始走向实际应用。软件技术呈现国际化、网络化、服务化等多种发展趋势。互联网作为二十世纪最重要的科技成果之一,给人类生活和经济发展都带来了深远的影响,它所展现出的勃勃商机,吸引了众多厂商围绕互联网开发软件,与分布计算、网络和互联网相关的软件技术成为软件领域的主要技术热点。此外,
12、自由软件潮流、智能化、简易化、多样化等趋势正极大地拓展软件产业的发展空间,派生出许多具有成长潜力的新兴领域。1.1.3 软件的发展1.1.4 软件危机1软件危机的含义 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的。实际上,几乎所有软件都不同程度地存在这些问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。鉴于软件危机的长期性和症状不明显的特征,近年来有人建议把软件危机更名为“软件萧条(depression)”或“软件困扰(afflication)”。不过“软件危
13、机”这个词强调了问题的严重性,而且也已为绝大多数软件工作者所熟悉,所以本书仍将沿用它。1.1.4 软件危机2产生软件危机的原因 产生软件危机的原因很多,总结起来有以下几点:由于缺乏软件开发经验和有关软件开发数据的积累,使得 开发工作的计划很难制定,以致经常出现超出经费预算,无法遵循进度计划,完成开发的期限一再拖延等情况。软件需求在开发的初期阶段不够明确,或是未能得到确切的表达。开发工作开始后,软件人员和用户又未能及时交换意见,造成矛盾在开发后期集中暴露。开发过程没有统一、公认的方法论和规范进行指导,参加开发的人员各行其事。另外,设计和实现过程的资料很难维护。未能在测试阶段做好充分的检测工作,提
14、交至用户的软件质量差,在运行过程中暴露出大量的问题。1.1.4 软件危机3软件危机的解决方法 为了消除软件危机,首先应该对计算机软件有一个正确的认识。应该彻底清除在计算机系统早期发展阶段形成的“软件就是程序”的错误概念。一个软件必须由一个完整的配置组成。事实上,软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。1983年IEEE为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必须的数据。虽然表面上看来在这个定义中列出了软件的5个配置成
15、分,但是方法和规则通常是在文档中说明并在程序中实现的。1.1.4 软件危机 更重要的是,必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误的概念和做法。1.1.4 软件危机 应该开发和使用更好的软件工具。正如机械工具可以“放大”人类的体力一样,
16、软件工具可以“放大”人类的智力。在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当软件工具辅助下,开发人员可以把这类工作做得既快又好。如果把各个阶段使用的软件工具有机地集合成一个整体,支持软件开发的主过程,则称为软件工程支撑环境。总之,为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。1.2 软件工程的概念1.2.1 软件工程的定义和原理1.2.2 软件工程的目标1.2.3 软件工程的原则1.2.1 软件工程的定义和原理1软件工程的定义 软件工程(software engineerin
17、g)这个名词是北大西洋公约组织(NATO)科学技术委员会1968年秋在当时的联邦德国召集了近50名第一流的编程人员、计算机科学家和工业界巨头,制定摆脱软件危机的办法时提出来的。尽管当时专家们无法设计出一张指导软件业走向更牢固阵地的详细路线图,但他们借鉴硬件工程的办法,确实为解决软件这一难题,不仅创造了一个新名词软件工程,还使软件工程有了方向。从1968年到现在已经40多年,应该说,在今天,软件工程已发展成为一门独立的学科。1.2.1 软件工程的定义和原理 关于什么是软件工程的定义,每一位软件工程的作者都给出了自己的不同理解。我们把它定义为:运用工程学的原理和方法来组织和管理软件的生产和维护,以
18、保证软件产品开发,运行和维护的高质量和高生产率。1993年,IEEE在IEEE Standard Collecation:Software Engineering给出了以下全面的定义:应用系统的、规范的和可量化的方法去开发、运行和维护软件,即软件的工程化应用。对(1)中所述方法的研究。1.2.1 软件工程的定义和原理2软件工程的基本原理 自从1968在联邦德国召开的国际会议上正式提出并使用了“软件工程”这个术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或“信条”。著名的软件工程专家B.W.Boehm综合这些学者们的意见并总结了TRW公司多年开发软件的经验,于1983年
19、在一片论文中提出了软件工程的7条基本原理。他认为这7条原理是确保软件产品质量和开发效率原理的最小集合。这7条原理是互相独立的,其中任意6条原理的组合都不能代替另一条原理。因此,它们是缺一不可的最小集合。然而这7条原理又是相当完备的,人们虽然不能用数学方法严格证明它们是一个完备的集合,但是可以证明在此之前已经提出的100多条软件工程原理都可以由这7条原理的任意组合蕴含或派生。1.2.1 软件工程的定义和原理下面简要介绍软件工程的7条基本原理。用分阶段的生命周期计划严格管理 有人经统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的,可见把建立完善的计划作为第1条基本原理是吸取了前人的教训
20、而提出来的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条基本原理意味着,应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。Boehm认为,在软件的整个生命周期中应该制定并严格执行六类计划,它们是项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划和运行维护计划。不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划。1.2.1 软件工程的定义和原理坚持进行阶段评审 当时已经认识到,软件的质量保证工作不能等到编码阶段结束之后再进行。这样说至
21、少有两个理由:第一,大部分错误是在编码之前造成的。例如,根据Boehm等人的统计,设计错误占软件错误的63%,编码错误仅占37%;第二,错误发现与改正得越晚,所需付出的代价也越高。因此,在每个阶段都进行严格评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。1.2.1 软件工程的定义和原理实行严格的产品控制 在软件开发过程中不应随意改变需求,以为改变一项需求往往需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的。由于外部环境的变化,相应地改变用户需求是一种客观需要,显然不能硬性禁止客户提出改变需求的要求,而只能依靠科学的产品控制技术来顺应这种要求。也就是说,当改变
22、需求时,为了保持软件各个配置成份的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。所谓基准配置又称为基线配置,它们是经过阶段评审后的软件配置成份(各个阶段产生的文档或程序代码)。基准配置管理也称为变动控制:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准后才能实施修改。绝不能谁想修改软件(包括尚在开发过程中的软件),就随意进行修改。1.2.1 软件工程的定义和原理采用现代程序设计技术 从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序设计技术。20世纪60年代末提出的结构程序设计技术,已经成为绝大多数人公认的程序设计技术
23、。以后又进一步发展出各种结构分析(SA)与结构设计(SD)技术。近年来,面向对象技术已经在许多领域中迅速地取代了传统的结构开发方法。实践证明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。1.2.1 软件工程的定义和原理结果应能清楚地审查 软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品。软件开发人员(或开发小组)的工作进展情况可见性差,难以准确度量,从而使得软件产品的开发过程比一般产品的开发过程更难于评价和管理。为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚
24、地审查。1.2.1 软件工程的定义和原理开发小组的人员应该少而精 这条基本原理的含义是,软件开发小组的组成人员的素质应该好,而人数则不宜过多。开发小组人员的素质和数量,是影响软件产品质量和开发效率的重要因素。素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件中的错误。此外,随着开发小组人员数目的增加,因为交流情况讨论问题而造成通信开销也急剧增加。当开发小组人员数为N时,可能的通信路径有N(N-1)/2条,可见随着人数N的增大,通信开销将急剧增加。因此,组成少而精的开发小组是软件工程的一条基本原理。1.2.1 软
25、件工程的定义和原理承认不断改进软件工程实践的必要性 遵循上述六条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产。但是,仅有上述六条原理并不能保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条基本原理。按照这条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。例如,收集进度和资源耗费数据,收集出错类型和问题报告数据等。这些数据不仅可以用来评价新的软件技术的效果,而且可以用来指明必须着重开发的软件工具和应该优先研究的技术。1.2.2 软件工程的目标 组织实施软件工程项目,从技术
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 第1章 软件工程概述 概述
限制150内