[chjmailbox]的博客:
http://chenji.mypm.net
敏捷软件过程管理的容变能力(3)

软件过程和过程管理必须适应变化和创造变化来使组织获得持续的竞争力,这种对变化的反应能力使软件过程管理成为一个智能化的过程,过程与能力存在一种动态的、可控的相互作用,通过重构过程来塑造过程的容变能力。敏捷软件过程管理的容变能力模型受到认知过程理论的启发。

容变过程模型
软件过程管理的“计划-注意-同时/继时加工”模型(Software Process Management Planning-Attention–Simultaneous processing–Successive processing Model,SPM-PASS)表示为一个容变过程,这个容变过程由计划过程(Planning)、注意过程(Attention)、同时性加工过程(Simultaneous processing)和继时性加工过程(Successive processing)四个核心过程组成,这四个过程之间不是顺序性的关系,而是一个层次关系,包含了不同复杂度和特性三个层次:注意过程层、加工过程层、计划过程层,四个过程和三个复杂性层次构成的有机整体。

SPM-PASS模型

注意过程是所有过程的基础,是最低层次和最基本的过程,项目中的风险因素和机会因素通过注意过程筛选和锁定,项目团队可以有选择的关注项目内外部环境中的某些变化,同时屏蔽另外一些变化干扰因素。加工过程处于中间层次,实现对各种变化因素的输入进行加工处理,同时性加工过程将各种因素进行整合,继时性加工过程实现顺序性的加工。计划过程在发现问题(注意过程)、处理问题(加工过程)的基础上确定、选择、采用一定的策略和方法来分析问题、解决问题、提出目标,主动创造和适应市场变化,是系统中最高级的层次。注意过程、加工过程和计划过程共同作用,相互影响,以变化信息的加工处理为中心形成了有机整体。

1     注意过程
对于广泛复杂的不确定性问题,首先必须把有限的精力有选择地、持续地集中于关键性的问题上,了解和跟踪其变化,以便随时对不可预知的变化采取应对措施。敏捷软件过程是以商业目标驱动的,软件项目管理的首要内容是项目范围管理,项目范围的确定依赖于对业务需求的理解和商业目标的确定。但是,目前软件过程中对业务需求的管理和商业机会把握很难令人满意。软件开发者和客户都为“如何确定需求”、“哪些是需要实现的需求”、“需要如何变化”等问题困扰,原因是需求调查与分析的范围实在太广泛而难以建立焦点。软件组织在以往过程管理中往往忽视了如何把精力集中于一个业务需求的焦点而执行快速的应对流程,没有对需求特性的变化建立快速的反馈机制。与业务需求不确定性类似的问题同样出现在技术解决方案开发上。注意过程在CMM和敏捷方法中都有很多体现,如CMM中的SSM、SPTO、OPF、DP、TCM等,而在敏捷方法中注意力更是其快速、适应和客户满意度的竞争力源泉。

软件过程容变能力的基础是注意过程,强调的是注意的选择性、持续性和注意过程的成本。

1)注意的选择性
注意过程的选择性可以体现在过程对项目执行焦点的引导能力,使软件开发活动关注于关键的细节和重要的信息。FDD把特性(Feature)放在开发流程的首要位置,而由特性来驱动后序的软件开发,是为了引导开发工作能够找到稳定的焦点。XP的计划博弈是在客户与开发者共同参与的博弈过程中对开发焦点进行的选择。

注意过程选择性的关键是在软件开发中开发者需要暂时的放弃,XP方法中的YAGNI(You Aren't Gonna Need It)原则体现了这一观点。作为设计人员,在没有搞清楚是否需要某些特性前不要向软件添加这些特性,因为这一行为实际上应当是由业务推动的,并且因为我们经常会对以后我们将“需要”什么作出错误的判断,YAGNI 让我们一直专注于简单性,屏蔽使功能复杂化的设计思想的干扰。

2)注意过程的持续性
单单依靠注意过程发现问题是不够的,过程管理必须使项目团队对于关键问题的关注在一段时间内保持稳定,不被非关键的问题打乱,也不会被不断涌现的新的变化引入歧途。

大多数的敏捷软件开发方法采用面向可运行的软件产品的方法把团队的注意力保持在最关键的客户价值上。比如XP的持续集成,持续集成的主要思路是将软件过程末期的软件集成分摊到软件的全过程,使团队始终关注于正在不断进化的软件版本,而不被阶段性的调试问题分散了工作焦点。

