软件工程课件第一章牛倩.ppt

上传人:小飞机 文档编号:6434253 上传时间:2023-10-30 格式:PPT 页数:59 大小:860.50KB
返回 下载 相关 举报
软件工程课件第一章牛倩.ppt_第1页
第1页 / 共59页
软件工程课件第一章牛倩.ppt_第2页
第2页 / 共59页
软件工程课件第一章牛倩.ppt_第3页
第3页 / 共59页
软件工程课件第一章牛倩.ppt_第4页
第4页 / 共59页
软件工程课件第一章牛倩.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《软件工程课件第一章牛倩.ppt》由会员分享,可在线阅读,更多相关《软件工程课件第一章牛倩.ppt(59页珍藏版)》请在三一办公上搜索。

1、1,软件工程导论,牛倩,软件工程 牛倩,牛倩考查课平 时:30%(作业+出勤)考 试:70%,2,3,我感兴趣的,大规模并行计算与存储云计算、大数据NOSQL数据库,CAP定律1-Consistency2-Availability3-Partition Tolerance说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个。该定律作为猜想在2000年提出,2002年被证实。其中,一致性说的是分布式系统中,所有节点在同一时刻看到同一个值。可用性说的是每个请求都会收到一个应答,无论该应答是成功还是失败。分区容错性指的是无论任何消息丢失,系统都可用。Pa

2、rtition Tolerance的意思是,在网络中断,消息丢失的情况下,系统照样能够工作。,4,教学目标了解软件危机的产生以及解决办法软件工程的重要性了解软件生命周期以及常用软件开发模型。教学重点软件生命周期以及常用软件开发模型。教学难点软件过程中各种模型的特点、使用范围的了解。,第一章软件工程学概述,5,1.1 软件危机1.2 软件工程1.3 软件生命周期1.4 软件过程,第一章软件工程学概述,6,1.1 软件危机,什么是软件危机?通常把软件的开发与维护过程中所遇到的一系列严重问题笼统地成为软件危机。为什么会出现软件危机?由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过

3、程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。1.软件本身:与软件的特点有关复杂、逻辑实体2.人为因素:软件开发与维护的方法不正确有关错误的认识和作法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等。,7,1.1 软件危机,软件危机的主要表现是什么?对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上

4、升;软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。,8,1.1 软件危机,如何避免软件危机呢?消除“软件就是程序”的错误观念。1983年IEEE为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。程序+数据+文档提出软件工程从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。,9,1.2 软件工程,什么是软件工程?它是指导计算机软件开发和维护的一门工程学科,采用工程的概念、原理、技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,目的是生产出能按期交付的、在预算范围

5、内、满足用户需求的、质量合格的软件产品。,10,1.2 软件工程,软件工程的本质特征:1.软件工程关注于大型程序的构造2.软件工程的中心课题是控制复杂性3.软件经常变化4.开发软件的效率非常重要5.和谐地合作是开发软件的关键6.软件必须有效地支持它的用户7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人开发产品,11,1.2 软件工程,软件工程的7个基本原理:用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程的必要性,经统计发现,在不成功的软件项目中,有一半左右时由于计划不周造成的

6、。应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后按照计划对软件的开发与维护工作进行管理。,12,1.2 软件工程,软件工程的7个基本原理:用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程的必要性,大部分错误实在编码之前造成的软件缺陷改正的越晚,成本越高。,13,1.2 软件工程,软件工程的7个基本原理:用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程的必要性,需求是不断变化的软

7、件开发过程中不应随意改变需求,14,1.2 软件工程,软件工程的7个基本原理:用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程的必要性,提高软件开发和维护的效率提高软件质量,15,1.2 软件工程,软件工程的7个基本原理:用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程的必要性,软件开发小组的组成人员的素质应该好,而且人数不宜过多。开发小组的素质和数量是影响软件产品质量和卡法效率的重要因素。,16,1

