《现代大学计算机基础》课件第11章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《现代大学计算机基础》课件第11章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 现代大学计算机基础 现代 大学计算机 基础 课件 11
- 资源描述:
-
1、第11章 软件工程第11章 软件工程 11.1 软件危机与软件工程软件危机与软件工程 11.2 可行性研究可行性研究 11.3 需求分析需求分析 11.4 概要设计概要设计 11.5 详细设计和编码详细设计和编码 11.6 软件测试软件测试 11.7 软件维护软件维护 第11章 软件工程11.1 软件危机与软件工程软件危机与软件工程11.1.1 软件的发展、定义及特点软件的发展、定义及特点1.软件的发展软件的发展计算机硬件的发展遵循摩尔定律,即每18个月芯片的性能提高一倍。但软件的发展也非常迅速,在软件体系结构上,经历了从主机结构到文件服务器结构,从客户端/服务器到基于Internet的浏览器
2、/服务器结构的变化;在程序语言上,经历了从机器语言到汇编语言,从高级语言到第四代语言的变化;在开发工具上,经历了从分离开发工具到集成的可视化开发工具,从简单的命令行调试器到多功能调试器等变化。第11章 软件工程2.软件的定义软件的定义软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,使计算机系统具有较高的总体效用,在设计计算机系统时,必须通盘考虑软件与硬件的结合,以及用户的要求和软件的要求。因此,我们可将软件定义如下:(1)在运行中能够提供所要求的功能和性能的指令或计算机程序集合。(2)使程序能够正确运行的数据结构。(3)描述程序
3、功能需求以及程序如何操作和使用所要求的文档。第11章 软件工程3.软件的特点软件的特点在计算机系统中,软件是一个逻辑部件,而硬件是一个物理部件。因此,软件相对硬件而言有许多特点。为了能全面、正确地理解计算机软件及软件工程的重要性,必须了解软件的特点。软件的特点可归纳如下:(1)软件是一种实体,不是具体的物理实体,因而它具有抽象性。人们可以把它记录在介质上,但却无法看到软件的形态,而必须通过测试、分析、思考和判断去了解它的功能、性能及其他特性。(2)软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。一旦某一软件项目研制成功,以后就可以大量地复制同一内容的副
4、本。第11章 软件工程(3)在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。软件维护比硬件维护要复杂得多。(4)软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖。为了解除这种依赖,在软件开发中提出了软件移植的问题,并且把软件的可移植性作为衡量软件质量的因素之一。(5)软件的开发尚未完全摆脱手工的开发方式。因此,为了提高软件开发的效率,应促进软件技术的进展,提出和采用新的开发方法。例如,近年来出现的充分利用现有软件的复用技术、自动生成技术和其他一些有效的软件开发工具或软件开发环境,既方便了软件开发的质量控制,又提高了软件开发的效率。第11章 软件工程(6)软件的
5、开发费用越来越高。(7)软件的开发是一个复杂的过程。(8)软件的生产过程较简单,软件生产过程就是复制过程。第11章 软件工程11.1.2 软件危机与软件工程软件危机与软件工程在20世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式。第11章 软件工程60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高
6、级语言开始出现,操作系统的发展引起了计算机应用方式的变化,大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件的生产方式,提高软件生产率,软件危机开始爆发。1968年,北大西洋公约组织(NATO)的计算机科学家在联邦德国召开国际学术会议,讨论软件危机(Software Crisis)问题。在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生。第11章 软件工程1.什么是软件危机什么是软件危机软件危机是指在软件开发和维护过程中所遇到的一系列严重问题,
7、这些问题皆可能导致软件产品的寿命缩短、甚至夭折。这些问题绝不仅仅是“不能正常运行”的软件才具有的,实际上几乎所有软件都不同程度地存在这些问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。具体地说,软件危机主要有下述一些表现:第11章 软件工程(1)对软件开发成本和进度的估计常常很不准确。实际成本比估计成本有可能高出一个数量级,实际进度比预期拖延几个月甚至几年的现象并不罕见。这种现象降低了软件开发组织的信誉。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。(2)产品不符
8、合用户的实际需要。(3)软件产品的质量差。软件可靠性和质量保证的定量概念刚刚出现不久,软件质量保证技术(审查、复审和测试)没有贯穿到软件开发的全过程中,这些都导致软件产品发生质量问题。第11章 软件工程(4)软件的可维护性差。很多程序中的错误是难以改正的,实际上不可能使这些程序适应新的硬件环境,也不能根据用户的需要在原有程序中增加一些新的功能。没能实现软件的可重用,人们仍然在重复开发功能类似的软件。(5)软件文档资料通常不完整也不合格。软件文档资料应该是在软件开发过程产生出来的,而且应该是“最新的”(即和程序代码完全一致的)。软件开发组织的管理人员可以利用它们作为“里程碑”,来管理和评价软件开
9、发工程的进展状况;软件开发人员可以利用它们在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更是必不可少的。第11章 软件工程(6)软件成本在计算机系统总成本中所占的比例逐年上升。(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。以上列举的仅仅是软件危机的一些明显的表现,与软件开发和维护有关的问题远远不止这些。第11章 软件工程2.产生软件危机的原因产生软件危机的原因通过对一系列危机现象的研究,人们总结发现,产生软件危机的原因主要体现在以下几个方面。(1)软件的不可见特性。软件不同于
10、硬件,它是计算机系统中的逻辑部件,缺乏“可见性”。例如,软件中存在的程序行错误,就必须等到这行程序执行时才有可能被发现。软件的不可见特性也使得对软件项目的量化管理更难实施,对软件质量的量化评价更难操作。(2)软件系统规模庞大。软件成为产品以后已不同于早期程序,随着它的功能的增多,其规模、复杂程度越来越大。例如,1968年美国航空公司订票系统达到30万条指令。第11章 软件工程(3)软件生产工程化管理程度低。软件生产的工程化管理是软件作为产品所必需的,这意味着软件也需要像硬件一样,在软件分析、设计完成之后,才能考虑软件的实现。应该说,工程化管理能够降低解决问题的代价。但是,许多软件的开发则往往是
11、在分析、设计没有完成的情况下,就已经进入编码实现阶段。由于前期准备工作不充分,致使软件项目管理纷乱,严重影响软件项目成本、开发进度和软件质量。(4)对用户需求关心程度不够。软件开发机构不熟悉用户业务领域。软件技术人员所关注的仅仅是计算机技术,它们不太愿意和用户沟通,轻视对用户的需求调查,也缺乏有效的用户调查策略、手段。由于这些问题的存在,使得用户的需求意愿不能充分反映,或被错误理解。第11章 软件工程实际上,软件是为用户开发的,只有用户才能真正了解他们自己的需要。由于没有对用户做大量深入细致的调查研究,以致软件需求规格定义不准确,并最终使得完成后的软件不能适应用户的应用需要。(5)对软件维护重
12、视程度不够。软件开发缺乏统一的规范。在软件产品开发过程中,开发者很少考虑到这个软件今后还需要提供维护。但是,软件的使用周期漫长,软件错误具有隐蔽性,许多年之后软件仍可能需要改错。另外,软件的工作环境也可能会在几年后发生改变;用户也可能在软件运行几年以后,要求对它增加新的功能。这些都是属于软件维护问题。实际上,软件的可维护性是衡量软件质量的一项重要指标,软件可维护性程度高,软件就便于修正、改版和升级,由此可以使软件具有更长的使用寿命。第11章 软件工程(6)软件开发工具自动化程度低。尽管软件开发工具比30年前已经有了很大的进步,但直到今天,软件开发仍然离不开工程人员的个人创造与手工操作,软件生产
13、仍不可能像硬件设备的生产那样,达到高度的自动化。第11章 软件工程3.消除软件危机的途径消除软件危机的途径为了消除软件危机,首先应该对计算机软件有一个正确的认识。正如前面所述,应该彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念。一个软件必须由一个完整的配置组成,事实上,软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。1983年IEEE为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。虽然表面上看来在这个定
14、义中列出了软件的5个配置成分,但是,方法和规则通常是在文档中说明并在程序中实现的。第11章 软件工程更重要的是,必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。第11章 软件工程应该开发和使用更好的软件工具。正如机械工具可以“放大
15、”人类的体力一样,软件工具可以“放大”人类的智力。在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做得既快又好。如果把各个阶段使用的软件工具有机地集合成一个整体,支持软件开发的全过程,则称为软件工程支撑环境。总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。第11章 软件工程4.软件工程软件工程软件工程是指导计算机软件开发和维护的工程学科,是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证
16、明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。自从1968年在联邦德国召开的国际会议上正式提出并使用了“软件工程”这个术语以来,研究软件工程的专家学者陆续提出了100多条关于软件工程的准则。著名软件工程专家B.W.Boehm综合有关专家和学者的意见并总结了多年来开发软件的经验,于1983年在一篇论文中提出了软件工程的七条基本原理:第11章 软件工程(1)用分阶段的生命周期计划进行严格的管理。有人经统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的。在软件开发与维护的漫长的生命周期中,需要完成许多性质各异的工作。这条基本原理意味着,应该把软件生命周期划分成若干
17、个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划第11章 软件工程(2)坚持进行阶段评审。当时已经认识到,软件的质量保证工作不能等到编码阶段结束之后再进行。这样说至少有两个理由:第一,大部分错误是在编码之前造成的,例如,根据Boehm等人的统计,设计错误占软件错误的63%,编码错误仅占37%;第二,错误发现与改正得越晚,所需付出的代价也越高。因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。第
18、11章 软件工程(3)实行严格的产品控制。在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的,只能依靠科学的产品控制技术来顺应这种要求。也就是说,当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。所谓基准配置又称为基线配置,它们是经过阶段评审后的软件配置成分。各个阶段产生的文档或程序代码基准配置管理也称为变动控制:一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改。绝对不能谁想修改软件(包括尚在开发过程中的软件),就随意
19、进行修改。第11章 软件工程(4)采用现代程序设计技术。从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序设计技术,并进一步研究各种先进的软件开发与维护技术。实践表明,采用先进的技术不仅可以提高软件开发和维护的效率,而且可以提高软件产品的质量。(5)应能清楚地审查软件工程结果。软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品。软件开发人员(或开发小组)的工作进展情况可见性差,难以准确度量,从而使得软件产品的开发过程比一般产品的开发过程更难于评价和管理。为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使
20、得所得到的结果能够清楚地审查。第11章 软件工程(6)开发小组的人员应该少而精。这条基本原理的含义是,软件开发小组的组成人员的素质应该好,而人数则不宜过多。开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且素质高的人员所开发的软件中的错误明显少于素质低的人员所开发的软件中的错误。此外,随着开发小组人员数目的增加,因为交流情况讨论问题而造成的通信开销也急剧增加。第11章 软件工程(7)承认不断改进软件工程实践的必要性。遵循上述6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但是,仅有上述6条原理
21、并不能保证软件开发与维护的过程能赶上时代前进的步伐,能跟上技术的不断进步,因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第7条基本原理。按照这条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验,例如,收集进度和资源耗费数据,收集出错类型和问题报告数据等。这些数据不仅可以用来评价新的软件技术的效果,而且可以用来指明必须着重开发的软件工具和应该优先研究的技术。第11章 软件工程11.1.3 软件工程方法学软件工程方法学软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源
22、,以达到既定目标的过程。通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。软件工程方法学包含3个要素:方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得髙质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。第11章 软件工程目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。1.传统方法学传统方法学传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件
23、工具或软件工程环境来支持结构化技术的运用。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。采用这种方法学开发软件的时候,从对问题的抽象逻辑分析开始,一个阶段一个阶段地顺序进行开发。前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,第11章 软件工程而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进了更多的实现细节。每一个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。在每一个阶段结束之前都必须进行正式严格的技术审査和管理复审,从技术和管理两个方面对这个阶段的开发成果进行检查,通过之后
24、这个阶段才算结束;如果没通过检查,则必须进行必要的返工,而且返工后还要再经过审查。审查的一条主要标准就是每个阶段都应该交出“最新式的即和所开发的软件完全一致的”高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用。文档是通信的工具,它们清楚第11章 软件工程准确地说明了到这个时候为止,关于该项工程已经知道了什么,同时奠定了下一步工作的基础。此外,文档也起备忘录的作用,如果文档不完整,那么一定是某些工作忘记做了,在进入生命周期的下一个阶段之前,必须补足这些遗漏的细节。目前,传统方法学仍然是人们在开发软件时使用得十分广泛的软件工程方法学。这种方法学历史悠久,为广大软件工程
25、师所熟悉,而且在开发某些类型的软件时也比较有效。第11章 软件工程2.面向对象方法学面向对象方法学当软件规模庞大,或者对软件的需求是模糊的或会随时间变化而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。数据和对数据的处理原本是密切相关的,把数据和操作人为地分离成两个独立的部分,自然会增加软件开发与维护的难度。与传统方法相反,面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。第11章 软件工程概括地说,面向对象方法学具有下述4个要点。(1)把对象作为融合了数据及在数据上的操作行为的统一的软
展开阅读全文