3)注意过程的成本
注意过程存在时间和资源上的成本,好的软件过程能够用较低的时间、人力代价的前提下实现工作焦点的确定和保持。如测试在先方法、小版本、40 小时工作制、简单设计、迭代等,目的在于在一定时间内把开发工作集中于尽量小的目标从而得到快速的交付物。

对于不同性质的软件项目,在注意过程上的投入是不同的,在适用严格过程的关键性项目中,注意过程往往集中在以计划为中心的活动上。如CMM的软件项目跟踪和监督过程(SPTO),软件项目的已文档化计划用作跟踪软件活动、传送状态和修订计划的基础。管理者监督软件活动,通过在所选择的软件工作产品完成时和所选择的里程碑点,将实际的软件规模、工作量、成本和进度与计划相比较,来确定进展情况。如果使用高成本的过程,项目的性质应该与过程的成本相匹配,否则,可能因为没有足够的持续的投入而无法保证注意过程的选择性和持续性。

2     加工过程
项目环境中的各种变化因素把项目推向混沌无序,加工过程是为了从混沌无序的变化因素中建立结构性的视图。信息加工的主要功能是接受、加工、维护输入的变化信息,继时性加工进行信息的序列组织,同时性加工进行同步性的整合。加过程强调加工的速度、规模和加工成果的创造性。

1)继时性加工过程
继时性加工过程要识别各种风险、机会因素的逻辑性关系,如识别各种需求变化的优先级别、选择和应用不同的软件开发子过程、理解软件功能的增量方式、预测后序发生的变化、描画出业务对象的工作流程等。使项目团队具备继时性加工能力是软件过程的初衷,传统的过程管理理论强调过程的顺序性的特点,在继时性加工过程上的分析很多,如CMM的SCM、PR和SQA、SQM等。

敏捷性需要以尽可能快的速度对输入的变化因素进行加工,从技术的层面上来说,是把可以自动化的部分让软件来做。在各种软件过程中,都对辅助性的过程自动化工具提出要求,如RUP的CASE工具集、XP的自动测试和持续集成,自动化工具可以大大加快串行工作的效率。从管理的层面上,继时加工速度的提高依靠清晰简便的过程定义和控制方法,同时,充分发挥开发者的灵活性。

瀑布模型、增量开发方法都是继时性加工过程,但是两者对于项目容变能力的贡献差别巨大,原因在于加工过程的规模差异。加工任务的规模影响到加工过程的可预测性和加工的周期,以及必不可少的控制约束。敏捷软件过程大多采用以小规模的版本交付实现快速有效的加工过程。

继时性加工过程的成果以功能点为主,是对功能需求线性加工成果,加工成果是否能够满足需求是对加工成果有效性的基本要求。继时性加工输出的成果如果不能对客户真正有价值,就不可能取得市场上的地位,更不可能成为市场竞争的优势。

2)同时性加工过程
过于强调过程的顺序性而忽视同时性、并发性,造成在很多软件组织中,一两个人组成的项目团队可以快速、高效的完成优秀的软件产品,而当成员增加时,效率就大大下降,软件功能不能使客户满意,这不能简单地解释为沟通协调问题,而是过程的同时性加工能力太差,当存在并发性的复杂结构时过程就失效了。

分析模式和设计模式概念的提出对过程的同时性加工能力提高有极大的意义,可以解决以体系结构为中心的开发过程的结构重用问题,也便于降低软件规模扩张造成的复杂性,提高体系结构的清晰性和成熟性。

DSDM原型方法能够提高同时性加工的速度和正确性,以一个进化的产品原型作为系统功能的整体分析工具,加快了最终产品概念的形成。为了提高同时性加工的速度,XP方法中提出了隐喻方法,试图在模式和体系结构之外找到一个沟通成本更少,内涵更丰富的原型,提高开发的同时性加工能力,但实践证明,隐喻是XP中很不成功的一个部分,也说明同时性加工过程的问题比想象中更难解决。XP的另一些方法——持续集成、重构是非常成功的同时性加工过程,持续集成使组织在任何时候都能提供一个可交付的系统全貌,频繁地进行功能的全面检验。而重构是为了打破原有迭代和模块开发造成的混乱状况,对系统的内部结构进行新的模式识别和模式创新。

