第1章-软件工程学概述 1_第1页
第1章-软件工程学概述 1_第2页
第1章-软件工程学概述 1_第3页
第1章-软件工程学概述 1_第4页
第1章-软件工程学概述 1_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

软件工程导论(张海藩第5版),2,引言课程介绍,为什么要学习软件工程软件工程的主要内容本书讲授主要内容软件工程的课程特点,3,为什么要学习软件工程,软件工程是计算机学科中一个年轻并且充满活力的研究领域。自20世纪60年代末期,人们为克服“软件危机”在这一领域做了大量工作,逐渐形成了系统的软件开发理论、技术和方法,它们在软件开发实践中发挥了重要作用。今天,现代科学技术将人类带入了信息社会,计算机软件扮演着十分重要的角色,软件工程已成为信息社会高技术竞争的关键领域之一。软件工程是指导计算机软件开发与维护的工程学科,它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以便经济地开发出高质量的软件并有效地维护它。,4,软件工程的主要内容,方法与技术:软件开发方法主要讨论软件开发的各种方法及其工作模型。同时讨论具体实现的技术;工具及环境:软件工具为软件工程方法提供了支持,研究计算机辅助软件工程CASE,建立软件工程环境;管理技术:软件工程管理是指对软件工程全过程的控制和管理,包括计划安排、成本估算、项目管理和软件质量管理;标准与规范:软件工程标准化与规范化,使得各层工作有章可循,以保证软件生产率和软件质量的提高。,5,本书讲授主要内容,软件工程学概述可行性研究需求分析形式化说明技术总体设计详细设计实现,维护面向对象方法学引论面向对象分析面向对象设计面向对象实现软件项目管理,6,软件工程的课程特点,学科理论及其知识应用的多维性浓厚的方法学色彩实践性、指导性强工程化,7,学科理论及其知识应用的多维性,软件工程是集工程科学、计算机科学、数学和管理科学等理论和知识于一身,并将其应用到软件开发实践的一门学科。工程科学:制定规范、设计模型、评估成本及确定权衡;计算机科学和数学:构造模型与算法;管理科学:计划、资源、质量和成本的管理因此,支持软件工程的基础学科理论及其知识的运用是多方面的。从这一意义上说,软件工程也是综合性、交叉性的学科。,8,浓厚的方法学色彩,作为软件工程的要素之一,软件工程方法学不仅是课程学习的主要内容,而且贯穿到软件开发活动的全过程之中。方法是完成软件开发各项任务的一整套技术的集合,从软件分析、设计、实现、维护到软件项目管理,无处不体现方法的运用。只有当这些方法在实践中不断得到完善和发展时,软件工程才会成为一种普遍使用的规范。目前使用最广泛的软件工程方法学是传统方法学和面向对象方法学,二者特点鲜明,内涵丰富,是软件工程中最具指导性的技术组成部分。,9,实践性、指导性强,软件工程的目标、原则和方法都是从软件开发的实践中总结出来并不断发展而形成的,它们对软件开发有着广泛和现实的指导意义。软件开发过程中的问题都会在软件工程中给予讨论和解决,许多原则和方法甚至是非常具体和易于操作的。因此,软件工程是一门实践性和指导性很强的工程应用学科。,10,工程化,普通工程学的知识在软件工程中得到充分的体现。工程规划、模型设计、项目的组织和管理、质量控制等都已经规范化和标准化。一个软件从设计、生产、实施到维护,经历的就是一个工程项目的执行过程。所以说,掌握软件工程的工程化特点,学会用工程的观点和方法去指导软件开发的实践,是学好软件工程的要领之一。,11,第一章软件工程学概述,本章介绍软件和软件工程的基本概念软件与软件危机软件工程学的范畴软件生命周期软件过程,12,1.1软件与软件危机,软件的定义软件的特征软件危机,13,1.1.1软件的定义,1、软件的发展体系结构主机结构文件服务器结构客户/服务器系统服务器/浏览器结构编码语言机器代码汇编代码高级程序语言人工智能语言开发工具分离的开发工具集成的可视化开发系统简单的命令行调试器方便的多功能的调试器,14,2、软件的发展阶段程序程序+文档软件工程,独唱小合唱合唱万人大合唱|简单程序较复杂程序软件,15,3、软件定义软件=程序+数据+文档程序:为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列数据:使程序正常执行所需、能正常操纵信息的数据结构文档:与程序开发、维护和使用有关的图文材料,即软件开发活动的记录,16,1.1.2软件的特征,软件是一种逻辑实体,不是具体的物理实体;软件产品的生产主要是研制;软件具有“复杂性”,其开发和运行常受到计算机系统的限制,有些软件甚至依赖于硬件的配置;软件成本昂贵,其开发方式目前尚未完全摆脱手工生产方式;软件不存在磨损和老化问题,但存在退化问题;软件通常是针对特定的应用而设计的,需要花费大量的资源进行项目规划与需求分析,开发周期较长,成本和进度很难估计。,17,软件与硬件的对比,软件开发不同于硬件设计软件更依赖于人,成本很难估算,人力占产品成本的大部分;硬件设计与人的关系相对小一些,智力成本占产品成本的一小部分。软件生产不同于硬件制造软件成为产品后,制造只是简单的拷贝;硬件的制造是一个复杂的过程,仍可能引入质量问题。软件维护不同于硬件维修,18,1.1.3软件危机,软件开发的发展过程,计算机应用发展,19,定义计算机软件的开发和维护过程所遇到的一系列严重问题。表现对软件开发成本和进度的估算很不准确;用户很不满意;质量很不可靠;没有适当的文档;软件成本比重上升;供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势。,20,软件危机产生原因,客观:软件本身特点逻辑部件规模庞大维护费用急剧上升生产技术进步缓慢主观:不正确的开发方法忽视需求分析错误认为:软件开发=程序编写轻视软件维护,21,维护软件的代价是巨大的:修改程序困难,抽调大量人员,影响其他软件开发等。越晚发现错误,改正的成本就越高(因此强调重视需求)。,22,硬件/软件成本变化趋势,100%,1955,1970,1985,23,软件技术进步落后于需求增长,借用G.Booch的一个著名的比喻:“开发一个复杂的软件系统和编写一个简单程序大不一样。其间的差别,如同建造一座大厦和搭一个狗窝的差别。”,软件危机必定爆发,需要软件工程来解决,但它解决不了所有问题,24,1.2软件工程,软件开发方法学软件工具软件工程环境软件工程管理,25,软件工程的几个定义,1983年IEEE:软件工程是开发、运行、维护和修复软件的系统方法。Fairly:软件工程学是为了在成本限额以内完成开发和修改软件产品所需要的系统生产和维护技术及管理学科。FritzBauer:软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。1993年IEEE:软件工程是把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;研究中的提到的途径。,26,软件工程的中心思想,把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。,27,软件工程的本质特性,1.软件工程关注于大型程序的构造2.软件工程的中心课题是控制复杂性3.软件经常变化4.开发软件的效率非常重要5.和谐地合作是开发软件的关键6.软件必须有效地支持它的用户7.在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品,28,软件工程的基本原理,Boehm总结的最小集合1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性,29,软件工程学包含的主要内容,软件开发技术软件开发方法学软件工具软件工程环境软件工程管理软件管理学软件经济学软件度量学,30,1.2.1软件开发方法学,软件的发展程序软件软件产品软件开发方法的发展结构化程序设计面向对象程序设计,31,1.2.2软件工具,定义帮助开发软件的软件举例编译程序、编辑程序、连接程序、计算机操作系统,32,1.2.3软件工程环境,定义方法与工具相结合,再加上配套的软、硬件支持就形成软件工程环境。,33,1.2.4软件工程管理,目的为了按照进度及预算完成软件开发计划,实现预期的经济和社会效益。内容成本估算、进度安排、人员组织和质量保证涉及管理学、度量学和经济学等学科,34,1.2.5软件工程方法学,程序设计方法的两次飞跃面向对象程序设计的优势两类软件工程范例的简单比较,35,程序设计的两次飞跃,结构化程序设计程序=数据结构+算法认为程序由一组被动的数据和一组能动的过程所构成面向对象程序设计程序=对象+消息,36,两类软件工程方法,传统软件工程以结构化程序设计为基础软件分析总体设计详细设计面向过程的编码测试面向对象软件工程以面向对象程序设计为基础软件分析与对象抽取对象详细设计面向对象的编码测试,37,面向对象程序设计的优势,可以有效地降低软件的复杂性,简化程序的开发;使因修改程序而引发软件故障的机会大大减少,令大型软件的维护更快、更简单。,38,帐户余额,利息结算,存款,取款,面向过程的编码语言,面向对象的编码语言,(程序与数据分离),(操作与数据统一为一个整体),两类软件工程方法的比较,39,两类软件工程范型的简单比较,传统软件工程软件分析总体设计详细设计面向过程的编码测试面向对象软件工程软件分析与对象抽取对象详细设计面向对象的编码测试,40,软件工程的应用,软件工程指导中小型软件软件工程指导大型软件软件工程的成就软件工程的局限,41,软件规模分类表,技术/方法/工具/管理,低,高,42,1.3软件生命周期,定义一个软件从开始计划起,到废弃不用止,称为软件的生存周期。包括计划、开发与运行三个时期。计划时期:问题定义、可行性研究、需求分析开发时期:总体设计、详细设计编码和单元测试、综合测试运行时期:系统维护阶段划分阶段的意义:简化每一步的工作内容,使因软件规模增大而大大增加的软件复杂性变得易于控制和管理。,43,可行性研究(该问题是否有行得通的解决办法),软件定义,需求分析(目标系统必须做什么),总体设计(怎样实现目标系统),软件生命周期,问题定义(要解决的问题是什么),详细设计(应该怎样具体地实现这个系统),编码和单元测试(写出正确的容易理解、容易维护的程序模块),综合测试(集成测试和验收测试),系统设计,系统实现,软件开发,运行维护(改正性维护、适应性维护、完善性维护、预防性维护),(系统分析),44,在实际从事软件开发工作时,软件规模、种类、开发环境及开发时使用的技术方法等因素,影响阶段的划分。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。我国国家标准计算机软件开发规范(GB8566-88)把软件生命周期的划分成8个阶段:可行性研究与计划、需求分析、概要设计、详细设计、实现、组装测试、确认测试、使用和维护。,45,1、计划时期任务调查用户需求,分析新系统的主要目标,分析开发该系统的可行性并确定系统的需求。问题定义明确“用户需要计算机解决什么问题”提出关于“系统目标与范围的说明”请用户确认。可行性研究明确“上一阶段确定的问题是否有行得通的解决办法”提出一套或多套在技术上可行、在经济上有较高效益的可操作解决方案。,46,需求分析概括地回答“怎样实现目标系统?”弄清楚用户对软件系统的全部需求;用“需求规格说明书”准确表达出来;系统分析员必须和用户密切配合,充分交流信息,以得出经过用户确认的系统需求。,47,2、开发时期设计总体设计详细设计实现编码和单元测试综合测试开发时期划分阶段的目的程序员在开发初期集中全力搞好软件的逻辑结构,避免过早为实现的细节分散精力。,48,软件设计将需求转变为软件的表示形式总体设计(概要设计)建立软件系统的总体结构,形成系统的功能结构图;定义功能模块的接口,包括模块功能、关系及接口界面定义设计全局数据库或数据结构规定设计约束,定义软件系统的边界并给出约束说明编制概要设计文档详细设计模块详细设计,包括模块详细功能、算法、数据结构和接口信息的设计,拟定模块测试方案;编制模块的详细规格说明,49,编码选择一种程序设计语言;写出正确的容易理解、容易维护的源程序模块;产生可执行的目标程序。,50,测试-保证软件质量的重要手段任务保证输出与要求的一致;发现错误。单元测试验证模块功能及接口与文档的一致性集成测试将经过单元测试的模块逐步进行组装和测试生成可运行的系统源程序并编写组装测试报告确认测试软件系统测试编制确认测试文档软件评审,通过后交付用户使用系统测试,51,3、运行时期使用将软件安装在用户确定的运行环境中使用维护通过各种必要的维护活动使系统持久地满足用户的需要。对所有的维护写出维护报告。通常有四类维护活动改正性维护适应性维护完善性维护预防性维护退役:软件一旦完成其使命,就要终止对软件产品的支持,软件停止使用。,52,1.4软件过程,软件过程为了获得高质量软件所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。一个有效的软件过程应该是定义一组适合于所从事的项目的任务集合。一个任务集包括一组软件工程工作任务、里程碑和可交付的产品。通常用生命周期模型来描述软件过程,生命周期生命模型规定了把生命周期划分成哪些阶段及各阶段执行的顺序,53,1.4.1瀑布模型,又称线性顺序模型或生存周期模型W.Royce于1970年首次提出各个阶段的工作顺序展开重要的指导思想把逻辑设计与物理设计划分开,尽可能推迟程序的物理实现,54,用户要求,编码,需求分析,模块说明,详细设计,需求规格说明,软件结构图,总体设计,单元测试,程序清单,确认测试,综合测试,系统测试,瀑布模型的阶段与文档,55,瀑布模型的特点阶段间的顺序性和依赖性相邻两个阶段有因果关系,要求严格顺序执行上一阶段的变换结果是下一阶段变换的输入每个阶段都要进行阶段性评审,确认后转下一阶段推迟实现的观点尽可能推迟软件的编码时间质量保证的观点(文档驱动性)每个阶段都要完成规定的文档;每个阶段都要对已完成的文档进行复审,尽早发现问题,消除隐患。,56,同一变动付出的代价随时间变化的趋势,57,带“反馈环”的瀑布模型,修改设计的反馈,维护追溯的反馈,58,瀑布模型的优点可强迫开发人员采用规范的方法严格地规定了每个阶段必须提交的文档要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证瀑布模型的缺点周期长:顺序推进,环环审查需求难以准确把握(不能准确提出和沟通、不能快速适应变化的需求),导致返工甚至推倒重来无法预测新引入模块的影响最终的形式难以预料不适合需求模糊的系统,59,1.4.2快速原型模型,快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。通常,用户试用原型系统之后会提出许多修改意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用。一旦用户认为这个原型系统确实能做他们所需要的工作,开发人员便可据此书写规格说明文档,根据这份文档开发出的软件可以满足用户的真实需求。,60,快速原型模型,61,快速原型的本质是“快速”。开发人员应该尽可能快地建造出原型系统,以加速软件开发过程,节约软件开发成本。原型的用途是获知用户的真正需求,一旦需求确定了,原型将被抛弃。适用于需求确定性不高的系统开发。,62,怎样保证“快”?原型模型仅包括未来系统的主要功能,以及系统的重要接口。开发原型系统时尽量使用能缩短开发周期的语言和工具。,63,特点原型驱动型过程的交互性与迭代性优点用户在开发过程中可以完善对软件系统的需求;开发周期相对缩短,成本较低;有效发挥用户与开发人员之间的密切配合作用;充分体现逐步发展、逐步完善的原则。缺点频繁的需求变化会使开发过程难于管理和控制;原型的快速开发和修改对技术要求比较高,需要较好的工作基础。,64,1.4.3增量模型,基本思想把软件产品作为一系列的增量构件来设计、实现、集成和测试。开发时分批逐步向用户提交产品,每次提交一个满足用户需求子集的增量构件,直到最后一次得到满足用户全部需求的完整产品为止。将软件分解成增量构件时的约束条件当把新构件集成到现有软件中时,所形成的产品必须是可测试的。,65,使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。,66,优点能在较短的时间内向用户提交部分功能的构件;逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,减少一个全新软件可能给用户带来的冲击。缺点增量构件的划分依赖于系统功能的构成和软件开发人员的经验;要求软件系统的体系结构具有高度的可扩充性和开放性。,67,风险更大的增量模型显示出一旦确定了用户需求后,就着手拟定第一个构件的规格说明文档,完成规格说明文档后将转向第二个构件的规格说明,与此同时设计组开始设计第一个构件。,68,1.4.4螺旋模型,基本思想使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。螺旋模型的每一个周期都包括需求分析、风险分析、工程实现和评审4个步骤。每迭代一次,过程完成一个周期,软件开发前进一个层次,系统生成一个新的版本。,69,每个螺旋周期的工作步骤及各步骤的任务需求分析确定目标、方案和限制条件风险分析评估方案、标识风险和解决风险工程实现开发确认产品评审评价该阶段的工作并计划下一个阶段的工作,70,完整的螺旋模型,螺旋模型主要适用于内部开发的大规模软件项目。当风险过大时,可方便的终止项目。,71,可把它看作在每个阶段之前都增加了风险分析过程的快速原型模型,72,特点瀑布模型+快速原型+风险分析迭代过程优点强调可选方案和约束条件有利于已有软件的重用;有助于把软件质量作为软件开发的一个重要目标;减少过多测试或测试不足带来的风险;维护只是模型的另一个周期,在维护和开发之间并没有本质区别。缺点需耗费大量资金和时间用于风险评估;要求开发人员具有丰富风险评估经验和有关知识;开发过程比较复杂;给过程管理和控制带来了一定的难度。,73,迭代是软件开发过程中普遍存在的一种内在属性。经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。喷泉模型是典型的面向对象生命周期模型。,1.4.5喷泉模型,74,75,由于面向对象方法在概念和表示方法上的一致性,保证了各项开发活动之间的无缝过渡,在分析、设计和编码各阶段并不存在明显的边界(有相互重叠),“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程作为总目标。但是,同时也应该记住,面向对象范型本身要求经常对开发活动进行迭代或求精。,76,1.4.6Rational统一过程,RUP:是以用例为驱动、以系统架构为中心的迭代与增量过程。1.最佳实践迭代式开发管理需求使用基于构件的体系结构可视化建模验证软件质量控制软件变更,77,2.RUP软件开发生命周期9个核心工作流业务建模需求分析与设计实现测试部署6个核心过程工作流,配置与变更管理项目管理环境3个核心支持工作流,4个工作阶段初始阶段精华阶段构建阶段移交阶段,78,79,用例描述用户对系统功能的需求用例驱动在开发过程中的每个阶段都可以回溯到用户的真正需求以系统架构为中心关注体系结构模式的开发,保证系统的平滑演进,80,初始阶段,确定所设立的项目是否可行对需求有一个大概的了解,确定系统的大多数角色和简要用例;划分

温馨提示

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

最新文档

评论

0/150

提交评论