美文网首页
[followme]如何写好软件设计文档实战系列-1

[followme]如何写好软件设计文档实战系列-1

作者: 星矢2080 | 来源:发表于2017-08-03 16:51 被阅读0次

    案例一:幼儿园用户心理测评套餐设计方案

    原始设计方案:

    picture-1 picture-2 picture-3 picture-4

    点评:原始设计方案,结构完整,实现方案功能OK。

    会议评审改进:

    一、模块概述

    注:本部分需要完整描述需求所涉及的功能,相当于需求的全面掌控,因此各项功能需要一一列出;

    评审意见:

    1.功能描述不够,有缺失

    2.常见问题,代码实现中肯定考虑了,但是功能描述时没有列出;

    3.不完整列出,容易导致考虑不完善;要点功能项必须列出,也是思维的完备性;

    评审修改:

    picture-5

    点评:

    2.幼儿园用户注册和登陆

    这条是必备,正因为是必备,而往往就忽略不写了。但是其为要点功能必须写(坚持思维的完备性);

    3.幼儿园用户测评得分保存

    第四点隐含了,但必须单独列出,也是核心功能;

    5.信息统计分类:

    1)班级+所有宝宝+量表+总得分——>评价:优中差;

    2)班级+男/女+量表+各维度得分——>各项评价

    幼儿园版功能实现的服务目的和数据使用的扩展,以便充分考虑核心功能实现方案;

    二、模块设计

    注:本部分需要描述逐个功能的实现方案思路和设计要点;包括流程和数据存储等。

    picture-6

    评审意见:

    1.方案1、方案2均可,都能很好实现套餐功能;

    2.方案1数据库存表,在业务不定时,更便于扩展,无需修改代码;

    3.方案2代码静态变量存储,体量不大,更有效率和更简便;

    4.本次业务场景如上,暂无扩展,因此优选方案2;


    2.幼儿园用户信息和注册

    方案1:

    方案2:

    评审意见:

    1.方案1、方案2均可,但均需用户主动注册,对定向推广的用户可以后台批量注册,因此推荐方案3,参见评审修改1;

    2.本部分是否有功能点遗漏,没有描述?(可以思考一下)

    点评:原始方案这部分功能初看没有什么问题,但是跟模块概述部分忽略写评审修改意见里面的第2点功能一样,也忽略遗漏一个要点功能,参考评审修改意见2

    评审修改:

    1.新增方案3,如下:

    picture-7

    2.遗漏功能,如下:

    picture-8

    3.测评流程

    现有的测评流程不改变

    4.测评结果保存

    方案1:

    点评:此部分是核心功能,也比较复杂的部分,也是最有意思的部分,通过评审,我们逐步展开。:)

    评审意见:

    1.按照业务场景,只需要保存每个宝宝的测评总得分(1项),维度得分(多项);没有必要保存每道题的得分;

    2.测评的总得分(1项),维度得分(多项),原表涉及比较冗余,记录总得分时dimension_id,dimension_avg,dimension_score均为0,反过来记录多项维度得分时total_avg,total_score均为0,太冗余,因此应该考虑合并。由于总得分只有1项,维度得分每个都有非0的维度ID,因此改进如下:

    picture-9

    点评:复用dimension_id字段,0代表总得分;维度得分和总得分字段合并;测试时间也可以不用记录;

    3.其他评审意见:幼儿园ID编号更方便于数据提取;gender性别字段可以不用记录,因为通过baby_id查宝宝信息表就可以查到;


    到这里是不是感觉评审差不多,其实才刚刚开始,请接着往下看

    评审修改:

    1.这部分比较重要,我们先看几个问题:

    picture-10

    问题三解答:幼儿园测评得分信息保存后的使用场景,我可以预想到离线场景,后台一套程序专门实现从数据库中提取信息,进行分类和统计。要点就离线场景:与线上系统分离,不用考虑性能,查多少个表,只要数据可以提取即可。而原方案中保存了宝宝的城市信息和幼儿园信息等,这些信息肯定在宝宝信息表中,那么线上系统保存得分时必须多查一次表,但是线上系统要考虑性能,因此我们得到优化如下:

    picture-11

    点评:保存得分表去掉了city,preschool等信息,因此可以查询宝宝信息表即可。而且减少了在线系统的查表次数;上面的问题二也得到了解答。

    问题一解答:这是一个扩展问题,涉及前后业务功能,要回答这个问题,我们要看看之前的测评流程,幼儿园用户的测评流程前部分和普通用户的测评流程一样,因此要想知道我们增加一个流程图部分,如下:

    picture-12

    点评:为什么要增加流程图,流程图反映了功能子模块,另外也让你看到之前的设计,以便思考和分析。业务是否正确,是否相似,是否可以复用

    保存测评得分save_history()——普通用户测评这个函数实现什么功能,放大保存的数据库表,是记录每个测评表的男/女总得分和维度得分,以便大数据汇总和改进。

    对比三个表有没有发现,第三个对应的原来方案幼儿园测评得分保存这个函数,但是他们的信息却基本一致。

    picture-13 picture-14 picture-15

    再点评:这时我们才发现,以前普通测评保存得分的业务需求和这次幼儿园测评得分保存时间上属于相似业务,代码可以复用(原来代码稍加修改即可!)

    因此前后反观,发现我们之前遗漏了一个潜在需求(普通用户得分保存也需要增加baby_id)!以便地域分析。到这里他们也合并了!

    picture-16

    至此评审结束。

    结束语:

    程序设计是一场逻辑思维的旅程,你思考到哪里,你的代码就走到哪里。而设计文档的编写,正是一场思维之旅的印迹。我们不是反反复复的code,modify,code again。而是在code之前,停下脚本,好好思考,提前你的笔,开始一场思维风暴!

    相关文章

      网友评论

          本文标题:[followme]如何写好软件设计文档实战系列-1

          本文链接:https://www.haomeiwen.com/subject/pbkplxtx.html