《系统分析与设计方法及实践》一2.4 软件过程模型

2.4 软件过程模型

软件过程是整个软件生命周期中一系列有序的软件生产活动的流程。为了能高效地开发一个高质量的软件产品,通常把软件生命周期中各项开发活动的流程用一个合理的框架——开发模型来规范描述,这就是软件过程模型,或者称为软件生命周期模型。所以,软件过程模型是一种软件过程的抽象表示法,“建模”是软件过程中最常使用的技术手段之一。
软件过程模型是从一个特定的角度表现一个过程,一般使用直观的图形标识软件开发的过程,主要根据软件的类型、规模,特别是软件的开发方法、开发环境等多种因素确立过程模型。
过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。
几十年来,软件工程领域先后出现了多种不同的软件过程模型,典型的代表是瀑布模型、螺旋模型、演化式模型和面向对象模型。它们各具特色,分别适用于不同特征的软件项目的开发应用。

2.4.1 传统软件过程模型

1.瀑布模型
在20世纪80年代之前,瀑布模型是最早也是应用最广泛的软件过程模型,现在它仍然是软件工程中应用最广泛的过程模型。瀑布模型提供了软件开发的基本框架。其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。
各个阶段产生的文档是维护软件产品时必不可少的,没有文档的软件几乎是不可能维护的。瀑布模型中的文档约束,使软件维护变得更加容易。由于绝大部分软件预算都花费在软件维护上,因此,使软件变得比较容易维护就能显著降低软件预算。可以说,瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。但是,瀑布模型是由文档驱动,也是其一个主要缺点。软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。但仅仅通过写在纸上的规格说明,用户很难全面正确地认识动态的软件产品。
瀑布模型将软件生命周期划分为软件计划、需求分析和定义、软件设计、软件实现、软件测试、软件运行和维护这6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。从本质来讲,它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好“返回”上一个阶段并进行适当的修改,开发进程从一个阶段“流动”到下一个阶段,这也是瀑布开发名称的由来。采用瀑布模型的软件过程如图2-1所示。

按照传统的瀑布模型开发软件,有下述的几个特点。
1)阶段的顺序性和依赖性:瀑布模型的各个阶段之间存在着这样的关系——后一阶段的工作必须等前一阶段的工作完成之后才能开始。同时,前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。
2)推迟实现的观点:对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间越长。主要原因是前面阶段的工作没做或做得不到位,过早地进行下一阶段的工作,往往导致大量返工,有时甚至产生无法弥补的问题,带来灾难性后果。瀑布模型在编码之前设置了系统分析与系统设计的各个阶段。分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的编程实现。清楚地区分逻辑设计与物理设计,尽可能推迟程序的编程实现,是按照瀑布模型开发软件的一条重要的指导思想。
3)质量保证的观点:软件开发最基本的目标是开发效率高,产品质量高。为保证软件的质量,首先,在瀑布模型的每个阶段都必须完成规定的文档,只有交出合格的文档才算是完成该阶段的任务。完整、准确的合格文档不仅是软件开发时期各类人员之间相互沟通的媒介,也是运行时期对软件进行维护的重要依据。其次,在每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。事实上,越是早期阶段犯下的错误,暴露出来的时间就越晚,排除故障改正错误所需付出的代价也越高。
4)文档驱动的观点:瀑布模型着重强调文档的作用,并要求每个阶段都要仔细验证。但这种模型的线性过程太理想化,已不再适合现代化软件开发的模式,其主要问题在于:各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误,可能引起客户的惊慌,后果也可能是灾难性的;实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化造成大的混乱;采用这种线性模型,会经常在过程的开始和结束时碰到等待其他成员完成其所依赖的任务才能进行下去的情况,有可能花在等待上的时间比开发的时间要长。
2.增量模型
增量模型(Incremental Model)是在项目的开发过程中以一系列的增量方式开发系统。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。
增量方式包括增量开发和增量提交。增量开发是指在项目开发周期内,以一定的时间间隔开发部分工作软件;增量提交是指在项目开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应文档。根据增量的方式和形式的不同,分为渐增模型和原型模型。
渐增模型是瀑布模型的变种,有两类渐增模型:

  • 总体开发增量构造模型:它在瀑布模型的基础上,对一些阶段进行整体开发,对另一些阶段进行增量开发。前面的开发阶段按瀑布模型进行整体开发,后面的开发阶段按增量方式开发。增量构造模型如图2-2所示。在增量构造模型中,需求分析阶段和设计阶段都是按瀑布模型的整体方式开发,但是编码阶段和测试阶段是按增量方式开发。
  • 增量开发增量提交模型:它在瀑布模型的基础上,所有阶段都进行增量开发,也就是说不仅是增量开发,也是增量提交。在增量提交模型中,项目开发的各个阶段都是增量方式。先对某部分功能进行需求分析,然后顺序进行设计、编码、测试,把该功能的软件交付给用户,然后再对另一部分功能进行开发,提交用户直至所有功能全部增量开发完毕。

