信息工程学院第7讲软件工程计算机科学概论本章学习目标•理解软件的本质含义和软件工程的内涵;•描述软件开发过程;•描述软件需求分析的任务和方法•描述典型的软件工程方法;•理解软件质量的含义,并了解软件质量管理方法;•理解软件项目管理的主要内容。•描述一个典型的软件项目管理过程。123学习内容软件与软件工程软件开发过程软件工程的方法软件质量管理软件项目管理45学习重点•软件的本质含义和软件工程的内涵•软件开发过程•软件需求分析的任务和方法•典型的软件工程方法•软件项目管理信息工程学院第一节软件与软件工程1.软件与软件工程1.1什么是软件1.软件的概念2.软件的特点3.软件的分类4.软件危机1.软件与软件工程1软件的概念软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档组成的完整集合。可以写作为:软件=程序+数据+文档。程序:程序是按事先设计好的功能和性能要求执行的指令序列。数据:数据是指程序能正常处理信息的数据和数据结构。文档:文档是与程序运行和维护有关的图文资料。1.软件与软件工程2软件的特点(1)软件具有抽象特征。(2)软件具有无明显制造过程特征。(3)软件无备件的特征。(4)手工制作特征。(5)成本昂贵特征。1.软件与软件工程3软件的分类①按软件功能进行划分(1)系统软件(2)支撑软件(3)应用软件②按软件规模进行划分按开发软件所需的人力、时间以及完成的源程序行数,可确定六种不同规模的软件。如表1所示。1.软件与软件工程表1软件规模的分类类别参加人员数研制期限产品规模(源程序行数)微型11~4周0.5k小型11~6月1k~2k中型2~51~2年5k~50k大型5~202~3年50k~100k甚大型100~10004~5年1M(=1000k)极大型2000~50005~10年1M~10M1.软件与软件工程4软件危机1)软件危机的产生20世纪60年代中期以后,一些开发大型软件系统的要求提了出来。然而软件技术的进步一直未能满足形势发展的需要,在大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题。遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,出现了所谓的“软件危机”。1963年,美国用于控制火星探测器的计算机软件中的一个“,”号被误写为“。”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。1.软件与软件工程2)软件危机的定义及其表现形式软件危机是指在软件开发和维护中所产生的一系列严重的问题.一是如何开发软件,满足用户对软件的需求,二是如何维护数量众多的已有软件。其主要表现如下:(1)用户需求不明确、变更过多(2)软件成本日益增长(3)开发进度难以控制(4)软件质量差(5)软件维护困难1.软件与软件工程3)软件危机产生的原因(1)软件开发无计划性(2)软件需求不充分(3)软件开发过程无规范(4)软件产品无评测手段4)解决软件危机的途径(1)加强软件开发过程的管理。(2)推广使用开发软件的成功技术与方法(3)开发和使用好的软件工具1.软件与软件工程1.2软件工程1软件工程的产生及发展2软件工程的定义及目标3软件工程学的范畴1.软件与软件工程1软件工程的产生及发展为了解决软件危机,人们在软件开发中也不断改进和发展,在50多年中计算机软件开发经历了三个发展阶段:•程序设计阶段:约为50至60年代•程序系统阶段:约为60至70年代•软件工程阶段:约为70年代以后1.软件与软件工程最根本的变化体现在:(1)人们改变了对软件的看法。(2)软件的需求是软件发展的动力。(3)软件工作的范围从只考虑程序的编写扩展到涉及整个软件生存周期。1.软件与软件工程2软件工程的定义及目标FritzBauer曾经为软件工程下了定义:“软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。”1983年IEEE给出的定义为:“软件工程是开发、运行、维护和修复软件的系统方法”,其中,“软件”的定义为:计算机程序、方法、规则、相关的文档资料以及在计算机上运行时所必需的数据。1.软件与软件工程软件工程的方法、工具、过程构成了软件工程的三要素。软件工程的目标可概括为:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户要求的软件产品。软件工程目标之间的关系1.软件与软件工程3软件工程学的范畴软件工程学所研究的主要内容包括:软件开发技术和软件工程管理两个方面。其中:软件开发技术包含:1、软件开发方法学2、软件工具3、软件工程环境4、软件工程管理信息工程学院第二节软件开发过程2.软件开发过程软件工程研究的基本内容之一是对软件开发过程进行研究,并建立相应的开发过程模型。软件过程是开发和维护软件所涉及到的一系列活动和产生的结果。过程是活动的集合,活动是任务的集合,任务的作用是将输入转换为输出。活动的执行可以是顺序的、迭代的、并发的、嵌套的,或者是条件触发的。软件开发本身是一个综合的、复杂的、具有创造性的过程。需要涉及到众多不同层次的开发人员,这些人员使用不同的开发工具,彼此之间需要进行良好的协作。2.1软件生存周期2.2软件过程模型2.3需求分析SoftwareEngineering2.软件开发过程SoftwareEngineeringa“quality”focusprocessmodel(过程模型)methodstools软件工程的技术框架层次图通用软件开发过程模型框架通用的软件过程模型框架Frameworkactivities需求分析与评估建模产品设计与开发milestones&deliverables维护与升级UmbrellaActivities2.软件开发过程•软件项目管理•形式化技术观点•软件质量监督•软件分配管理•文档管理与更新•软件可靠性管理•软件维护•软件风险评估与管理UmbrellaActivities2软件开发过程2.1软件生存周期软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。我们称其为计算机软件的生存周期。软件生存周期可划分为若干个阶段。各阶段都包括计划、开发、运行与维护三个时期,而每个时期又划分为若干个阶段。1)计划时期计划时期的主要任务是调查和分析。计划时期有问题定义和可行性研究两个阶段。2.软件开发过程2)开发时期开发时期要完成设计和实现两大任务。设计任务包括需求分析和软件设计两个阶段;实现任务包括编码和测试。(1)需求分析该阶段主要解决的问题是“目标系统必须做什么”,也就是要深入描述软件的功能和性能;确定软件设计的限制和软件与其他系统元素的接口;定义软件的其他有效性需求,并用“需求规格说明书”的形式准确地表达出来,提交管理机构评审。2.软件开发过程(2)软件设计是软件工程的技术核心,主要任务是把已确定了的各项需求转换成一个相应的体系结构,通常细分成总体设计和详细设计两个阶段。(3)编码该阶段的主要任务就是按照选定的语言把软件设计转换成计算机可以接受的程序代码,即写成“源程序清单”。(4)测试测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。2.软件开发过程3)运行时期已交付的软件投入正式使用,便进入运行时期。这是软件生存周期的最后一个时期,可能要持续若干年甚至几十年。在运行过程中,可能由于多方面的原因,需要对它进行修改。因此,软件人员在这一时期的主要工作,就是做好软件维护。2.软件开发过程软件生存周期实际上是从时间角度对软件的开发与维护这个复杂问题进行分解,将软件的整个生存期划分为若干阶段,每个阶段都有其相对独立的任务,然后逐步完成各个阶段的任务。软件生存周期包括从提出软件产品开始,直到该软件产品被淘汰的全过程。目前软件开发实践中使用的各种生命周期,通常都包括下面这些基本组成部分的不同排列组合,如下表2所示:划分软件生命周期的组成部分时,遵循的基本原则是使各个部分彼此之间尽可能相对独立,同一组成部分中任务的性质尽可能相同,以降低每个部分中任务的复杂程度,有利于软件开发的组织管理和质量保证。2.软件开发过程基本阶段划分国标划分市场分析,可行性研究,以及项目定义软件定义阶段(计划)需求分析设计(总体设计和详细设计)软件开发编码实现测试使用与维护软件维护表2软件生命周期的不同划分2.软件开发过程2.2软件过程模型为了反映软件生存周期内各种工作应如何组织及周期各个阶段应如何衔接,需要用软件过程模型给出直观的图示表达。软件过程模型是软件工程思想的具体化,是实施于过程模型中的软件开发方法和工具,是在软件开发实践中总结出来的软件开发方法和步骤。总的说来,软件过程模型的实质是开发策略,软件过程模型是跨越整个软件生存周期的系统开发、运作、维护所实施的全部工作和任务的结构框架。1.瀑布模型2.原型模型3.螺旋模型4.软件过程模型的运用2.软件开发过程1.瀑布模型瀑布模型(也称线性顺序模型或软件生存周期模型),是W.Royce在1970年提出的。瀑布模型遵循软件生存期的划分,明确规定各个阶段的任务,各个阶段的工作自上而下、顺序展开,如同瀑布流水,逐级下落。瀑布模型把软件生存周期划分为计划时期(或定义时期)、开发时期和运行时期。这三个时期又分别细分为若干个阶段。参看右图。2.软件开发过程瀑布模型是线性顺序模型,它将软件开发过程划分为若干个互相区别而又彼此联系的阶段,每个阶段中的工作都以上一个阶段工作的结果为基础,同时为下一个阶段的工作提供前提。瀑布模型是一种系统的、顺序的软件开发方法,过程的每一个步骤都应当生产出可交付的产品,这个结果可以复审,又要用来作为下一个步骤的基础。线性模型示意图2.软件开发过程瀑布模型为软件开发和软件维护提供了一种有效的管理图式,简单直观。但是,该模型缺乏灵活性,无法解决软件需求不明确或不准确的问题;由于其顺序性,后一阶段出现的问题需要通过前一阶段的重新确认来解决,代价高昂。随着软件开发项目规模的日益庞大,软件开发需要多人合作完成,但瀑布模型不能体现开发工作之间的并行关联。2.软件开发过程2原型模型原型模型从需求分析开始。软件开发者和用户在一起定义软件的总目标,说明需求,并规划出定义的区域。然后快速设计软件中对用户/客户可见部分的表示。快速设计导致了原形的建造,原形由用户/客户评估,并进一步求精待开发软件的需求。逐步调整原形使之满足用户需,这个过程是可以迭代的。原型模型的优点是支持软件需求开发,帮助用户和开发人员理解需求,提高了处理模式的描述能力,该模型能更好地控制资源管理、配置管理、确认和验证等方面的处理。从总体上看,原型模型提高了开发人员的效率,降低开发费用,缩短开发时间。2.软件开发过程初步需求分析快速设计建造原型用户评估原型(新需求)对原型加工开发产品开始结束通过原型模型,用户能够感受到实际的系统,开发者能够很快地建造出一些东西。原型模型系统可作为培训环境,有利于用户培训和开发同步,开发过程也是学习过程。原型模型可以低风险开发柔性较大的计算机系统。原型模型的缺点是容易给人错觉,用户不一定能理解原型与正式系统之间的差别,软件开发管理常常会放松。多个工作版本同时存在,管理开销大,且资源管理困难。2.软件开发过程3螺旋模型(spiralmodel)螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析,弥补了两者的不足。螺旋模型沿着螺线旋转,如下图所示,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即:(1)制定计划──确定软件目标,选定实施方案,弄清项目开发的限制条件;(2)风险分析──分析所选方案,考虑如何识别和消除风险;(3)实施工程──实施软件开发;(4)客户评估──评价开发工作,提出修正建议。2.软件开发过程螺旋模型示意图2.软件开发过程沿螺线自内向外每旋转一圈便开发出更为完善的一个新的软件版本。如果软件开发人员对项目的需求已有较好的理解,则无需开发原型,第一圈就可以直接采用瀑布模型,这在瀑布模型中认为是单圈螺线。反之,若对项目的需求没有把握,就需要