8、.2 软件工程,软件工程方法学软件工程是技术与管理紧密结合所形成的工程学科。管理:13章项目管理将有介绍,即通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。技术:在软件生命周期全过程中使用的一整套技术,称谓方法学方法学(methodology),也称为范型(paradigm)。软件工程方法学包括3个要素:方法:技术方法工具:软件工程支撑环境过程:一系列任务框架,以保证质量。当前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。,17,1.2 软件工程,传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现

9、)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。问题简单化、便于阶段性审查、有一定应用、便于区别面相对象方法学。,18,1.2 软件工程,面向对象方法学当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难,原因是这种技术要么面向行为(即对数据的操作),要么面向数据,还没有既面向数据又面向行为的结构化技术。面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据

10、的操作紧密地结合起来的方法。,19,1.3 软件生命周期,软件生命周期包括:软件定义、软件开发和软件维护期。,20,1.3 软件生命周期,软件定义的主要目的:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。,21,1.3 软件生命周期,22,1.3 软件生命周期,软件维护期:使软件持久地满足用户的需要。当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应及时改进,满足用户新需要。,23,1.3 软件生命周期,24,1.3 软件生命周期,1

11、.问题定义 问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。,25,1.3 软件生命周期,2.可行性研究 这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程,也就是在较抽象的高层次上进行的分析和设计过程。可行性研究不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,

12、是否有可行的解决办法。可行性研究的结果是用户部门负责人作出是否继续进行这项工程的决定的重要依据。可行性研究以后的各个阶段,将需要投入多少相应的人力物力。及时终止不值得投资的工程项目,可以避免更大的浪费。,26,1.3 软件生命周期,3.需求分析 这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。用户通常不能完整准确地表达出他们的要求,更不知道怎样利用计算机解决他们的问题;软件开发人员对特定用户的具体要求并不完全清楚。系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。完成系统

13、的需求规格说明书。,27,1.3 软件生命周期,4.总体设计 这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。设计出实现目标系统的几种可能的方案。通常至少应该设计出低成本、中等成本和高成本等3种方案。软件工程师分析每种方案的优缺点,并在充分权衡各种方案的利弊的基础上,推荐一个最佳方案。此外,还应该制定出实现最佳方案的详细计划。,28,1.3 软件生命周期,4.总体设计 软件设计的一条基本原理就是,程序应该模块化,即一个程序应该由若干个规模适中的模块按合理的层次结构组织而成。因此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组

14、成以及模块间的关系。,29,1.3 软件生命周期,4.详细设计 它任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”。主要任务是设计出程序的详细规格说明。类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。,30,1.3 软件生命周期,5.编码和单元测试 这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。程序员应该根据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时用汇编语言),把详细

15、设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。,31,1.3 软件生命周期,7.综合测试 这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。验收测试则是按照规格说明书的规定,由用户对目标系统进行验收。,32,1.3 软件生命周期,8.软件维护 维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有4类维护活动:改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维

16、护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。每一项维护活动都应该经过提出维护要求(或报告问题),分析维护要求,提出维护方案,审批维护方案,确定维护计划,修改软件设计,修改程序,测试程序,复查验收等一系列步骤,因此实质上是经历了一次压缩和简化了的软件定义和开发的全过程。,33,1.4 软件过程,软件过程指在软件工具的支持下,所进行的一系列软件工程活动。软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发过程的里程碑。通常使用生命周期模

17、型来概括地描述软件过程。生命周期模型规定了软件过程包含的各个阶段以及完成这些阶段的顺序。常见的模型有:瀑布模型、快速开发模型、增量模型、螺旋模型、喷泉模型等。,34,1.4 软件过程,软件过程的特性:可理解性可见性(过程的进展和结果可见)可靠性可支持性(易于使用CASE工具支持)可维护性可接受性(为软件工程师接受)开发效率健壮性(抵御外部意外错误的能力),35,1.4 软件过程,瀑布模型,1.4 软件过程,瀑布模型的特点1.阶段间具有顺序性和依赖性必须等前一阶段的工作完成之后,才能开始后一阶段的工作;前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能

