大多数程序员,都极度痛恨写文档。Coding是愉快的,而Write是痛苦的。有一部分原因,其实是要归咎于程序员自身,以我的经验,很多程序员往往会“艰于表达”,尤其是用“文字、图表、PPT、Word”之类的Office Document来表达。当然,还有一部分原因,是由于很多项目开发实践中,文档的前后矛盾、形式主义、反复修改、歧义重重,常常让程序员们抓狂。
UML是一个比较好的工具,但是,仅仅靠UML,是无法将项目的知识描述清楚的。也有不少项目组在引入了UML之后发现,文档的工作量不但没有减少,而是更多了。随着项目的进展,需要维护的设计文档数量,也更多了。也因此造成了更多的前后矛盾,形式主义,反复修改。
根本的痛苦,并不在于一开始写一份文档,而在于所有写下的文档,都必须跟随项目的进展而随之变化。当我们写出来的文档越多,需要被持续维护的文档也就越多,需要反复检查文档间的可能存在的矛盾也就越多,所有扔出去的石头,最后都会落回到自己头上。
于是,还有不少项目组,将文档工作与代码工作截然分开,文档就写一次,用来应付上面的管理层,而代码自管自的继续开发。对于小型项目来说,这其实是一个不错的权宜之计。但是一旦项目越来越庞大、复杂。所有的隐性的知识,都仅仅存在于程序员的脑子里,所有成文的东西,都可能是错的,而真实的情况,却隐藏在代码之中。如果代码质量再糟糕一些,后来维护的朋友,就遭遇火坑了。
文档,写还是不写,这是一个问题!
还记得测试驱动开发吗?为自己的每一个方法,每一个类,都写出单元测试来。不但如此,更加彻底的做法是,在写代码之前,先写测试用例。这样才能保证不会忘记写测试用例。更大的好处在于,这样有助于思考、有助于获得更加完善的设计,有助于写出更加高质量的代码,有助于安全的重构,有助于自动化的持续集成实践。总之,是好得不能再好的一项开发实践。
这一实践之所以可行,就在于他将繁杂的集中的测试工作,分解为日常的,必须不断进行的工作。当你每天都在写测试用例,当你的每一个测试用例,都能够与代码完全对应时,压力反而减轻了,工作量也更少了,更重要的,一些优良的习惯也因此被养成了。
在两年前,我要开始一个全新的P2P网络电视项目时,也在考虑关于文档的问题。当时我发现了Open Source的WikiPedia。这是一个PHP的WIKI,最大的应用是维基百科全书。因此,这个项目的质量就绝对值得信赖。我就将它拿过来,作为我们项目文档管理的工具。
用Wiki来管理项目文档,基于以下一些考虑:
文档是项目的知识,这些知识必须集中管理、容易获取、人人可以编辑。
项目在生长,代码在增加,文档也必须能够跟随项目自然生长,强行划分设计阶段和开发阶段,是不可取的。
Wiki不是传统的项目文档,而是一个应交流需要,可能随时增删改的知识库。项目组的成员,遇到问题,就应该首先查看Wiki,如果这是Wiki中没有,那么他应该找人询问。而那个知道答案的人,如果他不想再今后不断的回答同一问题,就应该把这个答案写入Wiki,这就是Wiki条目增长的自然动力。
传统文档最大的问题在于浪费,而Wiki通过持续修改,按需提供的方式,保证了所有写下的文字,一定有超过一个人需要读它。
在Wikipedia的基础上,我又做了一些增强,以更好的辅助项目的管理。
Include功能,增加include标签,可以在一个条目中,引入其他条目的全文,而不是仅仅增加一个link。
文档的层次结构,当项目的文档条目逐渐增加,分门别类的条目,更加便于查找,也可以有效的避免条目重名的问题。
一个Click,就能够创建新一个条目,用于填写当天的工作安排。
相应的管理制度,也必须建立起来。
每日15分钟文档制度,基于“填写当日工作”的功能,我规定每个项目组成员,每天要花三个5分钟来写文档,早上的5分钟,填写当日工作计划。中午的5分钟填写上午的工作情况,下班前的5分钟,填写下午的工作情况。这样,每天的文档工作相当轻松,但是文档能够保证持续的跟随项目成长下去。更进一步的,这样的制度,对于项目的进度控制,也很有帮助。
User Case条目驱动,所有分解出去的User Case,在分配到责任人之后,该责任人的第一项工作,就是在Wiki中写下对于这个User Case的理解。随后项目进展,也应该持续的维护这个条目。
同时进行Bug的管理,Bug也作为Wiki中的条目,以便于和其他条目项目引用。
每次Check In CVS时,必须写注释。这是更加细节的文档,然后我还做了一个小程序,能够自动的从CVSTrac中读出当天Check In代码的注释。供每个人在写当天文档的时候引用。
总而言之,我对于项目文档的看法,并不是非此即彼的极端主义者。在我看来,好的项目文档管理政策,应该有助于集中团队知识和智慧,同时不要让程序员痛苦和反感。这样才叫做有效的项目管理。仿造Martin Fowler的著名文献《持续集成》,我给这篇Blog起这样一个名字《软件开发文档的持续集成》,希望能够引发更多的、更深入的思考。
分享到:
相关推荐
综合来看,Jenkins持续集成部署文档为软件开发团队提供了一种高效的集成和部署流程,通过其强大的自动化和可配置功能,使得软件开发周期大幅缩短,提高了开发效率和软件质量,是现代软件开发中不可或缺的工具之一。
【标题】:“全套软件开发文档”揭示了这个压缩包的核心内容是关于软件开发的全面资料,特别是聚焦于Java编程语言。这通常包括一系列的技术指南、规范、最佳实践以及示例代码,旨在帮助开发者掌握Java软件开发的各个...
本文将深入探讨“软件开发文档编写要求”,基于给出的标签“源码”和“工具”,并参考博文链接中的内容,我们将讨论如何有效地编写软件开发文档,以及与源码管理和开发工具相关的要点。 首先,我们要明确软件开发...
### GJB438B-2009 军用软件开发文档通用要求 #### 标准概述 《GJB438B-2009 军用软件开发文档通用要求》是针对军用软件开发过程中所需文档的编写、格式、内容等方面提出的一系列规范性要求。该标准为军用软件开发...
《国家软件开发文档模板(全套)》是一套全面、规范的文档模板,旨在为我国的软件开发行业提供统一的标准和指导。这套模板包含了从项目启动到交付的每一个关键阶段所需的文档,确保软件开发过程的系统性、专业性和可...
"软件开发文档编写标准范本"是指导开发者按照规范化、标准化的方式来撰写各类文档的重要工具。这个文档通常包括多个组成部分,如需求规格说明书、设计文档、测试计划和用户手册等,旨在确保整个开发过程的透明度和可...
在软件开发过程中,管理文档是确保项目顺利进行的关键要素。这些文档不仅规范了团队的工作流程,也保证了软件的质量和效率。"软件开发管理文档"集合涵盖了多个关键领域,包括评审过程、软件质量保证以及软件项目生命...
"软件开发通用标准文档集成"是一个集合了多种关键文档模板的资源,涵盖了从需求分析到详细设计等多个阶段。下面将详细阐述这些阶段的主要文档及其重要性。 1. **需求分析**: - **需求规格书**:这是项目启动阶段...
"完整的软件开发文档.zip"这个压缩包很可能包含了以下关键部分: 1. **需求规格说明书**:这是项目开始时的第一步,详细描述了软件应该做什么,满足哪些功能需求,以及对用户界面、性能、安全性等方面的具体要求。...
在软件开发过程中,国家标准文档是指导项目顺利进行的重要依据,它们确保了开发团队遵循一致的规范,提高了软件...通过合理使用和持续改进这些模板,可以提高软件开发效率,降低项目风险,从而提升整体的项目成功率。
测试是软件开发中的重要环节,包括单元测试、集成测试、系统测试和验收测试。测试文档记录了测试计划、测试用例和测试结果,确保软件达到预期的性能和质量标准。 6. 部署上线: 在通过所有测试后,软件准备部署到...
这个"20个常用软件开发文档大全"集合了开发过程中的多种核心文档,旨在帮助开发者们系统地理解和执行软件工程的各个环节。 1. **需求规格说明书**:这是软件开发的起点,详细描述了用户对软件的功能需求和非功能...
Java持续集成是软件开发过程中的一个关键实践,它旨在频繁地合并开发人员的代码更改,以便尽早发现并解决潜在的问题。这个过程通过自动化构建、测试和部署,确保代码的质量和项目的稳定性。持续集成(Continuous ...
《软件开发文档》这个压缩包很可能包含了上述各个阶段的详细指导和示例,是开发者深入理解软件开发流程,提升专业技能的宝贵资源。通过学习和实践这些文档中的内容,开发者可以更好地应对实际开发工作中的挑战,从而...
《软件开发规范文档》是国家为了提升软件行业的质量和效率,制定的一套标准模板,它涵盖了软件生命周期中的各个环节,包括需求分析、设计、编码、测试、维护等阶段,旨在确保软件产品的质量、可维护性和可扩展性。...
《软件开发文档(国标)》是一份详细指导软件开发过程的重要参考资料,它遵循了国家制定的标准,确保软件项目的规范化、系统化和高效性。这份文档涵盖了软件开发的全过程,从需求分析到设计、编码、测试以及维护,旨在...
1. **开发文档**:开发文档是软件开发过程中的重要组成部分,它记录了项目的各个阶段,包括需求分析、系统设计、编码实现、测试验证和后期维护等。这些文档有助于团队成员之间的沟通,提高项目的可维护性和可扩展性...
在软件开发过程中,开发文档是不可或缺的一部分,它记录了项目的全过程,从需求分析到系统设计,再到编码实现和测试验证,最后是维护更新。本文将深入探讨“开发文档 软件工程 完整案例 开发文档”这一主题,特别...
- **定义**:持续集成(CI)是一种软件开发实践,通过频繁地将代码集成到共享的版本控制系统中,并通过自动化构建和测试来确保代码的质量。 - **核心原则**: - 迭代、增量开发,实现快速迭代; - 小步快跑,频繁地...
计算机软件开发文档是软件开发过程中的重要组成部分,它详尽记录了项目的各个阶段,包括需求、设计、实现、测试和维护等,确保团队间的有效沟通和项目的顺利进行。本指南旨在提供一个全面的视角,帮助你理解和创建...