【技术前沿】软件项目是否需要详细设计?
研发部 孙辉
前日在论坛上看到关于某软件项目是否该做详细设计的讨论,深受启发。讨论围绕着详细设计是否必要展开,正方观点是:
详细设计能够确保底层模块的设计结构正确、合理,确保程序员思路清晰。
详细设计文档是单元测试方案用例制订的依据。
为软件的后期维护提供了指导。
为新人入职后快速上手提供帮助,同时个人的离职也不会给项目带来太大的影响。
反方观点是:
软件需求总是在变化,因此详细设计文档的编写和维护需要耗费大量的人力
任何一种自然语言都不够精确,详细设计与代码相比,容易让人误解
目前普遍存在的现象是先有代码,然后才补写详细设计
具体问题具体分析,从我们的经验来看,项目是否需要详细设计由项目的规模及项目的重复性来决定。一个很小的项目自然不需要详细设计,而一个大项目则需要事先写好详细设计,以便从中发现问题、及早解决,同时作为后面编码工作指导。另外如果所做的项目都是同一类型的,第一个项目完成后,后面的项目就不需要写详细设计。
软件需求的变更在所难免,因此详细设计的维护需要非常及时。在讨论中就有人提到可以通过制度来保证文档和代码保持一致,比如要求先更新文档然后才能修改编码。维护不好的设计文档不仅不能给后期维护人员带来帮助,相反会造成误解。
另外一个关键问题就是详细设计的粒度,也就是详细程度。软件项目的前期阶段可以分为项目评估、需求分析、概要设计、详细设计,其中概要设计就好像房屋的地基与框架,确定了软件的大体结构,包含哪些主要功能模块。详细设计是对功能模块的细分,但细分到什么程度并没有统一的标准,有些单位要求确定模块主要处理流程、主要界面和主要的对外提供接口函数,也有些单位要求的更细致一些,详细设计要提供函数的实现思路,主要以流程图来体现。“详细设计写得越细致,需求变更时死的越惨”,这是论坛中某人的观点。的确,详细设计的粒度不宜过细。详细设计最主要的作用是指导作用,是设计到实施的映射,而不是编码的初期产品,没必要达到伪码的程度。
每个公司都是一个独特的个体,需要找到适合自身的文档规范。无论是传统的软件工程理论还是新兴的敏捷开发方法,依然是那句旧话,无论黑猫白猫,能抓到老鼠的猫才是好猫。