海大计算机专业软件工程课程资料lge第一章软件工程学

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Email:green.lyn@gmail.com教材:软件工程导论(第5版)张海藩编著清华大学出版社软件工程你编写过的最长的程序有多少行?A:50行以内B:50-100行C:100-500行D:500行以上问题一:你编写过的最长的程序类型:A:课程实验B:老师课题C:自己学习D:其它问题二:1.1软件危机1.1.1软件危机的介绍软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。包含下述两个问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。第一章软件工程学概述软件危机主要有以下一些表现:对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。正像下面一段对软件危机的形象描述:“…..正像一只逃亡的野兽落到泥潭中作垂死的挣扎,越是挣扎,陷得越深。最后无法逃脱灭顶的灾难,…程序设计工作正像这样一个泥潭,….一批批程序员被迫在泥潭中拼命挣扎,……”1.1.2产生软件危机的原因两方面的原因:一是软件本身的特点:软件不同于硬件,是计算机系统中的逻辑部件而不是物理部件。(运行之前难以评价。)软件不同于一般程序,它的一个显著特点是规模庞大。(分工合作如何组织才能产生高质量软件?)二是软件开发与维护的方法原因。(忽视需求分析,轻视软件维护)软件生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,这个漫长的时期称为生命周期。代价高中低早中后变化出现的时期图1.1引入同一变动付出的代价随时间变化的趋势1.1.3消除软件危机的途径1.2软件工程1.2.1软件工程的介绍概括地说,软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。软件工程典型的定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”该定义不仅指出了软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,它应该建立并使用完善的工程原理。1993年IEEE进一步给出了一个更全面更具体的定义:“软件工程是:(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径。软件工程的本质特征:1.软件工程关注大型程序的构造2.软件工程的中心课题是控制复杂性3.软件经常变化4.开发软件的效率非常重要5.和谐的合作是开发软件的关键6.软件必须有效地支持它的用户7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品1.2.2软件工程的基本原理1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采用现代程序设计技术5.结果应能清楚的审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性1.2.3软件工程方法学通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。软件工程方法学包含3个要素:方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架。目前使用的最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。1、传统方法学传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。该方法把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。前一阶段任务的完成是下一阶段工作开始的前提和基础。每一阶段的开始和结束都有严格的标准,在每一阶段的结束之前都必须进行正式严格的技术审查和管理复审。2.面向对象方法学面向对象方法学具有下述4个要点:(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成,也就是说,用对象分解取代了传统方法的功能分解。(2)把所有对象都划分成类(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。数据用于表示对象的静态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。(3)按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。在该层次中,派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。(4)对象彼此间仅能通过发送消息互相联系。1.3软件生命周期软件生命周期的划分:软件定义软件开发软件维护问题定义可行性研究需求分析总体设计详细设计编码和单元测试综合测试各阶段的基本任务:1.问题定义必须回答的关键问题是:“要解决的问题是什么?”2.可行性研究必须回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”3.需求分析准确的确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备那些功能。4.总体设计必须回答的关键问题是:“概括地说,应该如何解决这个问题?”。有两个任务:(1)考虑几种可能的解决方案。低成本解决方案;中等成本解决方案;高成本“十全十美”的系统;(2)设计软件结构,即确定程序由哪些模块组成以及模块间的关系。5.详细设计关键问题是:“应该怎样具体地实现这个系统?”6.编码和单元测试关键任务是写出正确的容易理解、容易维护的程序模块。7.综合测试关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。8.软件维护关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。维护类型:改正性维护、适应性维护、完善性维护、预防性维护。阶段关键问题结束标准问题定义问题是什么?关于规模和目标的报告书可行性研究有可行的解吗?系统的高层逻辑模型数据流图成本/效益分析报告需求分析系统必须做什么?系统的逻辑模型数据流图数据字典算法描述总体设计概括地说,应如何解决这个问题?可能的解法系统流程图成本/效益分析推荐的系统结构层次图或结构图表1.1结构分析设计过程小结阶段关键问题结束标准详细设计怎样具体实现这个系统?编码规格说明HIPO图或PDL编码和单元测试正确的程序模块源程序清单单元测试方案和结果综合测试符合要求的软件综合测试方案和结果完整一致的软件配置维护持久的满足用户需要的软件完整准确的维护记录表1.1结构分析设计过程小结1.4软件过程软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它体现了完成各项任务的工作步骤。概括地说,软件过程描述为了开发出客户需要的软件,什么人(who)、在什么时候(when)、做什么事(what)以及怎样做(how)这些事以实现某一特定的具体目标。过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。为了获得高质量软件产品,软件过程必须科学、有效。通常使用生命周期模型简洁的描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段以及各个阶段的执行顺序,因此,也称为过程模型。1.4.1瀑布模型把生命周期划分为阶段的目的及实质是:控制开发工作的复杂性;通过有限的确定步骤,把用户需求从抽象的逻辑概念逐步转化为具体的物理实现。图1.2传统的瀑布模型问题定义总体设计需求分析可行性研究详细设计综合测试编码与单元测试软件维护按照传统的瀑布模型开发软件,有如下几个特点:1.阶段间具有顺序性和依赖性这个特点由两重含义:(1)必须等前一阶段的工作完成之后,才能开始后一阶段的工作;(2)前一阶段的输出文档就是后一阶段的输入文档,因此只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。2.推迟实现地观点3.质量保证的观点在瀑布模型的每个阶段都应该坚持两个重要做法:(1)每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。(2)每个阶段结束前都要对所完成的文档进行评审,以便及早发现问题,改正错误。图1.3实际的瀑布模型需求分析验证规格说明验证设计验证编码测试综合测试维护变化的需求验证1.4.2快速原型模型所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能一般是最终产品能完成的功能的一个子集。如图1.4所示。快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证图1.4快速原型模型注:实线箭头表示开发过程虚线箭头表示维护过程从图1.4可以看出,快速原型模型是不带反馈环的,这正是这种过程模型的主要优点:软件产品的开发基本上是线性顺序进行的。(1)原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。(2)开发人员通过建立原型已经掌握很多东西。因此,在设计和编码阶段发生错误的可能性也较小,这自然减少后续阶段修改前面错误的可能性。1.4.3增量模型增量模型也称为渐增模型,如图1.5所示。图1.5增量模型需求分析验证规格说明验证概要设计验证针对每个构件,完成详细设计、编码和集成,经测试后交付给用户维护使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。图1.5所示的增量模型表明,必须在开始实现各个构件之前就全部完成需求分析、规格说明和概要设计的工作。由于在开始构建第一个构件之前就已经有了总体设计,因此风险较小。图1.6描绘一种风险更大的增量模型:一旦确定了用户需求之后,就着手拟定第一个构件的规格说明文档,完成后规格说明组将转向第二个构件的规格说明,与此同时设计组开始设计第一个构件…用这种方式开发软件,不同的构件将并行的构建,因此有可能加快工程进度。但是,使用这种方法将冒构件无法集成到一起的风险。规格说明设计编码和集成交付客户规格说明设计编码和集成交付客户规格说明设计编码和集成交付客户构件1:构件2:构件n:图1.6风险更大的增量模型1.4.4螺旋模型软件开发总要冒一定风险,项目越大,软件越复杂,承担该项目所冒的风险也越大。软件风险可能在不同程度上损害软件开发过程和软件产品质量。因此,在软件开发过程中必须及时识别和分析风险,并且采取适当措施以消除或减少风险的危害。螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的简便方法是,把它看作在每个阶段之前都增加了风险分析过程的快速原型模型,如图1.7所示。风险分析快速原型验证风险分析规格说明验证风险分析设计验证风险分析编码测试风险分析综合测试维护风险分析变化的需求验证图1.7简化的螺旋模型图1.8完整的螺旋模型1.4.5喷泉模型迭代是软件开发过程中普遍存在的一种内在属性。经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。图1.9所示的喷泉模型,是典型的面向对象的软件过程模型。“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。维护期进一步开发运行状态集成和测试阶段编码阶段面向对象设计阶段面向对象分析阶段需求阶段图1.9喷泉模型图中代表不同阶段的圆圈相互重叠,这明确表示两个活动之间存在交叠。图中在一个阶段内的向下箭头代表该阶段内的迭代(或求精)。为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程

1 / 59
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功