zoukankan      html  css  js  c++  java
  • 小型团队快速开发方法

    这篇文章写的时候,正处于我探索小型团队快速开发方法的初期,虽然看了不少资料,但终究没有真正把文章中的开发方法真正实现过。因此,本文是我对小型团队快速开发方法的计划,并没有经过实践检验。现在看来,存在不少理想化的东西,在实际工作中并不实用,后来慢慢忘了这篇文章,转而探索其他的开发方法。

    今天在查找资料的时候,居然从某网站找到了这篇文章(我从未公开发表),刚开始看的时候觉得作者的知识范围和思想非常符合我的许多想法(汗~~),直到看到原始研究文档时,才醒悟过来,这篇文章就是自己写的 :-)

    我原来以为博客园的文章,只要不发布出去,就没人能够看见,呵呵,既然现在已经“泄露”了,就公开吧。

    1.   前言

    小型团队快速开发方法是力求找出中小型项目开发的最佳实践。

    小型团队快速开发方法以敏捷开发为核心,结合中小型软件公司的实际情况,制作从需求调研到项目验收的“标准”过程。

    小型团队快速开发方法以简明实用为主,以能够对项目小组有用、能够辅助项目顺利为研究方向。

    小型团队快速开发方法也算是我从业7年来,近20个项目的亲身经历的开发总结。

    l   方法特点

    1.      需求用例驱动

    2.      原型开发

    3.      领域模型分层

    4.      职责垂直切割

    l   方法适用环境

    1.      3至6人的小团队;

    2.      有一个时间稳定、经验丰富的主力成员;

    3.      有至少两个在需求明确的情况下(用例完备),能独立完成模块的队员。

    l   原始研究文档

    1.      《数据驱动开发——对项目开发的总结和反思》(原创)

    2.      《快速迭代与原型开发》(原创)

    3.      《分层架构》(原创)

    4.      《彩色UML建模》

    5.      腾讯敏捷框架TAPD

    6.      《大象UML》

    2.   系统分析:用例

    本方法是用例驱动开发,用例 = 需求,即需求以用例的方式来表达。

    本方法只需要业务用例,其它用例不使用。

    业务用例的目标非常清晰,它就是用于系统分析上的,具体一点说是系统分析中的需求分析这一步。

    用例不但是用来记录分析的结果,同时也是一种分析方法,它通过寻找系统边界、涉众、场景等元素,从而确定系统的业务内容,并用UML用例图绘制出来。注意,简单的用例直接用UML用例图绘制即可,复杂的用例必须适当地加上文字说明。

    如何找出用例是系统分析的核心。

    RUP有成熟的步骤去发现用例。

    建议用RUP发现用例的手段去和领域专家研讨,但并不需要按照RUP的所有步骤去所有编写文档,只需要编写业务用例这一部份就可以了。

    注意,虽然调研时最好编写领域中的所有业务用例,但其中的核心业务才需要编写详细用例。

    实际上,在业务流程的背后,有一个更加根本的因素——商业需求。商业需求才是真正的需求,业务流程只是一种实现手段而已。

    注意,需求调研要避免掉进“业务流程”调研的陷阱。用例是以问题域/商业模型为核心的,它是领域模型的基础,而业务流程是商业模型的实现手段,是为商业模型的服务的。业务流程是企业当前的实践方法,而有时候业务流程受其它因素干扰(可能是电子信息化水平低下,或者是行政法规等),导致当前的业务流程并不是最佳实践。我们要在调研的过程中分析出用例,然后再构造出用例之间的关系,这样就会得到最佳的业务流程。当然,我们也会不可避免地遇到外界因素干扰,导致理想化的业务流程不合实际,但我们继续不断地沟通,对流程进行重组,就可以让流程不断地贴近最佳实践。

    3.   系统设计:领域模型

    用例之后就是建模。

    FDD是横跨系统分析和领域建模的轻量方法。

    FDD中根据模板(其实就是动宾短语)寻找概念类,和RUP中“用例必然以动宾短语形式出现”的意思完全一致——我们的用例就是FDD的概念类。从这方面看,FDD是系统分析的一种方法。

    FDD不使用用例,它直接进行概念建模。系统分析师与领域专家提炼出特征,然后系统分析师就开始总体建模。总体建模采用的是四色原型法,四色原型的本质是描述“什么人(PPT-party)在一个什么时间(MI)以一种什么身份(Role)做什么样的事情(PPT-thing)”。从这方面看,FDD又包含了系统设计。

    FDD的最大优点就在这里:我们可以依据FDD的模板指导,把用例平滑转为概念类。

    4.   使用RUP & FDD进行系统分析和设计

    4.1. 总体流程

    我们用RUP的步骤发现和编写用例(客户需求),然后通过FDD的模板(动宾短语)进行概念类建模,最后我们根据分析模式,把概念类转为领域模型。

    4.2. 发现需求和用例

    因为RUP明确提出了“用例 = 需求”,RUP里有非常详细的发现客户需求的方法,准确地说,RUP里有如何发现用例的步骤:

    1.      确定系统边界。

    2.      确定参与者(涉众)。

    3.      确定参与者的目标。

    4.      定义满足参与者目标的用例,根据其目标对用例命名。

    这些步骤包括了客户访谈、有效用例测试等实用的手段。

    FDD可以看作是确定参与者目标的一种简洁有效的方法。FDD根据RUP确定出来的系统边界和涉众,通过与领域专家交流(客户访谈),确定用户的目标。

    4.3. 把用例映像为模型

    把需求表述为用例不算太难,因为用例基本上算是用文字忠实描述用户的需求,并且用例的格式很简单,非常容易掌握。

    用例真正的难点是如何发现用例,而不是描述用例。

    不过把用例映像为模型(概念模型)就很有难度,这个难度表现在两方面:

    模型的阻抗、模型的可实现性。

    4.3.1.   业务模型与计算器模型的阻抗

    因为模型是计算器抽象出来的,而用例是现实世界中具体存在的,这是两种完全不同的东西。用例的信息和关系必须通过一定的规则转换,才能映像为模型。如果是数据模型,那么就是ER规则;如果是领域模型,那么就是OO规则。

    阻抗不是这么容易消除的,UML总结了大量的模式,可以作为参考。

    4.3.2.   模型不能直接实现

    当我们没有有效方法的时候,把用例映像为模型很大程度上依赖系统分析师的经验和水平。不过即使两个水平相近的分析师,他们做出来的模型(UML表达)也会相差很大——这会导致使用者对设计者的意图理解错误。

    那么,有没有一种方法可以让用例能够平滑映像为模型,并且模型能够遵循一定的范式(Pattern),使得设计者与使用者能够理解一致?

    四色原型和DDD的分析模式就是为了这个目标而提出的。

    四色原型与FDD同出一门,FDD的“特征”在很大程度上是四色原型的文字表达方式,而四色UML类图是四色原型的图表表达方式。基本上用文字描述的“特征”与用UML类表现的类图,两者能够做到信息无损转换。

    因为我们在定义用例的时候,已经使用了FDD的特征(动宾短语)进行分析,而特征本来就是四色原型的“用例”,所以从用例映像为四色原型是非常容易的,而且其中也有规律可寻。

    四色原型离领域模型已经很接近了,只不过四色原型更注重业务模型,而领域模型更趋于计算机模型。四色原型并不一定能够直接被OO语言实现,而领域模型会遵循DDD的分析模式,一定能够直接被OO语言实现。

    在这里“直接实现”的意思是,模型在不作修改的情况下,被程序员用代码表达出来,并且代码完全没有违背模型的地方。

    所以我们只要按照DDD的分析模式对四色原型进行“修正”,就可以得到领域模型。

    5.   使用敏捷指导软件开发

    XP和FDD侧重于软件开发,而Scrum侧重于项目管理。

    RUP太重了,不适合小团队的开发。

    5.1. 关于结对编程

    结对编程不容易推广,因为绝大数的程序员有天生的反感,况且选择合适的结对对象也不容易,搞不好两个人还会产生矛盾,影响团队团结。所以轻易不推荐结对编程,但如果有新人加入,可以考虑用结对编程,以熟手带新手。

    虽然不推荐结对编程,但也不能完全让一个人独立写代码,一定要让两个人互相依赖对方。这样做的目的是为了防止有人偷懒,也是为了防止技术狂人为钻研高深技术而忽略了实现业务。

    横向切割的MVC/MVP模式是一种方法,一个人写Presentation层,另一个人写Controller/Presenter层,可以互相依赖。但MVC/MVP模式本身有一定的技术深度,不经过培训及一段时间的培养是无法使用的。

    基本上没有太好的办法,每日代码检查和每日例会虽然可以这个解决问题,但这样会加重主力成员的工作量。

    6.   使用Scrum指导项目管理

    7.   文檔

    多用单元测试代替编程文档。多为代码加上注释。只有业务非常复杂,代码和注释都无法清晰地表述的时候,才使用图表和文字编写文文件表达。

    8.   总结

    从繁杂的需求到健壮的代码,这是我们的最终目标,而这一系列的步骤给人的感觉很流畅,并且每一步都有规范的指导,不再是只凭经验行事。

    注意,这种方法注重于项目开发(分析、设计),我们还需要一种注重于项目管理的方法。

  • 相关阅读:
    HTML连载10-details标签&summary标签&marquee标签
    [刷题] 7-14 然后是几点
    [刷题] 7-18 出租车计价 (15 分)
    [刷题] PTA 7-20 简单计算器
    [刷题] PTA 7-22 用天平找小球
    [刷题] PTA 7-24 猜数字游戏
    [刷题] PTA 7-28 求整数的位数及各位数字之和
    [刷题] PTA 7-30 念数字
    [刷题] PTA 7-37 输出整数各位数字
    [刷题] PTA 7-35 猴子吃桃问题
  • 原文地址:https://www.cnblogs.com/jifeng/p/4796893.html
Copyright © 2011-2022 走看看