任何一款产品的开发,都需要经历先设计后实现的过程。而且,为什么做这款产品,还有一个需求的问题。这些贯穿产品开发整个过程的信息,都需要文档化,这样,一方面可以提升产品的可维护性,实现产品技术积累的可复用性。另一方面,通过规范的文档编制过程,可以整理思路、也可以交流想法,让风险尽可能早的暴露。这样可使得产品的开发过程更具备可控性(可管理性),结果也更加可靠。
下面就列一列整个开发过程中涉及的文档资料:
目录
1 用户需求规格说明书
2 用户需求功能列表说明书
3 产品需求规格说明书
4 需求跟踪矩阵
5 概要设计说明
6 详细设计说明
7 数据库设计说明书
8 接口设计说明书
9 技术解决方案
10 单元测试用例
11 集成测试计划及测试用例
12 系统测试用例
13 验收测试用例
14 用户操作手册
15 运行维护手册
16 项目或产品生命周期中的其他文档
16.1 评审文档
16.2 专利相关文档
16.3 复盘分析类文档
1 用户需求规格说明书
大部分的产品都是有着特定的用户的。所以,开发产品之前,要先想明白产品对用户有什么用,需要满足用户的什么需求,特别是痛点需求,这样开发的产品,才可能有用户,也才可能成功,而不至于是一个为想象中的需求而开发的空中楼阁式产品。
2 用户需求功能列表说明书
从纯粹的用户角度的需求,提炼出用户的功能需求。这一步是作为后续软件需求的功能导入的。
3 产品需求规格说明书
将用户需求和功能转换为软件需求。这一过程中,可能会出现某些需求通过现有软硬件技术无法实现或者实现过于复杂。这类需求就需要重点关注,是作为风险点提出来还是直接放弃,需要在评审时做出决策。
4 需求跟踪矩阵
需求可能会发生变化。且需求要传递到设计、实现、测试、验收等后续环节。通过需求跟踪矩阵,既可以跟踪需求的变更,也可以跟踪需求的传导是否达成。
5 概要设计说明
将软件需求转换为软件设计的第一步,是完成概要设计说明。这一阶段应该能够确定主要的技术选型方案,总体的框架,接口的划分等。这是从上到下设计的一种方式。将大的复杂问题,分解为小的可控模块,实现分而治之的目的。
6 详细设计说明
基于概要设计,细化设计内容。具体形式不限界面原型、流程图、数据流图、状态机、数据结构设计等。总之,对于概要设计中划分的模块,在详细设计阶段,要明确主要的技术细节。因为编码实现是强依赖与详细设计的。避免出现编码时,还存在直接根据需求来实现的情况。
7 数据库设计说明书
复杂的信息系统,为解决冗余和速度问题,数据库的设计可能存在字段过于重叠或过于采用高范式的情况。通过专门的数据库设计说明,实现以数据为中心的优化方案设计,对于系统的健壮甚至不同模块实现人员的沟通交流,都是有很大好处的。
8 接口设计说明书
同上,类似微服务架构的系统,不同服务或模块间的接口定义就显得十分重要。接口是去耦合的优先手段,良好的接口设计,可以让系统更加的优雅,显得恰到好处。过少或过多的接口,要么会让系统实现变得复杂,要么会让系统变得臃肿。良好的接口设计,也是抽象的目标,对于系统的可扩展性和兼容性,都具有巨大的帮助作用。
9 技术解决方案
复杂的设计中,可针对某一个或几个技术难点,单独提出技术解决方案,通过同行或邀请外部领域技术专家评审,从而降低后期风险,优化项目或产品开发成本。
10 单元测试用例
测试驱动开发,要求先写测试,再进行开发。主要目的是:一,让代码本身具备更好的可测性,从而减少后期测试投入;二,让代码不要偏离需求;三,让代码具备更好的可重构性。其实,写测试用例的过程,就是整理实现思路的过程。
11 集成测试计划及测试用例
单元模块的集成顺序和测试验证,也是需要仔细考虑的。这其中不仅牵涉到依赖性的问题,更是保证系统按里程碑节点发布的关键支撑。
12 系统测试用例
单元测试通过不代表集成测试通过,集成测试通过也无法保证系统测试通过。它们都有各自关注的重点和覆盖不到的情景,所以详细的系统测试,也是必须的,特别是对某些性能相关的问题。
13 验收测试用例
验收测试主要针对的是用户需求。系统测试用例,则主要针对的是软件需求。测试的侧重点不同。
14 用户操作手册
交付物之一
15 运行维护手册
同样是交付物之一
16 项目或产品生命周期中的其他文档
16.1 评审文档
注意,以上各个节点的文档,都可能涉及到评审环节。对于评审内容,也需要文档化,以备后期查验。
16.2 专利相关文档
产品开发过程中涉及创新创造的点,可以整理为专利文档。这也是项目的成果之一。这里只是以专利开头,其实还包括著作权等相关的文档。
16.3 复盘分析类文档
对项目的复盘分析,比如缺陷率,里程碑达成情况,经验教训,可复用构件模块等。这些分析文档,可以帮助企业,让成功得到复制,让失败得到规避。
基本上,上面从需求、设计、测试、发布相关的多个方面整理了需要的技术文档。当然,大家在各自项目或产品开发中,也可以根据具体情况,具体裁剪或增加必要文档。另外,上面的过程容易让大家将开发限定在瀑布模型,其实不是这样的。我们可以在开发完成后,按照上面的方式整理文档,形成文档树。总的来讲,没有最好的,只有最合适的。最合适的就是最好的。所以,成功的产品都有相同的特征,而失败的产品,则各有各的原因。