海大计算机专业软件工程课程资料lge第一章 软件工程学概述_第1页
海大计算机专业软件工程课程资料lge第一章 软件工程学概述_第2页
海大计算机专业软件工程课程资料lge第一章 软件工程学概述_第3页
海大计算机专业软件工程课程资料lge第一章 软件工程学概述_第4页
海大计算机专业软件工程课程资料lge第一章 软件工程学概述_第5页
已阅读5页,还剩54页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Email:green.lyn@教材:软件工程导论(第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.9中的中心垂线)作为总目标。1.最佳实践迭代式开发管理需求使用基于构件的体系结构可视化建模验证软件质量控制软件变更1.4.6Rational统一过程Rational统一过程(RationalUnifiedProcess,RUP)是由Rational公司推出的一种软件过程。

RUP总结了6条最有效的软件开发经验,这些经验被称为“最佳实践”。2.RUP软件开发生命周期

RUP软件开发生命周期是一个二维的生命周期模型。如下图所示。图中纵轴代表核心工作流,横轴代表时间。(1)核心工作流

RUP中有9个核心工作流,其中前6个为核心过程工作流(CoreProcessWorkflows),后3个为核心支持工作流(CoreSupportingWorkflows)。业务建模(BusinessModeling)

需求(Requirements)

分析和设计(Analysis&Design)

实现(Implementation)

测试(Test)

部署(Deployment)

配置和变更管理(Configuration&ChangeManagement)

项目管理(ProjectManagement)

环境(Environment)(2)工作阶段

RUP中的软件生命周期在时间上被分解为四个连续的阶段,每个阶段都有明确的目标,并且定义了用来评估是否达到这些目标的里程碑。如果评估结果令人满意的话,可以允许项目进入下一个阶段。

四个阶段的工作目标分别是:初始阶段(Inception):建立业务模型,定义最终产品视图,并且确定项目的范围。精化阶段(Elaboration):设计并确定系统的体系结构,制定项目计划,确定资源需求。构建阶段(Construction):开发出所有构件和应用程序,把它们集成为客户需要的产品,并且详尽地测试所有功能。移交阶段(Transition):把开发出的产品提交给用户使用。(3)RUP迭代式开发RUP强调采用迭代和渐增的方式来开发软件,整个项目开发过程由多个迭代过程组成。一个迭代是一个完整的开发循环,产生一个可执行的产品版本,是最终产品的一个子集,它增量式地发展,从一个迭代过程到另一个迭代过程到成为最终的系统。RUP重复一系列组成软件生命周期的循环,但是,在不同的迭代过程中是以不同的工作重点和强度对这些核心工作流程进行访问的。1.4.7敏捷过程与极限编程1.敏捷过程为了使软件开发团队具有高效工作和快速响应变化的能力,17位著名的软件专家于2001年2月联合起草了敏捷软件开发宣言,它由4格简单的价值观声明组成。(1)个体和交互胜过过程和工具(2)可以工作的软件胜过面面俱到的文档(3)客户合作胜过合同谈判(4)响应变化胜过遵循计划2.极限编程极限编程(eXtremeProgramming,XP)是敏捷过程中最富盛名的一个,其名称中‘极限’二字的含义是指把好的开发实践运用到极致。目前,极限编程已经成为一个典型的开发方法,广泛应用于需求模糊且经常改变的场合。(1)极限编程的有效实践客户作为开发团队的成员使用用户素材(正在进行的关于需求的谈话内容的助记符。)使用用户素材可以合理安排实现该项需求的时间短交付周期验收测试结对编程测试驱动开发集体所有持续集成:一天之内多次集成,不断回归测试可持续的开发速度开放的工作空间及时调整计划简单的设计重构:在不改变系统行为的前提下,重新调整和优化系统内部结构,以降低复杂性、消除冗余、增加灵活性和提高性能。使用隐喻:描述系统如何运作,用何种方式加入新功能。(2)极限编程的整体开发过程

图1.11描述了极限编程的整体开发过程。图1.11XP项目的整体开发过程(3)极限编程的迭代过程图1.12描述了极限编程的迭代开发过程。图1.12XP迭代开发过程

综上所述,以极限编程为杰出代表的敏捷过程,具有对变化和不确定性的更快速,更敏捷的反映特性,而且在快速的同时仍然能保持可持续的开发速度。上述这些特点使得敏捷过程能够较好的适应商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束。项目计划应该兼顾未来的不确定因素用有效的风险管理来减少不确定因素的影响经常生成并快速地测试软件地过渡版本,从而提高产品地稳定性和可预测性1.4.8微软过程

作为世界上最大的同时也是最成功的软件公司之一,Microsoft(微软)公司拥有自己独特的软件开发过程,几十年的实践证明微软过程是非常成功和行之有效的。

1、微软过程准则微软过程遵循下述的基本准则:采用快速循环,递进地开发过程用创造性地工作来平衡产品特性和产品成本项目进度表应该具有较高稳定性和权威性使用小型项目组并发地完成开发工作在项目早期把软件配置项基线化,项目后期则冻结产品使用原型验证概念,对项目进行早期论证把零缺陷作为追求的目标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论