3     计划过程
计划过程是软件过程中的最高层次,是复杂性最高的过程。严格计划过程是CMM的强项,如SPP、RM、TP、IC、QPM、PCM等。计划也是PMBOK很重视的方面。敏捷方法中不迷信计划,但不是不强调计划过程,如XP中的小版本、计划博弈、结对编程、测试在先等都是很强的计划过程。“计划一切”和“不做任何计划”都是十分容易的,真正重要的是平衡两者的关系。

计划过程为组织提供了分析活动、解决问题、评价成果的能力,在变化的环境中制定容变的策略,进行预测,按计划执行,处理反馈,自我控制和评价。

1)制定容变的策略
计划的行为比计划的文档重要得多,在复杂的变化环境下,应该有计划的推进变革朝着业务目标迈进。容变的策略是多种多样的,有的方法比较激进,有的方法比较严格,关键的是项目团队应该培养一种在变化莫测的环境下建立灵活的策略应对变化的勇气。

计划过程建立在加工过程基础之上,以继时性加工过程为主的计划过程表现为理性的、受控的、反馈的、现实的和具体的过程管理活动,以同时性加工为主计划过程表现为直觉的、创造性的、前馈的、自发的和抽象的过程组织活动。

2)进行预测
计划过程需要对变化进行尽可能的预测,应用预测的方法,但不依赖于预测的结果,这种预测不是为了用来制定严格的计划,而是指导注意过程和加工过程,使这些过程对可预知的变化有所准备。FDD不像其他迭代或增量方法那样倾向于在整个生命周期中只注重细小阶段,强调“尽可能首次做正确”,强调先期的建模,在项目的第一阶段开发系统的整体模型,构建特性列表,然后再按特性制定计划和进行设计构建。DSDM强调功能模型迭代,将大多数的需求在原型中进行证明,这些方法都是为了增强软件过程的预测能力,尽量减少后期的重构活动。

3)按计划执行
计划的合理性是保证项目按计划执行的重要因素,计划的合理性通过频繁的反馈来掌控。过程的执行需要必要的纪律,以平衡过程的灵活性。计划执行的方式可以是严格的,也可以是协作的,但关键是对于确定性问题能够制定良好的计划并把它变为行动,对于不确定性问题能够灵活调整计划来协调团队的行为。SCRUM方法用一系列的待交付表来界定产品特性并用来管理项目,通过Sprint待交付表图来监测项目的整体进展,管理人员通过每日例会和Pre-Sprint、Post-Sprint来调整目标,从而在高风险、不确定性的项目中增加成功的可能。

4)处理反馈
计划过程建立尽量早和尽量频繁的各种形式的反馈来掌握项目推进变化的前进方向。反馈来自于客户和市场对过程成果的反应,要使过程在复杂变化的环境下产生具有市场竞争力的成果,必须以客户的价值来评价过程成果的价值。敏捷软件过程应该通过快速、短迭代式的开发,不断产出和演化可运行软件,加强项目有关人员的信息交流等手段来提高反馈的速度、力度和准确性。反馈是XP方法的一个基本策略,XP通过持续的反馈支持变化,而且认为反馈比前馈更加重要。

5)自我控制和评价
计划过程并不只是形式的制定计划概念,而是组织过程的整体计划性体现,这种计划过程存在控制下的计划过程和自发的计划过程两种形式。控制下的计划过程是基于预测和自上而下的控制,自发的计划过程基于自适应和自下而上的协作。过程的自我评价要对自己的变化观点、客观环境、知识结构与知识更新、开发思想、方法、预测、策划、创造性、观念等进行评价,是对过程管理容变能力的一个整体评价。SCRUM在每一个Sprint迭代结束时,必须召开一个Post-Sprint会议来回顾过程,向客户演示特性,并从技术角度回顾整个项目,会议的结论为下一个Pre-Sprint的计划提供指导。

chjmailbox 发表于 2007/2/23 15:54:00 阅读全文 | 回复(0) | 引用通告 | 编辑 | 收藏该日志

发表评论:

    昵称:
    密码:
    主页:
    标题:
公 告
登 陆
日志日历
搜 索
日 志
评 论
链 接
统 计