增量构造和增量提交的一些区别:增量构造是在瀑布模型的基础上,一些阶段采用增量开发,另一些阶段采用整体开发。增量提交是在瀑布模型的基础上,所有阶段不仅采用增量开发也采用增量提交。
增量构造模型与原型模型和其他演化方法一样,本质上都是迭代的,但与原型模型不一样的是,它强调每一个增量都发布一个可操作的产品。早期的增量是最终产品的“可拆卸”版本,但提供了为用户服务的功能,并且为用户提供了评估的平台。
增量模型融合了线性顺序模型的基本成分和原型模型的迭代特征。增量模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估,都作为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。
增量模型引进了增量包的概念,无须等到所有需求都出来,只要某个需求的增量包出来即可进行开发。虽然某个增量包可能需要进一步适应客户的需求并且更改,但只要这个增量包足够小,其影响对整个项目来说是可以承受的。
增量模型的人员分配灵活,刚开始不用投入大量人力资源;如果核心产品很受欢迎,则可增加人力实现下一个增量;当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。这样即可先发布部分功能给客户,以便稳定客户。此外,增量能够有计划地管理技术风险。
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的可运行产品的一个子集。整个产品被分解成若干个构件,开发人员逐个交付产品,这样软件开发可以很好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:
1)各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
2)在实际的软件开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
3)如果增量包之间存在相交的情况且未很好的处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适用于需求经常改变的软件开发过程。
3.螺旋模型
螺旋模型(Spiral Model)是在1988年,由Barry Boehm正式提出的模型,它将瀑布模型和快速原型模型结合起来,它不仅体现了两个模型的优点,而且还强调了其他模型均忽略了风险分析,特别适合于大型复杂的系统。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发就前进一个层次。采用螺旋模型的软件过程如图2-3所示。

在“瀑布模型”的每一个开发阶段前引入非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。该模型沿着螺旋线进行若干次迭代,图中的四个象限分别代表了以下活动:
1)制定计划:确定软件目标,选定实施方案,确定项目开发的限制条件。
2)风险分析:分析评估所选方案,考虑如何识别和消除风险。
3)实施工程:实施软件开发和验证。
4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
螺旋模型有许多优点:对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险;更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便,有助于提高目标软件的适应能力。并且为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发风险。
螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,帮助我们将软件质量作为特殊目标融入产品开发之中。但螺旋模型也有一定的限制条件:螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于复杂并具有高风险的系统。对于这些系统,风险是软件开发不可忽视且潜在的不利因素,它可能在不同程度上损害软件开发过程,影响软件产品的质量。减小软件风险的目标是在造成危害之前,及时对风险进行识别及分析,决定采取何种对策,进而消除或减少风险的损害。
如果执行风险分析将大大影响项目的利润,则风险分析是不可行的,那么进行风险分析就显得毫无意义,因此,螺旋模型只适合于大规模软件项目。事实上,项目越大,风险也越大,因此,进行风险分析的必要性也越大。此外,只有内部开发的项目,才能在风险过大时中止项目。螺旋模型的主要优势在于,它是风险驱动的,但是,这也可能是它的一个劣势。软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险。

2.4.2 面向对象过程模型

