开发人员疲于应付开发过程。统一过程过于繁重,过程改进程序需要过多繁琐的工作,而敏捷阵营又似乎承诺了太多。我们深知我们需要好的实践来保证按时,按照预算来开发出好的软件。我们需要从根本上对我们设计,配置,培训,采用和部署过程的方式进行重新设计。
什么是核心统一过程?
核心统一过程,或者我们称之为EssUP,是建立在现代软件开发实践之上的新一代软件开发过程。她是一个崭新的开始,开始于没有任何累赘的一页白纸。她慎重的集成了来自三个阵营的成功实践:统一过程阵营,敏捷方法阵营和过程改进阵营。每一个阵营都贡献了不同的过程能力。
但是,在我们更进一步深入讨论什么是EssUP之前,让我们首先快速列举出我们需要一个新过程的原因。
1、传统的软件过程过于繁重,没有人会去阅读大量冗长的过程描述。
2、过程必须关注对开发人员的支持,而不是仅仅面向过程专家。显然这篇论文是面向过程专家的,因为很少有开发人员真正的阅读过程方面的论文。
3、过程必须帮助团队在获得过程质量的同时获得软件质量。因此,要交付好的软件,而不仅仅是通过CMMI的评估。任何软件开发过程都必须聚焦于生产好的软件。
4、过程必须提供基于原则的敏捷。满足管理需求的同时不阻碍创新。
5、这个方法必须允许项目团队(开发人员在没有过程工程师帮助的情况下)很容易的将好的实践加入到现行过程中。
6、过程应该使团队更加强大。一个告诉您需要做什么,并且试图像机器人一样控制您行为的过程并不能够帮助您。
实践成为一等公民
一个传统的软件过程,比如统一过程,是通过对她所定义的不同角色所进行的活动和生产的制件进行描述的。这些活动和制件可能服务于不同的目的,例如基于用例的需求,测试驱动的设计、架构的构建、基于组件的开发,换句话说,他们在处理不同的实践。这些实践不是外在的、也不是可见的,甚至没有一个名字。这样的过程中所包含的许多实践可以被形象地比喻为“一锅汤”。
为了易于识别、设计和部署新的实践(它们的个数可能有上百个),我们需要让实践成为一等公民(first-class citizens),并且降低过程在软件开发中的地位。过程是您选择的一组实践的组合。为了达到这点,我们需要在这些实践的各种使用中,包括设计,部署,和改进,把她们区分开来。
EssUP就表现形式来看,与其它过程或者方法有很大的区别。她给过程工业引入了一种新的思想:关注点分离(Separation of Concerns :SOC或面向方面的思想)。当我们在过程开发中使用这种思想时,我们就能生成一个本质上不一样的过程。这样一个过程使得您可以更容易、更直观地定制您自己的软件过程。最重要的是她可以使计划和执行一个软件项目更自然更来自于直觉。为了使这样的思想更具象,我们在下面描述一些使用SOC思想的情况:
1、每一个实践都独立于其它实践。
您只需要选择您需要的实践,而不用必须去取消选定任何活动和制件。仅仅选择您想要的实践,并把她们与您现有的过程组合起来。
2、从现有的过程和核心统一过程的元素中,您可以很容易地分离出各个元素。这个特性允许您在需要时以一种进化的方式改进已有的实践。
从一个通用的平台开始,您可以使用一种源于纸牌游戏的简单技术来描述您自己的过程。以这个为基础,您可以自由灵活地导入我们的实践。您加入您需要的那些,和您认为您所在的组织可以采用的那些,却不需要承担巨大的风险。
3、她区分了过程的两个不同视图:过程的作者视图和软件开发者视图。在过去的软件过程里面,往往只关注作者视图。EssUP强调了开发者的视角。她采用了游戏中的一些方法来开发,培训,应用,并且使用这个过程,使之更轻量、敏捷。另外,我们保证这个游戏很好玩。
4、我们把核心的实践和非核心的实践进行了区分。这使得我们可以创建一个核心的轻量过程,同时这个过程有着很大的增量空间(比如上百个实践)。
这些年来,我们发现,只有极少的人真正阅读过程描述文档,不论是通过书籍或者通过网络。因此,给他们很多是没有意义的。取而代之的是提供真正的核心,让他们自己去学习其余他们想要的。有些人可能希望通过研读来学习,有很多文章和书籍都可以选择。一些人可以通过与已经获得相关知识的人一起工作来学习。这样分离关注点的结果是使过程非常轻量并且容易地响应变化。
5、她用一种平衡的方式分离了外在、显见的知识和内在、隐含的知识。内在的知识是那些您用这样或那样的方法获得的知识—您在大脑中储存他们。外在的知识是以可获得的描述形式存在的。过去的过程试图用这种显见的方式去捕获所有的相关知识。尽管这样的意图是好的,却使得过程变得繁重。EssUP只把核心部分显性化。其余的部分要么是隐含的要么是由核心部分引用而得来。然而,处理知识最巧妙的形式,是在需要时,使用智能代理—这样的方法我们称之为smart practice。
6、她为分离创造性工作和非脑力工作准做好了准备(prepared)。这使得开发者把时间用于人类所擅长的工作—创造性的工作—把非脑力的劳动交给智能代理去完成。我们使用做“好了准备(prepared)”这个术语是因为EssUP并不是自身含有代理;代理是一个附加软件。
7、她分离了两种制件:alphas和betas。我们现在还没有给他们起任何名字。我们认为alphas和betas两者的区别是所有项目中最基本的。您可以暂时用key thing代替alpha,用evidence代替beta。
Alpha是那些非常重要的东西,她们存在于所有项目中,不论是不是以书面的形式存在。事实上,alphas并不是为特定过程定义的。比如,每一个软件项目都有以下这些alphas: 项目(project),已实现的系统(implemented system),待完成列表(backlog),风险(risk)。每一个alpha有一系列的betas: 项目Alpha可能含有一个项目计划,一个迭代计划。风险Alpha包含一个风险列表。订单可能含有一个特性列表和一个改变列表。Beta是Alpha的证据。他们可以是描述,图表,流程图,任何文档或者非文档,只要您自己认可。没有文档意味着团队把这些知识都保存在头脑中了。
因此,alphas是稳定并独立于过程的,相反,betas可能基于您选择的特定实践。
Alphas和betas的分离使我们保持项目文档的最小化。我们可以用精确的方式讨论究竟有多少文档。这让我们能够用纪律化的方式实现敏捷。我们可以从次核心内容中,分离出核心内容。
是什么形成了过程的基础?
核心统一过程的中心,是一些简单、并被验证过的实践,在各种类型和规模的软件开发过程中,她们都可以被使用。这些实践都经过了特别的设计,因而可以被分别使用,或者按照您的需要任意组合。这使得过程很容易被采用,并为创造和集合出一个您自己需要的过程提供了坚实的基础,无论这些需要是来自开发人员还是来自开发组织。
EssUP来自于我们的五个基础实践,通过三个附加的工作实践可以减少组织中引入这个过程所付出的代价。
基础实践
五个基础实践都是关于技术开发工作的。
迭代核心:使您很容易采用迭代的,固定时间盒的方式来管理和控制您的项目。
架构核心:让您能够确定被选定的架构适合项目的需要。
用例核心:使团队以敏捷的方式获取需求,并在解决方案中驱动开发和测试。
组件核心:通过使用从面向对象及其他流行开发方法中继承而来的属性,使你的软件健壮、灵活、可重用。
建模核心:使您能够采用适当的细节等级,增强团队间的沟通,降低项目风险。
有效的团队协作
上面的五个开发实践组成了技术层面的基础,作为她的补充,这里提出其它三个实践,来提升高效的团队协作及过程改进。
产品核心:使团队能够紧密结合到所属业务和项目组织中去。
过程核心:使团队能够采纳并发展核心统一过程,使之成为自己需要的过程。
团队核心:使团队能够设置并维护一个合适的工作环境。
但是,测试去了哪里?
测试无处不在。我们相信这样一个隐喻:“无论您做了什么事情,直到您经过检验确认她就是您想要做的,您才算完成了这件事”,或者说“人人都是他自己的清洁工”。我们让测试成为您任何工作中的组成部分之一。用例核心包括测试驱动设计,因为用例是测试用例的雏形。组件核心则包括组件的单元测试。
提供一种敏捷的方式
这一组实践为您提供了一个基础,从而能够使用敏捷的方法来处理计划和实现。您可以采用所有的实践,或您需要的实践,一个单独的实践,甚至是一个实践的局部。您可以混合或者组合这些实践,成为您需要的实践,编写您自己的实践来扩展过程,混合您自己已有的实践来建立您的体验。这与传统的,实践与实践之间没有办法剥离的过程有着巨大、本质的区别。
核心统一过程:用截然不同的新方式呈现
每一个实践通过一系列的过程卡片呈现,这些卡片包含了定义你自己的过程所需要的各项元素,包括关键能力,活动和制件。这些卡片可以用来帮助您建立及使用过程。卡片隐喻使得过程本身变得敏捷,易于使用。无论是电子卡片还是打印的版本,都能有效地推动过程采用,项目计划,并为实践者提供方便的参考指导。这些卡片使过程“活“起来,比静态的网页和书更方便阅读,理解。
以下是来自于用例核心实践的一些卡片。
一个制件卡片(准确地说,一个beta):
这是一张活动卡片:
一张关键能力卡片:
指南用来介绍每一个核心
每一类卡片都配合有一个2~4页的指南,她介绍将卡片付诸实践所需要的最核心的信息。她们也会链接到更丰富的参考资料,包括脚本,工具,模版,和案例。
比如,活动的指南包括一个介绍,参与者信息,完成标准,以及一系列线索和提示来避免最易犯的错误。这些信息构成了实用指南的核心内容。
过程是怎样封装的?
过程由那些基础的实践所组成,这些实践又是通过卡片以及与卡片相关的使用指南作为交付的。
基础实践已经特别设计,可以通过“加强版”加以扩展。您可以自己编写这些扩展,来满足您特定的需要,也可以由他人提供。比如说我们可以有关于面向服务的架构(SOA),商业建模,企业架构,结对编程,或CMMI的实践族。
可以有很多种方式使用卡片。她们可以被用来:
为您的项目建立一副牌。
通过卡片组合来为项目成员规定项目任务,或者定义新的过程元素。
在项目中,通过卡片实例来表现实际交付物和任务。
为卡片添加注释来表现您项目的具体信息。
为您卡片的实现获取项目实际数据。
把卡片分发给项目成员,从而提供过程中他们所需的信息。
作为项目成员,抽出与自己相关的卡片。
与其他项目成员交换卡片。
写一个新的卡片来满足您现有的环境。
通过三个团队工作实践包括:产品核心,过程核心,团队核心,您可以在团队环境中,用敏捷的方法使用和实现整个过程。电子版或印刷版都是如此。这个过程能帮助我们在团队环境内提升工作实践。在Visual Studio Team System Environment中,将集成这个过程,以上提到的这些内容会有非常好的支持。过程也将在Eclipse Process Framework中得到应用。
有多个“游戏面板”来帮助游戏的进行。同时还有一套使用说明来描述如何直接实现过程。可以有一个物理的游戏板,与物理的卡片配套,也可以是一套电子游戏板配电子卡片。
核心统一过程:如何实现过程?
可以从你现有的过程出发,一个实践一个实践地实现这个过程。你只选择那些你需要的,同时又是你的组织不冒巨大风险所能采用的(实践)。您把卡片分发给项目中的成员,这样可以告诉他们哪些内容是需要关注的。卡片包括核心的信息,以及项目经理添加的针对特定项目的介绍。传统的过程主要关注作者的需要。而核心统一过程则强调了开发人员的视角,她的方法可用于开发,培训,应用,以及过程的轻量化和敏捷化。另外,我们承诺,她会很好玩。
结束语-核心统一过程:
集中关注那些广泛适用的核心要素
建立在您已经拥有的经验和技能之上
为实现一个持续的方案提供指导
旨在提高开发中参与者的技能
添加恰到好处的过程以避免项目风险