1、软件工程学教程第二版,周 苏 教授ZQQ: 81505050,软件工程课程说明,实际上课时间:去除长假1周,共12周,第13周复习/考试教学要求及考试范围覆盖软件工程学教程全书各章教材中的“习题”按教师要求完成并计入本课程的“平时成绩”本课程上机实验的主要内容是以指定或自选开发项目为基础依据国家标准的有关规定编制软件生存周期各阶段的软件文档主要文档作为期中考核内容初步了解 Sybase PowerDesigner 和 Microsoft Project期末进行闭卷考试,软件工程教材与教参,教 材软件工程学教程(第二版),周苏等编著,科学出版社,2004教学参考书软件工程美,黄柏素等译,机械工业
2、出版社,1999GB/T8566-2001信息技术 软件生存周期过程GB/T8567-1988计算机软件产品开发文件编制指南周课时:5课时/周 * 12,第1章 传统软件工程概述,计算机系统的发展软件、软件生存周期和软件生存周期过程软件生存周期模型软件工程定义,第1章 传统软件工程概述,进入60年代,人们开始逐渐认识到了确实存在着“软件危机” 这样一个事实。例如:软件生产不能满足日益增长的需要软件开发成本和开发进度估计往往不准确软件开发人员和用户之间信息交流不充分,用户对完成的软件满意度很低软件价格昂贵,软件成本在整个计算机系统中所占的比例急剧上升,软件已成为许多计算机系统中花钱最多的项目软件
3、质量难以保证软件可维护性差,程序中的错误很难改正,适应性或完善性维护都极其困难,第1章 传统软件工程概述,导致危机问题的一个重要原因,是由于软件研制和维护本身是工程性的任务,但软件人员采取的方式却未能工程化为克服软件危机,人们开始考虑采用工程化方法和工程途径来研制和维护软件,第1章 传统软件工程概述,60年代末至70年代初开始,逐渐发展起一组总称为“软件工程”的技术这些技术把软件作为一个工程产品来处理:它需要计划、分析、设计、实现、测试以及维护软件工程学主要研究软件结构、软件设计方法论、软件工具、软件工程标准和规范,以及与软件工程有关的理论等软件产业的逐步建立,也带动了软件工程这门学科的发展。
4、同时,软件生产的系列化、产品化、工程化和标准化形成了软件产业的标志,1.1 计算机系统的发展,软件工程和硬件工程都可以看成是一门更广义的学科计算机系统工程的一部分用于计算机硬件的工程技术是由电子设计技术发展起来的,已经达到了比较成熟的水平,可靠性已是一种可以期待的现实而不再是一种愿望但是,软件已经取代硬件成为系统中设计起来最困难、最不容易成功 (按时完成和不超过预计的成本) ,而且是最不易管理的部分另一方面,随着以计算机为基础的系统在数量、复杂程度和应用范围上的不断增长,对软件的需求却仍然有增无减,1.1.1 计算机系统及其软件的发展,软件发展的历史与计算机系统发展紧密相关计算机系统发展的初期
5、 (5060年代) ,程序设计时期计算机系统发展的第二个时期(从60年代中期到70年代中期),程序系统时期计算机系统发展的第三个时期从70年代初期开始,软件工程时期如今,计算机系统的发展正在向第四个时期过渡,即从技术性应用向消费性市场过渡,1.1.2 计算机系统工程,计算机系统工程的主要内容是对系统所要求的功能加以揭示、分析,并把它们分配给系统的各个部分在大多数新系统创建时,对系统所要求的功能往往只有模糊的概念。系统分析和系统定义的目的在于揭示摆在面前的项目的范围要对需要进行处理的信息、所要求的功能、所期望的性能以及设计的约束和检验的标准等进行系统、详细的分析范围确定之后,系统工程师必须考虑多
6、种能潜在地满足项目范围的、可供选择的配置。在综合考虑了各项因素之后,选择其中的一种配置,并将系统的功能分配给系统的各个部分,图1-1 计算机系统工程,1.2 软件和软件生存周期,中国大百科全书给软件下的定义是:软件是计算机系统中的程序和有关文件也就是说,“软件”不仅仅是指程序,在软件研制过程中按一定规格产生的各种文件也是软件不可缺少的组成部分,1.2 软件和软件生存周期,一个计算机软件,从出现一个构思之日起,经过开发成功投入使用,在使用中不断增补修订,直到最后决定停止使用,并被另一项软件代替之时止,被认为是该软件的一个生存周期 (或称生命周期、生存期,life cycle)一个软件产品的生存周
7、期可以划分成若干个互相区别而又有联系的阶段,每个阶段中的工作均以上一阶段工作的结果为依据,并为下一阶段的工作提供了前提经验表明,失误造成的差错越是发生在生存周期的前期,在系统交付使用时造成的影响和损失就越大,要纠正它所花费的代价也越高。因而在前一阶段工作没有做好之前,决不要草率地进入下一阶段,1.2 软件和软件生存周期,国家标准 GB/T8566-2001信息技术 软件生存周期过程将软件生存周期划分为以下8个阶段可行性研究与计划需求分析概要设计详细设计实现 (包括单元测试)组装测试 (即集成测试)确认测试使用和维护,1.2 软件和软件生存周期,GB/T8567-88计算机软件产品开发文件编制指
8、南建议在软件的开发过程中编制下述14种文件可行性研究报告项目开发计划软件需求说明书数据要求说明书概要设计说明书详细设计说明书数据库设计说明书,用户手册操作手册模块开发卷宗测试计划测试分析报告开发进度月报项目开发总结报告,图1-2 软件生存周期的瀑布模型,图1-3 软件生存周期工作量分配,图1-4 开发期工作量分配,1.3 软件生存周期模型,在软件工程中,重要的概念是软件生存周期模型 (又称软件开发模型) 以及软件生存周期过程软件生存周期模型可以定义为:是软件开发全部过程、活动和任务的结构框架软件生存周期模型能清晰、直观地表达软件开发全过程,明确规定了开发工作各阶段所要完成的主要活动和任务,以作
9、为软件项目开发工作的基础对于不同的软件系统,可以采用不同的开发方法、使用不同的程序设计语言以及各种不同技能的人员参与工作、运用不同的管理方法和手段等,以及允许采用不同的软件工具和不同的软件工程环境软件生存周期模型是稳定有效和普遍适用的,1.3 软件生存周期模型,软件生存周期过程可分为基本生存周期过程获取过程、供应过程、开发过程、运作过程和维护过程等支持生存周期过程组织生存周期过程软件生存周期模型仅对软件的开发、运作、维护过程有意义,在ISO12207和ISO9000-3中都提到软件生存周期模型,它包括:瀑布模型、渐增模型、演化模型、螺旋模型、喷泉模型和智能模型等,1.3.1 瀑布模型,瀑布模型
10、是1970年W. Royce提出的最早的软件开发模型软件维护构成了生存周期的循环表示如果把软件维护看作是软件的二次开发,便有了软件生存周期的b形表示在评价瀑布模型时,应考虑以下的相关风险需求未被充分理解系统太大而一次不能做完所有的事事先打算采用的技术迅速发生变化需求迅速发生变化有限的资源无法利用某一中间产品,图1-5 软件生存周期循环,图1-6 具有维护循环的软件生存周期,维护循环,1.3.2 渐增模型,是指从一组给定的需求开始,通过构造一系列可执行的中间版本来实施开发活动第一个中间版本纳入一部分需求,下一个中间版本纳入更多的需求,依此类推,直到系统完成每个中间版本都要执行必要的过程、活动和任
11、务,如:需求分析和体系结构设计需要执行一次,而详细设计、编码和测试、软件组装和验收测试在每个中间版本构造过程中都执行在评价该模型时,需要考虑的风险因素是需求未被很好地理解突然提出一些功能事先打算采用的技术迅速发生变化需求迅速发生变化长时期内仅有有限的资源保证 (工作人员/资金),图1-7 渐增模型示意,1.3.3 演化模型,主要针对事先不能完整定义需求的软件项目开发对需要开发的软件给出基本需求,作第一次试验开发,其目标仅在于探索可行性和弄清需求,取得有效的反馈信息,以支持软件的最终设计和实现通常把第一次试验性开发出来的软件称为原型。这种开发模型可以减少由于需求不明给开发工作带来的风险与渐增模型
12、的区别是:演化模型承认需求不能被完全了解,且不能在初始时就确定。在该模型中,需求一部分被预先定义,然后在每个相继的中间版本中逐步完善对所有的中间版本,开发过程中的活动和任务通常接同一顺序被重复使用。维护过程和运作过程可以与开发过程平行地使用。获取过程、供应过程、支持过程和组织过程通常与开发过程平行地使用,图1-8 演化模型示意,1.3.4 螺旋模型,该模型是B. Boehm于1988年提出的,它将瀑布模型与演化模型相结合,并增加了两者所忽略的风险分析该模型通常用来指导大型软件项目的开发。它将开发划分为制订计划、风险分析、实施开发和客户评估四类活动。沿着螺旋线每转一圈,表示开发出一个更完善的新的
13、软件版本如果开发风险过大,开发机构和客户无法接受,项目有可能就此终止;多数情况下,会沿着螺旋线继续下去,自内向外逐步延伸,最终得到满意的软件产品沿着螺旋线旋转,在笛卡儿坐标的四个象限上分别表达了四类活动制定计划、风险分析、实施开发、客户评估,图1-9 螺旋模型,1.3.5 喷泉模型,是由B. H. So11ers和J. M. Edwards于1990年提出的一种开发模型,主要用于采用面向对象技术的软件开发项目“喷泉”一词本身就体现了迭代和无间隙的特性软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分无间隙是指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限
14、。由于对象概念的引入,表达分析、设计、实现等活动只用对象类和关系,从而可以较为容易地实现活动的选代和无间隙,使其开发自然地包括复用,图1-10 喷泉模型,1.3.6 智能模型,也称为基于知识的软件开发模型,它是知识工程与软件工程在开发模型上结合的产物它的维护不在程序一级上进行,把问题的复杂性大为降低,从而可以把精力更加集中于具体描述的表达上,即维护在功能规约一级进行具体描述可以使用形式功能规约,也可以使用知识处理语言描述等等,因而必须将规则和推理机制应用到开发模型中,所以必须建立知识库,将模型本身、软件工程知识和特定领域的知识分别存入知识库,由此构成某一领域的软件开发系统,图1-11 智能模型
15、,1.4 软件工程定义,定义一:科学知识在设计和构造计算机程序,以及开发、运作和维护这些程序所要求的有关文档编制中的实际应用定义二:为了经济地获得软件,这个软件是可靠的并且能在实在的计算机上工作,所需要的健全的工程原理 (方法) 的确立和使用定义三:1983年IEEE (国际电气与电子工程师协会) 的软件工程术语汇编中,将软件工程定义为:对软件开发、运作、维护、退役的系统研究方法定义四:1990年新版的IEEE软件工程术语汇编又将定义更改为:对软件开发、运作、维护的系统化的、有纪律的、可定量的方法之应用,即是对软件的工程化应用,1.4 软件工程定义,软件工程已经是一门交叉性学科,它是解决软件问
16、题的工程,对它的理解不应是静止的和孤立的软件工程是应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法来创建软件,从而达到提高质量、降低成本的目的计算机科学和数学用于构造模型、分析算法工程科学用于制定规范、明确风格、评估成本、确定权衡管理科学用于进度、资源、质量、成本等的管理,1.4 软件工程定义,软件工程的目标是明确的,就是研制开发与生产出具有良好的软件质量和费用合算的产品费用合算是指软件开发运行的整个开销能满足用户要求的程度软件质量是指该软件能满足明确的和隐含的需求能力的有关特征和特性的总和,1.4 软件工程定义,软件工程的基础是一些指导性的原则必须认识软件需求的变动性,并采取适
17、当措施来保证结果产品能忠实地满足用户要求。在软件设计中,通常要考虑模块化、抽象与信息隐蔽、局部化、一致性等原则稳妥的设计方法大大地方便软件开发,为达到软件工程的目标,软件工具与环境对软件设计的支持来说,颇为重要软件工程项目的质量与经济开销直接取决于对它所提供的支撑的质量与效用有效的软件工程只有在对软件过程进行有效管理的情况下才能实现,1.4.1 软件工程学的内容,从软件的生产管理技术来分软件的需求定义和分析技术软件设计技术和设计审查技术软件设计表现技术软件测试技术软件可靠性的理论及其评价方法软件扩充和维护软件成本估算等,1.4.1 软件工程学的内容,从内容上可分为理论、结构、方法、工具等部分理
18、论与结构是方法论与工具的基础及前提在方法论与工具方面存在着这样的关系:为了找出行之有效的方法就应该具备合适的工具;反之,为了制造、改进软件工具,也应先有合适的方法要达到如何以较少的代价获得高质量的软件这个目的,就必须研究软件开发方法和软件开发工具软件开发方法就是开发软件的规范化方法工作步骤,即明确软件系统的基本开发步骤及每一步的条件、目的、结果等软件文件格式评价标准,即确定对各种不同的软件开发方案的评价标准,1.4.2 软件工程过程,是指为获得软件产品,在软件工具的支持下,由软件工程师完成的一系列软件工程活动,通常包含4种基本的过程活动P (Plan) :软件规格说明,规定软件的功能及其运行的
19、限制D (Do) :软件开发,产生满足规格说明的软件C (Check) :软件确认,确认软件能够完成客户提出的要求A (Action) :软件演进,为满足客户的变更要求,软件必须在使用的过程中演进事实上,软件工程过程是一个软件开发机构针对某一类软件产品为自己规定的工作步骤,1.4.3 软件工程学的基本目标和原则,软件工程项目的成功,是指达到以下几个主要目标付出较低的开发成本达到要求的软件功能取得较好的软件性能开发的软件易于移植需要较低的维护费用能按时完成开发工作,及时交付使用上述目标有些很可能是互相冲突的若只顾降低开发成本,很可能同时也降低了软件的可靠性如果过于追求提高软件的性能,可能造成所开
20、发软件对硬件有较大的依赖,从而直接影响到软件的可移植性等等,图1-12 软件工程目标之间的关系,1.4.3 软件工程学的基本目标和原则,各种软件工程技术所遵循的基本原则是分解 抽象和信息隐蔽一致性确定性,1.4.4 软件工程与一般工程的差异,软件是逻辑产品而不是实物产品,其功能只能依赖于硬件和软件的运行环境以及人们对它的操作才能得以体现。软件与硬件的密切相关对软件产品的要求比一般有形产品来得复杂软件产品要完成的多种多样功能,用户难以清晰、准确地表达对软件产品的要求,如可靠性、易移植性、易使用性等等是隐含的,也是难以表达的,而且也缺少度量的具体标准软件设计不仅仅涉及到技术复杂性,也还涉及到管理复
21、杂性软件工程是智力密集型产业,知识产权保护极为重要,1.4.4 软件工程与一般工程的差异,软件特征包括四个方面功能的多样性。使用软件产品往往还会伴随培训任务,软件产品的用户手册还不一定能全面描述其功能实现的多样性。对软件产品的要求不仅包括功能和性能要求,还必须包括在符合功能和性能要求的各种实现中做出选择,更有实现算法上的优化带来的不同,所以实现上的差异会带来使用上的差异能见度低。要看到软件进度涉及到如何使用文档表示的概念能见度,这为软件管理复杂性增加了难度软件结构的合理性差。软件管理复杂性随着软件规模增大而呈指数地增长,管理复杂性成了软件设计的难题,1.5 小结,软件危机的根本原因是软件系统高度复杂、难于驾驭和早期软件开发所带有的个人色彩要解决软件危机,必须应用严格的技术,使用帮助管理复杂性的工具。在广泛的意义上,我们称这个学科为软件工程一项计算机软件,从出现一个构思之日起,经过开发并投入使用,到停止使用止,被认为是该软件的一个生存周期。软件产品的生存周期又划分成若干个互相区别而又有联系的阶段软件工程方法学的目标是,把一种系统化的方法学用于系统开发上,为系统的开发提供一组可加以复审的任务,改善系统的质量和可维护性,以及加强对系统开发的管理和控制,