18、获得正确的结果。2.推迟实现的观点3.质量保证的观点,36,1.4 软件过程,瀑布模型的特点1.阶段间具有顺序性和依赖性2.推迟实现的观点 对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。这是因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往导致大量返工,有时甚至发生无法弥补的问题,带来灾难性后果。瀑布模型分析与设计阶段的基本任务主要考虑目标系统的逻辑模型,不涉及软件的物理实现。清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,是按照瀑布模型开发软件的一条重要的指导思想。3.质量保证的观点,37,1.4 软件过程,瀑布模型的特点1.阶段

19、间具有顺序性和依赖性2.推迟实现的观点3.质量保证的观点 软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法:每个阶段都必须完成规定的文档:完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。每个阶段结束前都要对文档进行评审:尽早发现问题,改正错误。,38,1.4 软件过程,实际的瀑布模型实际的瀑布模型是带“反馈环”的。右图中,实现代表开发过程,虚线代表维护过程。当在后面阶段发现前面阶段的错误时,需要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品后,再回来继续完成后面阶段的任务。,39,

20、1.4 软件过程,瀑布模型的优缺点优点:可强迫开发人员采用规范的方法(结构化技术);严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。缺点:“强调文档驱动”,导致用户在使用软件之前只能通过文档认识软件,而真正使用软件时可能出现与想象之间有差异。ps:“强调文档驱动”一定程度上减少了维护成本。,40,1.4 软件过程,快速原型模型,41,1.4 软件过程,快速原型模型快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型没有反馈环,同用户已经充分交流、开发人员对系统也充分了解。主要优点:使用这种软件过程

21、开发出的软件产品通常能满足用户需求软件产品的开发过程基本上是线性顺序,42,1.4 软件过程,增量模型,43,1.4 软件过程,增量模型增量模型也称为渐增模型,使用增量模型发开软件时,把软件产品作为一系列的增量构建来设计、编码、集成、测试。每个构建由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。,44,1.4 软件过程,增量模型和瀑布模型之间的本质区别:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软

22、件。采用瀑布模型或快速原型模型开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。增量模型则分批地逐步向用户提交产品,开发人员一个构件接一个构件地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。能在较短时间内向用户提交可完成部分工作的产品。,45,1.4 软件过程,风险更大的增量模型左图,增量模型必须在开始实现各个构件之前就全部完成需求分析、规格说明和概要设计的工作。由于在开始构件第一个构件之前已经有了总体设计,因此风险较小。右图,风险更大的增量模型,一旦确定了用户需求之后,就着手拟定第一个构件的规格说明文档,完成后规格说明组将转向第二个构件的规格说明,与此同时设计

23、组开始设计第一个构件用这种方式开发软件,不同的构件将并行地构建,因此有可能加快工程进度。但是,使用这种方法将冒构件无法集成到一起的风险,除非密切地监控整个开发过程,否则整个工程可能毁于一旦。,46,1.4 软件过程,螺旋模型螺旋模型的基本思想是使用原型及其他方法尽量降低风险。构件圆形是一种能使某些类型的风险降至最低的方法(产品不能满足用户需求;技术方法不当),47,1.4 软件过程,点划线的长度代表当前累计的开发费用,螺旋线的角度值代表开发进度。螺旋线每个周期对应于一个开发阶段。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:确定目标、方案和限制条件评估方案、标识风险和解决

24、风险开发确认产品计划下一周期工作,48,1.4 软件过程,螺旋模型的优点有利于软件重用有助于把软件质量作为软件开发的一个重要目标减少了过多测试或测试不足所带来的风险软件维护与软件开发没有本质区别螺旋模型的主要优势在于它是风险驱动的,但是软件开发人员应具有丰富的风险评估经验和这方面的专门知识,否则无法正确评估风险。螺旋模型适用于内部开发的大规模软件项目。,49,1.4 软件过程,迭代迭,轮流;代,替换。迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。喷泉模型主要用于采用对象技术的软件开发项目。它克服