从方法学的角度可以认为,面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。
正确地运用面向对象方法学开发软件,则最终的软件产品由许多较小的、基本上独立的对象组成,每个对象相当于一个小型的程序,而且大多数对象都与现实世界中的实体相对应,这样就降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。对象是相对独立的实体,可以在以后的软件产品中复用。基于此,面向对象范型的另一个重要优点是促进了软件复用。面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性。
1.统一过程模型
统一过程(Unified Process,UP)是风险驱动的、基于用例技术的、以架构为中心的、迭代的、可配置的软件开发流程。UP是一个面向对象且基于网络的程序开发方法论。根据Rational Rose和统一建模语言的开发者的说法,它可以为所有方面和层次的程序开发提供指导方针、模板以及事例支持。
统一过程是一个软件开发过程,是一个通用的过程框架,可以用于各类软件系统和应用领域。统一过程是以用例驱动的,以架构为中心,迭代和增量的过程。统一过程是在重复一系列组成系统生命周期的循环。每一次循环包括4个阶段:初始、细化、构造和移交。每个阶段又进一步细分为多次迭代的过程,如图2-4所示。
每次循环迭代会产生一个新的版本,每个版本都是一个准备交付的产品。
1)初始阶段。在初始阶段形成将好的想法发展为最终产品的构想,提出了该产品的业务实例。该阶段要完成:系统向它的每个重要用户提供的基本功能是什么?该系统的逻辑架构大概是什么样子?开发该产品的计划如何?开销多大?在该阶段主要建立关键用例的简化用例模型,用于刻画系统主要功能。架构是实验性的,通常是包括主要子系统的大致的轮廓。要确定最主要的风险及其优先次序,要对细化阶段进行详细规划,并对项目进行粗略估算。

2)细化阶段。在细化阶段,详细说明该系统的绝大多数用例,并设计出系统的架构。架构可以表示为系统中所有模型的不同视图,合起来表示整个系统,即架构包括用例模型、分析模型、设计模型、实现模型和实施模型的视图。在细化阶段末期,要规划完成项目的活动,估算完成项目所需的资源。关键问题是用例、架构和计划是否足够稳定、可靠,风险是否得到控制,以便按照合同的规定完成整个开发任务。该阶段的结果是架构基线。
3)构造阶段。构造阶段将构造出最终产品——软件。在该阶段架构基线逐步发展成为完善的系统,将消除所需要的大部分资源,架构可以进行微调,但系统架构是稳定可靠的。要回答的问题是早期交付给客户的产品是否完全满足客户的需求。
4)移交阶段。移交阶段包括产品进入分析后期的整个阶段,用户使用分析法发现产品的缺陷和不足,开发人员改正问题及完善系统形成更通用的版本。该阶段包括制作、用户培训、提供在线支持以及改正交付之后发现的缺陷活动。
统一过程在定义4个阶段及其迭代过程时,又给出了5个核心工作流:需求、分析、设计、实现和测试。每个工作流在各个阶段所处的地位和工作是不同的。图2-5给出了统一过程的核心工作流。
1)需求工作流。需求工作流的目的是致力于开发正确的系统。需求工作流就是要足够详细地描述系统需求,使客户和开发人员在系统应该做什么和不应该做什么方面达成共识。
2)分析工作流。分析工作流的目的是更精确地理解需求,也是为了得到一个易于维护且有助于确定系统结构的需求描述。与需求工作流相比,分析工作流可以采用开发人员熟悉的语言来描述和组织需求。分析工作流的任务是探究系统内部,解决用例间的干扰以及类似的问题。分析得到的需求结构可用作构造整个系统的基本输入。分析工作流使用分析模型表达系统的本质。
3)设计工作流。设计工作流的目的是深入理解与非功能性需求和约束相联系的编程语言、构件使用、操作系统、分布与并发技术、数据库技术、用户界面技术和事务管理技术等相关问题。设计工作流要把实现工作划分成更易于管理的各个部分,捕获早期子系统之间的主要接口,建立对系统实行的无缝抽象。
4)实现工作流。实现工作流探讨如何用源代码、脚本、二进制代码、可执行体等构件来实现系统。实现工作流的目的是规划每次迭代中所要求的系统集成,通过把可执行构件映射到实施模型中的节点的方式来分布系统,实现设计过程中发现的设计类和子系统,对构件进行单元测试。
5)测试工作流。测试工作流通过测试每一个增量来验证实现的结构。测试工作流的目的是为了规划每一次迭代需要的测试工作,包括集成测试和系统测试。测试工作流的任务是设计和实现测试,执行各种测试并系统地处理每个测试的结果。

