`
SSailYang
  • 浏览: 312789 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】敏捷的文档

阅读更多

转自 InfoQ: http://www.infoq.com/cn/news/2009/02/agile-documents

 

软件项目中有很多种文档,包括需求文档、设计文档、API文档、缺陷报告、进度报告、移交文档、验收文档等等。

在传统的软件项目开发中,每个团队成员都要花费很多时间和精力去维护文档及填写各种表格和报告。第二条敏捷宣言是"可工作的软件胜于详尽的文档",据此很多人想当然认为敏捷开发不重视文档。更有甚者,有人为逃避写文档而借口敏捷开发不需要文档,成为所谓的PAP(Pretty Adventuresome Programming)。其实这些人忽略了敏捷开发中有很多实践(比如坐在一起、现场客户、测试驱动开发、客户测试、结对编程、信息化工作间等等),敏捷借助这些实践进行信息交流,起到了文档在传统软件开发中的作用。本文通过分析项目开发中的文档类型与作用来说明敏捷开发中为什么很多文档是不需要的。

首先,需要明确文档的用途,文档是用来交流信息的。关键是团队中信息分享是否及时准确,而这与文档的多少没有必然的联系。就比如James Shore在博文"文档之谜"(http://jamesshore.com/Blog/The-Documentation-Myth.html)里面指出的,很多人指责敏捷开发的文档不够。其实他们忽略了问题的实质,"丰富的文档并不一定是好事,能及时得到答案才是好的"(Myth: Document is good; Reality: Answer is good)。

专业知识或者信息主要分为两类:

  • 可以被整理,文档化的知识,一般只占所有知识的30%。
  • 占70%的存在于人脑中的隐含(Tacit)知识,只能通过人与人之间的交流来分享,口口相传。因此促进团队内部以及团队之间的交流对信息的传播更加有效。

软件项目文档通常有三种:

  • 项目文档,用于项目组内部信息交流,比如需求文档、设计文档、进度报告等。
  • 产品文档,通常是有业务价值的,是客户需要的,比如用户手册或者API文档。
  • 移交文档,在项目移交或者项目不同阶段之间移交的成果物。

产品文档是客户需要的,是产品的一部分,有业务价值,绝对不能省略。应该在迭代中为其安排一个文档任务。

从敏捷角度来看,另外两类文档中的很多种是可以简化或者省略的。

在敏捷开发过程中,

  • 整个团队坐在一起,移交文档变得多余了。精益思想认为移交(Transportation)是很大的一种浪费(参见Mary Poppendieck,精益思想的原则http://www.poppendieck.com/papers/LeanThinking.pdf),首先移交文档会花费很大的精力,其次很多信息会在移交过程中丢失,另外每个阶段还总会添加一些新的信息。所有团队成员(PO, Dev, QA, Doc)坐在一起,用白板进行面对面的沟通,既省时又省力,还有效。(参见Alistair Cockburn,敏捷项目中的沟通 http://www.agilemodeling.com/essays/communication.htm
  • Product Owner跟团队坐在一起,随时回答团队成员的需求问题,是活的文档。
  • 在Sprint计划会议中,团队选择要完成的用户故事(Sprint Backlog上的小卡片),形成Sprint backlog,这其实就是迭代计划。
  • 在发布计划会议中,Product Owner会确定发布内容,形成故事墙,这其实就是较为长期的开发计划。
  • Dev和QA一起设计客户测试(一般用Fit类工具)。重要的用户逻辑被设计成客户测试。这种需求(客户测试)是可以运行的,因此永远不会过时(如果出现问题,持续集成系统立刻就会发出警报)。这比传统意义上的需求文档要有效得多。传统文档有太多的问题,比如很少会有人去测试文档的正确性,很少有人去及时更新文档,很少有人去检查需求覆盖率(其实根本没有办法检查,很多工具想当然的提供一些从需求到实现的追踪,但这岂不又是一种形而上学?)。
  • 在开发中微观的具体的逻辑可以设计成TDD(或者BDD,行为驱动开发http://behaviour-driven.org/))的用例,起到了详细需求文档或者设计文档的作用。
  • 开发人员使用结对编程(很多好处,参见"我喜欢结对编程" http://www.nomachetejuggling.com/2009/02/21/i-love-pair-programming/,以及 "结对编程:到底有多重要?"http://xprogramming.com/blog/2009/01/28/pair-programming-how-important-is-it/)。健康的系统架构应该是动态的,不断演进的。因此如果把它用文档固定下来,也会出现过期或者不全面的问题。在设计具体模块的时候,团队利用白板设计大体框架并确定方向,然后通过结对编程来具体实现。通过结对编程,可以很好的在团队中分享和演进系统架构信息。
  • 团队在每日站立会议中汇报进度,更新状态以及遇到的问题,所有信息会立刻反映到Sprint Backlog,Burdown chart以及各种图表上,成为信息化工作间的一部分,团队可以据此进行自我调整。
  • 每一次迭代之后举行反省会议,团队自我改进,也可以设计各种各样的手画表格(Ron Jeffries在个人网站上给了一些例子,http://www.xprogramming.com/xpmag/BigVisibleCharts.htm)来监控团队自身的问题。因此传统的审查及统计的文档就变得多余了。
  • 敏捷中高层次的需求通过愿景(Vision)文档体现,这种文档一般只有一页,变化的可能性不大,很容易维护。
  • 高层的系统架构图还是必要的。这种高层次系统架构变化的可能性也是很小的,维护成本也比较低。
  • 代码即文档。很多敏捷大师十分注重架构清晰度以及代码的可读性(比如Robert Martin总结的S.O.L.I.D原则,Robert Martin的Clean Code,以及Kent Beck的"实现模式")。在某种意义上我们写的代码其实就是指导计算机完成任务的式样书。式样书就是为了让别人容易读懂(要不然为什么不用二进制去编写程序,放到机器上就可以运行)。

正如James Shore总结的,获得信息的手段有很多。

最优的手段,代码清楚、单元测试完备、命名规范,因此根本不需要问;

其次,只需要问一下旁边的人,或者打一个电话,就可以立刻得到答案,这也就是为什么敏捷鼓励“坐在一起”和“现场客户”r;

再次,Google一下找到答案,这也不错;

……

很次,可以通过读文档找到答案。可是为了找到答案,需要读的文档越多,效果越差...

分享到:
评论

相关推荐

    敏捷项目文档管理.pdf

    敏捷项目管理与传统项目管理在文档管理方面存在明显的差异。传统的项目文档通常包括需求描述和技术实现的详细信息,注重于“为什么做”、“做什么”和“怎么做”的书写逻辑。在传统项目文档中,需求分析人员通过访谈...

    敏捷转型的成功关键 – 团队文化.pdf

    在敏捷转型中,团队文化需要适应敏捷的价值观和原则,如重视个人和互动高于流程和工具、重视可工作的软件高于详尽的文档、响应变化高于遵循计划等。敏捷文化的培养有助于团队成员之间更有效的沟通和协作,从而提高...

    传统企业敏捷转型的策略与思考.pdf

    4. 过程与实践的改进:传统企业需要抛弃那些固化的流程和做法,转而采用能够快速迭代和持续改进的敏捷实践。这包括定期进行敏捷回顾、迭代规划和产品演示。 5. 人员的培训和教育:为了支持敏捷转型,企业需要对员工...

    在Python中结合doctest和Epydoc产生敏捷文档的一种方法.zip

    在"在Python中结合doctest和Epydoc产生敏捷文档的一种方法.pdf"这个文件中,可能详细阐述了如何设置和使用这两个工具,包括具体配置、示例代码以及实践中的注意事项。建议阅读该文件以获取更深入的了解和实践指导。

    浅谈敏捷开发中的设计.doc

    不过,敏捷设计并不像传统开发那样产生详尽的文档,而是更加注重可执行的、轻量级的设计输出。 **数据结构设计**在敏捷和传统开发中都是必不可少的。敏捷开发的数据结构设计通常从业务模型(领域模型)开始,然后...

    NetApp 混合云主力业务更敏捷文档

    ### NetApp 混合云主力业务更敏捷文档 #### 关键知识点概述: - **NetApp 转型至第三个“M”时代**:NetApp 正帮助客户过渡到一个新阶段,即从传统的单一系统架构(Monolithic)转向更加灵活、微服务化的体系结构...

    敏捷流程+软件测试报告+软件测试计划+软件转测标准

    本资源包包含了四个关键文档,旨在帮助项目团队高效地执行敏捷开发和测试活动。 1. 敏捷流程:SICAPd团队敏捷开发流程过程.xlsx提供了详细的敏捷开发流程模板,通常包括迭代规划、每日站立会议、回顾会议和冲刺结束...

    敏捷开发全程实战

    【敏捷开发全程实战(广州).doc】这份文档很可能是详细的案例研究或培训材料,涵盖了敏捷在广州某项目中的具体应用和实践经验。通过学习和分析这个案例,我们可以更好地理解敏捷开发在不同环境和团队中的适用性,以及...

    何勉-规模化精益敏捷实施.pdf

    文档标题为《何勉-规模化精益敏捷实施.pdf》,从标题中我们可以看出文档的主题涉及“规模化”和“精益敏捷实施”。而标签中的“规模化精益敏捷实施”再次强调了这一点。基于这些信息,我们可以构建相关的知识点如下...

    Symbian2版转3版文档

    7. **文档和社区支持**:在"2版转3版文档"中,可能会包含开发者在实际移植过程中遇到的问题及解决方案,这些经验分享对于其他开发者来说非常有价值。Symbian Forum和相关的技术社区也是获取帮助和交流经验的重要资源...

    敏捷开发的落地实践(大团队、流程、测试、离岸开发、需求、估算等问题的解决实践)

    1. 敏捷开发与传统开发的对比和问题解决方案:敏捷开发强调快速响应变化、客户合作和迭代交付,而传统开发则更侧重于阶段性的规划和文档。在实践中,敏捷开发会遇到对变化管理、团队协作、客户需求梳理等方面的挑战...

    敏捷开发的必要技巧

    敏捷开发是一种旨在提高软件开发效率和质量的方法论,其核心理念是通过持续的反馈和适应性调整,确保软件产品能够快速响应变化,并满足用户的真实需求。《敏捷开发的必要技巧》一书,由王伟杰(Wingel)翻译自...

    敏捷书籍源代码就是设计

    ### 敏捷书籍源代码就是设计 #### 核心知识点解析: **1. 源代码作为设计的核心地位** 在IT行业中,特别是在软件开发领域,一个重要的转变观念被提出:“源代码就是设计”。这一概念由Jack Reeves在1986年提出,...

    soa文档学习 文档

    学习SOA文档能够帮助我们深入了解SOA的基本原则、实施策略以及如何通过SOA提升企业的业务敏捷性和价值。 标签:SOA文档学习 部分内容解析:CBDIReport提供的执行简报深入探讨了服务导向架构(SOA)和Web服务的价值...

    敏捷开发相关介绍

    2. 可工作的软件高于详尽的文档:更重视实际能运行的软件,而不是大量无用的文档。 3. 客户合作高于合同谈判:提倡与客户保持紧密合作,共同决策,而不是严格遵守合同条款。 4. 响应变化高于遵循计划:敏捷开发认为...

    敏捷软件测试:测试人员与敏捷团队的实践指南-仅需1积分

    书中可能会介绍敏捷宣言的价值观和原则,如个体和交互胜过过程和工具,可工作的软件胜过详尽的文档,客户合作胜过合同谈判,以及响应变化胜过遵循计划。 其次,书中可能会详细阐述敏捷测试的角色和责任。在敏捷团队...

    《敏捷教练之路》演讲PPT

    从提供的文件信息中,我们可以提炼出多个知识点,涉及敏捷开发、Scrum、持续集成、ATDD、结对编程以及敏捷教练的职责和成长路径。下面是对这些知识点的详细说明: 1. 敏捷开发(Agile Development) 敏捷开发是一种...

    敏捷与精益

    敏捷的核心原则包括个体和互动高于流程和工具、可工作的软件高于详尽的文档、客户合作高于合同谈判以及响应变化高于遵循计划。敏捷方法论包括Scrum、XP(极限编程)、Kanban等,它们强调团队协作、自组织、短期迭代...

Global site tag (gtag.js) - Google Analytics