25、了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。,50,1.4 软件过程,右图所示的喷泉模型是典型的面向对象生命周期模型,它充分体现了面向对象软件开发过程迭代和平滑过渡的特性。瀑布模型特点如下:开发过程有分析、系统设计、软件设计和实现4个阶段。各阶段相互重叠,它反映了软件过程并行性的特点。以分析为基础,资源消耗成塔型。反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。强调增量开发,整个过程是一个迭代的逐步提炼的过程。,51,1.4 软件过程,Rational统一过程Rational统一过程(RUP,Rational Unified Proce

26、ss)是Rational公司推出的较完美、流行的软件过程。是一个面向对象且基于网络的程序开发方法论它总结了6条最有效的开发经验最佳实践。迭代式开发管理需求使用基于构件的体系结构可视化建模验证软件质量控制软件变更,52,1.4 软件过程,Rational统一过程之最佳实践迭代式开发通过反复迭代,使得用户得以参与、开发人员可不断提供可以使用的阶段性的软件产品(提高士气),适合大型复杂软件的开发。管理需求用户需求的不断变化,要求提供如何提取、组织系统的功能需求的有效办法。RUP提供了通过用例分析捕获需求的方法,使用性极强。使用基于构件的体系结构可视化建模验证软件质量控制软件变更,53,1.4 软件过

27、程,Rational统一过程之最佳实践迭代式开发管理需求使用基于构件的体系结构RUP提供了使用现有的或新开发的构件定义体系结构的系统化方法,降低了软件开发的复杂性,提高了软件重用率。可视化建模使用UML进行建模。验证软件质量控制软件变更,54,1.4 软件过程,Rational统一过程之最佳实践迭代式开发管理需求使用基于构件的体系结构可视化建模验证软件质量软件质量的验证,贯穿于整个软件的开发过程,且所有开发成员参与。控制软件变更RUP给出了如何控制、跟踪和监控修改,以确保迭代开发的成功。,55,1.4 软件过程,Rational统一过程之RUP软件开发生命周期RUP软件开发周期是一个以时间代表

28、横轴、核心工作流代表纵轴的二维生命周期模型。,56,1.4 软件过程,Rational统一过程RUP软件开发生命周期,57,1.4 软件过程,Rational统一过程之RUP软件开发生命周期4个连续的阶段,每个阶段有明确目标并通过一次或多次迭代完成之,定义了用来评估是否完成目标的里程碑。RUP迭代式开发采用迭代和渐增的方式来开发软件,有多个迭代过程,每次迭代只考虑一部分需求;每次迭代都是一个完整的软件生命周期,包括:分析、设计、实现、测试和部署等工作;每个生命周期包括4个连续阶段:初始、精化、构建、移交阶段;每个阶段有进一步细化为一次或多次迭代。目前,RUP已成为公认的对象工程的标准,采用UML及ROSE工具完成。,58,1.4 软件过程,敏捷过程和极限编程敏捷过程目的是提高工作效率和快速相应变化能力,根据下述4个价值观提出的软件过程统称为敏捷过程:个体和交互胜过过程和工具:优秀的团队是项目开发获得成功的关键,合作、沟通、交互的能力更重要可以工作的软件胜过面面俱到的文档:软件为主,不能偏废文档,但文档只是在极其需要时起作用,文档无法代替软件客户合作胜过合同谈判:合同重要,但能指导开发团队与客户协同工作的合同将更有意义相应变化胜过遵循计划:客观世界不断变化,软件开发要反映现实。极限编程是最著名的敏捷过程,其中“极限”的含义是指把有效的软件开发实践运用到极致。,59,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号