统一过程描述了如何为软件开发团队有效地部署经过商业化验证的软件开发方法。它的目标是在可预见的日程和预算前提下,确保开发出满足最终用户需求的高质量产品。为使整个团队有效利用最佳实践,统一过程为每个团队成员提供了必要准则、模板和工具指导。
1)迭代软件开发。针对复杂的软件系统,RUP使用连续的开发方法,并支持专注于处理生命周期中每个阶段中最高风险的迭代开发方法,极大地减少了项目的风险性。迭代方法通过可验证的方法来帮助减少风险——增量提交的可执行版本使最终用户不断地介入和反馈。
2)需求管理。统一过程描述了如何提取、组织和文档化需要的功能与限制。它们给开发和发布系统提供了连续的和可跟踪的线索。捕获功能性需求使用了用例和场景,并确保由它们来驱动设计、实现和软件的测试,使开发出的软件更加满足最终用户的需要。
3)基于构件的体系结构。统一过程支持基于构件的软件开发。构件是实现清晰功能的模块、子系统。在开发之前,关注早期的开发和健壮可执行体系结构的基线。它描述了如何设计灵活的、可容纳修改的、直观便于理解的,并且促进有效软件重用的弹性结构。
4)可视化软件建模。开发过程注重可视化建模,捕获体系结构和构件的构架与行为。这样,我们就可以隐藏细节和使用“图形构件块”来书写代码。可视化抽象能帮助我们沟通软件的不同方面,观察各元素如何配合在一起,确保构件模块与代码一致,保持设计和实现的一致性,促进明确的沟通。Rational软件公司创建的工业级标准统一建模语言(Unified Modeling Language,UML)是成功可视化软件建模的基础。
5)验证软件质量。质量应该基于可靠性、功能性、应用和系统性能,根据需求来进行验证。UP帮助计划、设计、实现、执行和评估这些测试类型。
6)控制软件变更。开发过程描述了如何控制、跟踪和监控修改以确保成功的迭代开发。它同时指导如何通过隔离修改和控制整个软件产物的修改来为每个开发者建立安全的工作区。
统一过程主要的优点:提高了团队生产力,在迭代的开发过程、需求管理、基于构件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。统一过程也存在一些缺点:统一过程只是一个开发过程,并没有涵盖软件过程的全部内容,如它在软件运行和支持等方面的内容略有不足;此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。统一过程是一个非常好的开端,但并不完美,在实际的应用中可以根据需要对其进行改进并可以用其他软件过程的相关模型对统一过程进行补充和完善。
2.构件集成模型
构件集成模型利用模块化方法将整个系统模块化,并在一定构件模型的支持下复用构件库中的软件构件,通过组合手段提高应用软件系统过程的效率和质量。构件集成模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的。构件集成模型由软件的需求分析和定义、体系结构设计、构件库建立、应用软件构建,以及测试和发布5个阶段组成,如图2-6所示。
基于构件的开发活动从标识候选构件开始,通过搜查已有构件库,确认所需要的构件是否已经存在。如果已经存在,则从构件库中提取出来复用;否则采用面向对象的方法开发它。之后在提取出来的构件通过语法和语义检查后,将这些构件通过代码组装到一起实现系统,这个过程是迭代的。基于构件的开发方法使得软件开发不再一切从头开发,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程。其优点是构件集成模型导致了软件的复用,提高了软件开发的效率。
由于采用自定义的组装结构标准,缺乏通用的组装结构标准,这样就引入了比较大的风险。可重用性和软件高效性不容易协调,这就需要比较有开发经验的开发人员,而一般的开发人员很难开发出令客户满意的软件。由于过分依赖于构件,所以构件库的质量影响着产品质量。
构件集成模型融合了螺旋模型的很多特征,支持软件开发的迭代方法。这种面向复用的过程模型,最明显的优势是减少了需要开发的软件数量,加快了软件交付,从而降低了开发成本,同时也降低了开发风险。当然,它的成功主要是依赖于可复用软件构件,以及能集成这些软件构件的框架。

时间: 2024-09-27 22:33:41

《系统分析与设计方法及实践》一2.4 软件过程模型的相关文章

《系统分析与设计方法及实践》一1.2 什么是软件分析与设计

1.2 什么是软件分析与设计 软件分析与设计是软件工程的重要组成部分,其定义目前还没有统一的标准.早期,软件工程专家B.W. Boehm将软件工程定义为:设计并构造计算机程序,以及为开发.运行和维护这些程序所必需的相关文件资料.Fritz Bauer如下定义软件工程:为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则.IEEE软件工程标准定义软件工程为:开发.运行.维护和修复软件的系统方法.尽管软件工程的具体定义不尽相同,且又有一些学者提出了更完善的定义,但都是

《系统分析与设计方法及实践》一2.2 敏捷软件开发

2.2 敏捷软件开发 在传统的软件开发方法中,工作人员努力构建客户想要的产品.他们花费大量的时间努力从客户那里获取需求,针对需求进行分析和建模,并且归纳成规格说明书.然后,评审说明书,与客户开会讨论,最后签字.表面上看他们开发的产品是符合客户的要求的,但通常事与愿违.在项目快要结束的时候,需求和范围.产品的适用性成为争论的焦点. 敏捷软件开发方法告诉我们开发项目是一个学习的体验.没有谁能完全理解所有需求之后才开始项目,即使是客户也一样.客户一开始有一些主意,但是他们也会随着项目的进展进一步了解他

