软件工程方法学和软件过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二讲软件工程方法学和软件过程
一、软件的生命周期
1、软件的生命周期
软件同世界上其它所有事物一样,也有产生、发展、成熟到消亡的过程,称为软件的“生命周期”(life cycle)。“生命周期”把软件不仅仅看作一个静态的事物,而看成是一个过程,需要动态地进行控制和管理,这对纠正软件开发中的各种错误观念,实现对经济上合理有效的软件开发是至关重要的。
“生命周期”的概念是软件工程的基石,一切软件工程的研究和实践都是在此概念基础上进行的。
2、软件生命周期的阶段划分
根据软件自身的特点,生命周期可以划分为以下四个主要阶段:
(1)软件定义:
确定软件开发的目标和具体要求。
(2)软件开发:
实现软件实体,测试,并交付用户
(3)使用和维护:
用户使用软件,开发者进行维护
(4)软件废弃:
软件不再适应新的需求,维护代价太高,停止使用
二、软件工程方法学
1、软件工程方法学
软件工程方法学是指一套完整的、相关的软件开发技术,包括原则、方法、过程和工具,也称为软件开发范型。
目前主要的软件工程方法学包括:
生命周期方法学
面向对象方法学
敏捷方法学
2、生命周期方法学:
(1)定义:
生命周期方法学是指严格按照软件的生命周期,采用分阶段计划和控制,以及顺序实施的步骤,和各种结构化分析(SA,Structured Analysis)和结构化设计(SD,Structured Design)技术的软件开发方式。
生命周期方法学首先是一种软件开发的方式,它的特点,一是分阶段计划、控制、顺序实施,另外就是在各个阶段采用结构化(包括结构化分析和结构化设
第 1 页
计)技术。
要注意:软件的生命周期概念和软件工程的生命周期方法学概念是两个不同的概念,不能混淆。软件的生命周期方法学,只是软件开发的一种方法学,同其他软件开发方法学一样,都是以软件生命周期的概念为基础而研究建立的。
生命周期方法学是软件工程最传统的方法学,虽然它并未完全解决软件危机的问题,但是对软件工程的发展起到了极其重要的促进作用,至今仍旧是最成熟和应用最为广泛的方法学。
我们上面给出了软件工程生命周期方法学的定义,下面我们就根据这个定义,来详细讨论一下生命周期方法学的主要特点,分析一下怎么样的软件开发方式就可以被称做是“生命周期方法学”。
(2)特点:
严格的分阶段计划
软件危机的主要表现之一,就在于软件的开发过程难以管理和控制,软件的质量没有保证。随着软件规模越来越大,开发周期越来越长,整个软件开发过程也变得越来越复杂,越来越混乱。人类解决复杂问题的一个惯常方式就是分解,把复杂的事物分解为小的部分,再逐一解决。生命周期方法学依照软件的生命周期,将完整的软件开发过程从时间上划分为许多相对独立的阶段。在每一个阶段,都有它确定的任务和方法,以及完成的结果的标准。
瀑布式开发模式
“瀑布式开发模式”,也就是定义里的“顺序实施”。瀑布的特点是水流从上到下,一落到底,不会反复。生命周期方法学采用了从上到下,各个阶段逐一进行的软件开发方式,前一个阶段结束后形成的结果作为下一个阶段工作开始的依据。在每一个阶段的任务没有按质量要求完成时,不进行下一个阶段的工作,每个阶段完成后也不再反复。
严格的技术审查和管理复审
技术审查和管理复审是技术和经济两个方面管理软件开发过程,保证软件的
质量,控制开发成本和进度。
技术审查包括文档齐备性的形式审查和阶段结果的实质审查。技术审查的要点就是不能把错误带入下一个阶段,以满足瀑布式开发模式的需要。技术审查通过后要进行管理复审。它由组织开发工作的项目管理人员进行,是从进度和成本的角度审查本阶段的工作,并对后续阶段的成本和进度计划进行调整,并对后续的开发目标进行决策。
各个阶段采用结构化技术
结构化技术的基本思想是自上而下,逐步求精。结构化技术最先起源于编程领域,后来随着生命周期方法学的发展被全面应用到软件开发过程的各个阶段。在后续生命周期方法学各个阶段的详细介绍中会说明各种结构化技术的具体方法。
3、面向对象方法学:
(1)定义:
面向对象方法学是以面向对象技术为核心,利用类的继承等复用方式,通过逐步细化地建立对象模型,以及迭代和演化的步骤完成软件开发的模式。
第 2 页
面向对象方法学起源于面向对象程序设计,是目前最符合人类解决现实问题的思维模式和物理系统运行方式的软件开发方法学。
(2)特点:
以对象作为基本的软件构件
面向对象的软件结构和面向流程的软件结构之间有巨大的区别,与现实世界中的实际系统更加吻合,是软件构建思想上的一次革命。
软件定义和实现的统一
无论在定义、设计还是在实现阶段,面向对象方法学都是通过对系统模型的逐步细化和精化来完成的,因此整个软件的开发过程就是一次由粗到细构建对象模型的过程,定义和实现不再截然划分。
重视软件复用
面向对象方法学使用类来完成对象的定义,类还可以通过继承派生出新的类,因此面向对象方法学本质上就具备了良好的软件复用的基础,可以在不同软件中使用已有的类来派生出新的类,既利用了前人的软件开发成果,又可以根据每个软件的实际情况产生新的对象,结合对象完善的封装机制,实现对象模型的多层次、普遍的复用。
通过逐步演化来完成软件开发
面向对象方法学使用循环迭代的方式来开发软件,整个软件系统是逐步精华
的,这既符合人类对事物的认识模式,又可以尽早获得软件开发的概貌性结果,
便于对软件需求进行验证。
4、敏捷方法学:
(1)定义:
敏捷方法学是针对用户需求迅速变化的现实情况,采用短周期交付形式和协
作开发的轻量级软件开发方式。
敏捷方法学是程序员对过多强调严格规范和文档的软件工程方法的一次更
高水平上的反动,强调以人为本、追求目标和“轻但适用”。
(2)特点:
追求软件交付使用这一终极目标
强调全面合作和交流
敏捷方法学把软件开发定性为一种创造和交流的合作活动,强调用户和开发方不仅仅是合同的甲方和乙方,而是必须全面合作来完成软件开发工作;用户和开发人员,开发人员之间的有效交流是最重要的成功因素,致力于寻找快捷、方便和低成本的交流方式。
重视软件开发中人的个性
敏捷方法学不把软件开发人员看做完成任务的机器,强调发挥个人的潜能和
主动性,保障开发人员得到足够的尊重和照顾,维持开发人员的工作积极性,以
第 3 页