软件开发生命周期与软件开发方法.ppt
《软件开发生命周期与软件开发方法.ppt》由会员分享,可在线阅读,更多相关《软件开发生命周期与软件开发方法.ppt(38页珍藏版)》请在冰点文库上搜索。
SoftwareEngineering&UML,软件工程与UML,授课教师:
邹正伟西南石油大学计算机科学学院,电邮:
电话:
13060025302,软件工程概述,教学内容:
了解软件的基本概念软件的特征软件危机、软件工程软件生命周期中各个阶段的任务、实施方法及步骤几种典型的软件开发模型,1.1软件,什么是软件?
软件是计算机程序、各种相关的文档和数据的集合。
具体地说,它包括以下几部分:
程序:
能以预期的性能执行预期功能的一段指令;数据:
便于程序操纵信息的数据结构;文档:
记录了程序的操作和使用的文档.许多人常常把某个计算机程序叫做软件,也常常把软件开发简单地说成是编写一段程序。
这些说法不正确。
软件分类,软件一般分为系统软件和应用软件两大类。
系统软件指管理、监控和维护计算机资源(包括硬件和软件)的软件。
包括操作系统、各种程序设计语言、编译软件和数据库管理系统等。
应用软件指用户利用计算机及其提供的系统软件为解决各种实际问题而编制的计算机程序。
包括办公软件、电子商务软件、字处理软件和图形处理软件等。
1.1.2软件的特征(与硬件比较),软件是逻辑产品,它具有抽象性,通过计算机的执行才能体现它的功能和作用。
其成本主要体现在软件的开发和研制上,可进行大量的复制。
不存在磨损和老化问题。
软件对开发、运行和硬件等环境有着不同程度的依赖性,这导致了软件移植的问题。
主要靠脑力劳动生产,尚未摆脱手工开发方式。
软件是复杂的,而且以后会更复杂。
开发和维护成本高。
软件开发有比较明确的分工。
软件的发展过程,软件伴随计算机技术的发展经历了三个阶段:
程序设计阶段软件设计阶段软件工程阶段,程序设计阶段,程序设计阶段(1946年1955年)特点:
尚无软件的概念,程序设计主要围绕硬件进行开发规模很小、工具简单无明确分工(开发者和用户)程序设计追求节省空间和编程技巧,无文档资料主要是用于科学计算,软件设计阶段,软件设计阶段(1956年1970年)特点:
硬件环境相对稳定,出现“软件作坊”的开发组织形式开始使用产品软件(可购买),从而建立了软件的概念系统规模越来越庞大,高级编程语言层出不穷,应用领域不断拓宽开发者和用户有了明确分工,社会对软件的需求量剧增但是软件开发技术没有重大突破,生产效率低下,从而导致“软件危机”产生。
软件工程阶段,软件工程阶段(1970年至今)由于软件危机的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。
从此软件生产进入软件工程时代。
特点:
软件工程时代的生产方式是工程化生产;使用数据库、开发工具、开发环境、网络、先进的开发技术和方法,使生产率大大提高;但未能完全摆脱软件危机。
1.2软件危机,1.2.1什么是软件危机?
开发软件所需的高成本同产品的低质量之间有着尖锐的矛盾,这种现象就是“软件危机”。
“软件危机”是在1968年召开的国际软件工程会议上被人们普遍认识的。
软件危机包括两方面的问题:
一是如何开发软件,怎样才能满足软件日益增长的需要;二是如何维护数量不断膨胀的软件产品。
软件危机的具体体现,
(1)软件开发成本及进度难以预测
(2)用户对已完成的软件系统不满足(3)软件产品质量无法保证(4)软件产品难以维护(5)软件通常缺少适当的文档资料(6)软件成本逐年提高(7)软件开发生产率提高的速度,远远跟不上计算机应用技术的迅速普及。
典型失败系统的例子,IBM公司开发OS/360系统,共有4000多个模块,约100万条指令,投入5000人年,耗资数亿美元,结果还是延期交付。
在交付使用后的系统中仍发现大量(2000个以上)的错误。
1.2.2产生软件危机的原因,在软件开发中缺乏科学管理的方法,开发进度不能保证,软件开发和维护困难。
只重视开发而轻视问题的定义,使软件产品无法满足用户的需求。
缺乏软件质量管理规范。
对软件开发成本的估计不准确,造成开发成本超出预算。
过分重视程序设计人员的个人技能,缺少有效方法与软件工具的支持,软件产品个性化,可维护性差。
1.2.2产生软件危机的原因,硬件生产率大幅提高软件生产随规模增大、复杂度增大软件生产率很低硬、软件供需失衡矛盾引发“软件危机”,1.2.3解决软件危机的途径,为了解决软件危机就要从技术和组织管理两个方面去研究,不断总结经验教训,提高软件产品的生产效率,降低软件开发和维护的成本。
开发软件选用最好的开发工具是至关重要的,工具选用的好,它可以“放大”人的智力,大大加快软件开发速度,提高软件质量。
为了解决软件危机,人们开始探索用工程化的方法进行软件开发,软件开发工程化的概念和方法应运而生,由此诞生了一门新兴学科软件工程学。
1.3软件工程,“软件工程”一词是1968年北大西洋公约组织组织的专门讨论解决“软件危机”的国际会议上正式提出并使用的。
软件工程是指导计算机软件开发和维护的一门工程学科。
它以“工程化”的思想来开发与维护软件。
IEEE给出软件工程的定义是:
将系统的、规范的、可度量的工程化方法应用于软件开发、运行和维护的全过程及对上述方法的研究。
1.3.1软件工程的概念,软件工程=质量保证+过程+方法+工具什么是软件过程?
一般,开发软件时,需要画出路线图,指导操作者按一定顺序和步骤创建适时的、高质量的软件产品。
开发软件产品遵循的路线图就称为软件过程。
质量保证是指为使软件产品符合规定需求所进行的一系列有计划的必要工作。
质量是推动软件过程不断改进的动力。
方法层提供了软件开发的各种方法。
工具层为软件工程方法和过程提供了自动和半自动的支撑环境。
软件工程的目标,软件工程追求的目标是可用性、正确性和合理性。
也可以说是:
“优质高产”,即:
以较低的成本研制具有高质量的软件。
1.3.2软件工程七条基本原则,用分阶段的生命周期计划严格管理坚持进行阶段复审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查,即每阶段都有相应文档开发小组人员少而精承认不断改进软件工程实践的必要性,1、软件定义时期问题定义:
确定“要解决的问题是什么”。
阶段结果,产生出:
问题定义报告。
问题定义报告是系统分析员简要地写出关于问题性质、工程目标和工程规模的书面报告。
可行性研究:
回答“上一个阶段所确定的问题是否有行得通的解决办法”。
阶段结果,产生出:
可行性研究报告。
需求分析:
任务是确定系统必须具备哪些功能。
回答“目标系统必须做什么?
阶段结果,产生出:
需求规格说明书在需求分析阶段确定的系统逻辑模型是以后设计和实现目标系统的基础。
因此,必须准确完整地体现用户的要求。
软件生命周期各个阶段基本任务,2、软件开发时期概要设计(也称总体设计):
关键问题是“怎样实现目标系统”。
回答“如何解决该问题?
”,即系统”怎样做?
“任务是确定系统的总体结构、外部接口、模块的划分、模块的功能及数据库设计。
阶段结果,产生出:
概要设计说明书。
详细设计:
把解决方法具体化,关键问题是“怎样具体地实现目标系统”。
解决每个模块内部算法和数据结构。
阶段结果,产生出:
详细设计说明书。
软件生命周期各个阶段基本任务,编码和单元测试:
根据设计说明书中每一个模块的流程选取一种适当的高级程序设计语言,写出正确的、容易理解而且容易维护的程序代码,并仔细测试每一个模块。
阶段结果,产生出:
无语法错误的源程序。
软件生命周期各个阶段基本任务,综合测试:
是通过各种类型的测试及相应的调试使软件达到预定的要求。
最基本的是集成测试和验收测试。
集成测试是把经过单元测试的模块按某种选定的策略装配起来,在装配过程中进行必要的测试。
验收测试是按照需求规格说明书的规定,有用户或在用户参与下对目标系统进行验收。
阶段结果,产生出:
测试报告。
软件生命周期各个阶段基本任务,3、运行维护时期运行维护阶段:
是软件生存周期最后一个阶段。
关键任务是:
通过各种必要的维护活动使系统持久地满足用户的需求。
主要是改正软件系统在使用过程中发现的隐含错误,扩充在使用过程中的新的功能要求;阶段结果,产生出:
软件系统的问题报告和软件修改报告(记录发现软件错误的情况以及修改软件的过程)。
软件生命周期各个阶段基本任务,维护的类型,按工作量从大到小排列,依次为:
(1)完善性维护指在使用软件系统的过程中为满足用户提出的新功能和性能要求而进行的维护活动。
它约占总维护活动的50%。
(2)纠错性维护诊断和改正在使用过程中发现的软件错误。
这部分维护工作约占全部维护活动的25%。
(3)适应性维护由于计算机技术的飞速发展,外部设备和其他系统元素经常改进和变化,为适应变化的环境而修改软件的活动称之为适应性维护。
它占总维护活动的18%21%。
(4)预防性维护为进一步改进软件的可维护性、可靠性而进行的维护活动,约占4%。
1.5几种典型的软件开发模型,瀑布模型快速原型模型增量模型螺旋模型统一过程模型,1.5.1瀑布模型,瀑布模型即软件生命周期模型,是软件工程的典型模型。
软件生命周期的各个阶段如同瀑布流水般逐级下落,形成自上而下,相互衔接的固定次序(见书图1-3)。
瀑布模型采用结构化方法开发,包括结构化分析、结构化设计、结构化程序设计和结构化测试方法。
瀑布模型是一次开发就将一个包含全部功能的产品交付用户使用。
1.5.1瀑布模型的特点,瀑布模型具有顺序性和依赖性,即后一阶段的工作必须在前一阶段的工作完成后才能开始。
瀑布模型强调的是优质,即每一步都循序渐进,及早消除隐患,从而保证软件质量。
强调两点:
文档、复审它的致命缺点在于“单向性”只有做出精确的需求分析,才能取得预期的结果。
由于各种客观、主观的原因,需求分析往往不很精确,常常给日后的开发带来隐患。
太理想化,不够灵活.,1.5.2快速原型模型,快速建立一个只包括核心功能并可在计算机上运行的程序(原型)。
用户通过使用这个原型,提出进一步的需求,开发人员按照用户意见快速修改原型系统,然后再次请用户试用,直到得到明确完整的需求,按照这个最后的需求开发出的系统可以满足用户的真实需求。
优点是保证用户的真实需求得到满足.特点是用户一直参与,不断改进,系统边做边改。
原型的用途是获知用户的真正需求,一旦需求确定了,原型将被抛弃。
1.5.3增量模型,增量模型也称渐增模型,把软件产品作为一系列的增量构件来设计、编码、集成和测试。
增量模型从一组给定的需求开始,通过构造一系列的可执行工作版本来实施开发活动,每一个工作版本都纳入更多的需求。
步骤:
将系统分成小的模块按顺序(重要程度)将组件交给客户每次交互的组件都提供更多的功能。
1.5.3增量模型,增量模型的优点:
分批地逐步向用户提交产品,能在较短的时间内向用户提交可完成部分工作的产品。
逐步增加产品功能,可以使用户有较充裕的时间学习和适应新产品。
不同的构件将可以并行开发,可能能加快项目的进度。
使用增量模型的困难是,在把每个新的增量组件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品,并且可能冒构件无法集成到一起的风险。
1.5.4螺旋模型,螺旋模型将工程划分为4个主要活动:
制定计划、风险分析、实施工程和客户评估。
4个活动螺旋式地重复执行,直到最终得到用户认可的产品。
制定计划:
确定软件目标,选定实施方案,弄清项目开发的约束条件。
风险分析:
分析选定方案,考虑如何识别和消除风险。
实施工程:
实施软件开发。
这一步相当于纯粹的瀑布模型。
客户评估:
对当前工作结果进行评价,提出改进产品的建议。
如图P1.8:
螺旋模型适用于有一定技术风险的大型软件系统的开发。
1.5.5统一软件开发过程,统一软件开发过程(RUP)是由Rational公司开发的一种软件过程。
可以认为它是一种综合了瀑布模型,增量模型,螺旋模型,快速原型模型优点的混合模型。
它的开发使用UML。
在需求分析阶段,分析人员用业务用例建立需求模型。
在设计阶段,设计人员根据用例进行设计,建立系统的设计模型和实现模型。
在开发阶段,开发人员把设计模型和实现模型与用例进行比较、评价和设计。
在测试阶段,用例作为测试的依据,测试人员根据用例来设计测试用例,从而验证软件是否正确地实现了用例。
1.6软件开发方法简述,1)结构化方法自70年代以来,结构化方法得到了广泛的应用和普及。
该方法是一种面向数据流的开发方法,其实质就是功能分解和抽象。
结构化方法包括结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)。
作为图形表示方法有数据流图、模块层次结构图、程序流程图,PAD图等。
1.6软件开发方法简述,2)面向数据结构的软件开发方法Jackson方法是一种面向数据结构的设计方法,它从目标系统的输入、输出数据结构图入手,导出程序结构,并在此基础上进行详细设计和编程。
3)面向对象软件开发方法面向对象方法学是20世纪90年代发展起来的软件分析设计方法。
面向对象技术是软件技术的一次革命,在软件开发史上具有里程碑的意义。
随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT(ObjectModellingTechnique),软件开发方法,3)面向对象软件开发方法(续)该方法把客观世界的事物或实体都看成对象,把对象作为分析设计的基本元素,把所有对象都划分成对象类,类可以派生和继承,对每个对象类都定义一组数据(属性)和方法(行为)。
OO技术在需求分析、可维护性和可靠性这三个软件开发的关键环节和质量指标上有了实质性的突破,大大缓解了软件危机。
软件质量的评价,从以下几方面对软件作评价:
1可维护性2可靠性3可理解性4效率一般,在软件系统整个开发期间,必须成立软件质量保证小组负责质量保证工作。
小结,软件包括程序与程序相关的数据和文档软件开发包括编程和相关文档的建立维护要消除软件危机必须清除错误认识,运用软件工程的原理与方法指导和管理软件开发全过程。
软件工程研究软件开发的技术,工具,过程、过程管理等方面软件生存周期可以分成多个阶段,每个阶段完成一些确定的任务,各个阶段互相衔接完成目标系统的开发和维护,