《系统分析与设计方法及实践》一第1章 软件分析与设计概述

软件系统分析与设计是软件工程(Software Engineering,SE)的重要组成部分,其目的是倡导以工程化的原理.原则和方法进行软件系统开发,是解决当时出现的"软件危机"的根本途径.

《系统分析与设计方法及实践》一1.4 软件生产活动

1.4 软件生产活动在软件工程概念被提出来之前,开发人员错误地认为,软件就是编码,至于分析和设计等都是次要的.随着软件规模的不断增大,软件生产过程中暴露出很多问题.软件工程是为克服这些问题(软件危机)而提出的一种概念,并在实践中不断地探索它的原理.技术和方法.软件开发的工程化思想让开发人员看到,软件生产活动不仅是开发活动,还有重要的维护活动.管理活动,进而发展了过程改进活动.1.开发活动开发活动是软件人员生产软件的活动.开发活动是软件工程的核心过程活动,软件工程提供了一整套工程化的方法来指导软件

《系统分析与设计方法及实践》一第2章 软件分析与设计过程及其模型

随着软件工程的发展,人们开始关注软件分析与设计的核心问题--软件开发过程.软件过程是指把用户需要转变成软件产品所需的所有活动.有效的软件过程可以提高组织的生产能力.为了研究软件开发项目中各种活动的一般规律,以及对软件开发过程进行定量度量和优化,人们提出了所谓的软件过程模型,也叫做软件的生命周期模型.软件过程模型是一种开发策略,该策略对软件工程的各个阶段提供了一套范型,使工程的进展达到预期的目的.

《系统分析与设计方法及实践》一2.6 小结

2.6 小结 软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤.软件过程框架定义了若干个小的框架活动,为完整的软件开发过程建立了基础.软件过程框架的通用过程框架活动包括沟通.计划.建模.构建和部署. 软件工程的敏捷理念强调自我组织团队.团队交流与合作.敏捷对待变更.敏捷方法是一组敏捷实践技术的总称.随着敏捷开发思想和极限编程方法在21世纪初前几年的快速普及,结对编程也迅速被大家熟知和尝试.结对编程是极限编程的12个主要实践之一,它吸收合作式编程的关键思想,

《系统分析与设计方法及实践》一2.3 结对编程方法

2.3 结对编程方法 极限编程的实践中有一个非常重要的原则就是结对编程,这里所谓的结对编程并非是一个人在编程,另一个在看.另外一个人也同样起着非常重要的作用,他需要帮助编码的人找到低级失误,防止其编码出现方向性的错误,特别是在出现一个正在编码的人不擅长解决的问题的时候,他会直接替换编码的人来进行编程.这样做的好处也许只有在实践了之后才能够体会到,它不仅可以避免一些错误的发生,而且可以通过直接的讨论来更快地解决一些容易产生歧义的问题.在交流的过程中,大家的水平也会有很快的提高.结对编程的过程也是一

《系统分析与设计方法及实践》一2.5 能力成熟度模型CMM

2.5 能力成熟度模型CMM 2.5.1 什么是能力成熟度模型 CMM(Capability Maturity Model)是指"能力成熟度模型",是对软件组织在定义.实施.度量.控制和改善其软件过程的实践中各个发展阶段的描述.CMM是国际公认的对软件公司进行成熟度等级认证的重要标准.CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控与研究,以使其更加科学化.标准化,使企业能够更好地实现商业目标. CMM是由美国卡内基-梅隆大学的软件工程研究所(SEI)开

《系统分析与设计方法及实践》一1.1 什么是软件

1.1 什么是软件 软件分析与设计的主旨是以工程化的思想进行软件开发,以便生产出高质量和高效率的软件系统,即软件分析与设计研究的基础就是软件.那么,软件是怎么定义的呢?它有哪些特性呢? 1.1.1 软件定义与特性 软件是计算机系统中与硬件系统相对应的部分,包括一系列程序.数据及其相关文档的集合.在这里,程序是按照特定顺序组织的计算机数据和指令的集合:数据是使程序能正常执行的数据结构:文档是与程序开发.维护和使用有关的图文资料.软件系统的核心是程序,而文档则是软件系统不可分割的组成部分. 要理解软