ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

软件设计说明书模板实战:CMMI评审与数据库设计全解析

软件设计说明书模板实战:CMMI评审与数据库设计全解析 简介这是一份软件设计说明书模板及案例说明文档面向软件设计人员、开发人员和项目文档编写者用于规范软件设计说明书的编制提升文档质量与开发效率。文档基于Rose工具组织内容完整覆盖软件设计的关键环节从需求描述、第一层系统结构设计、第二层模块结构设计到可选的数据库设计、组件视图、进程视图及模块详细设计并通过修订记录管理版本变更适合作为企业或教学项目中的文档参考。资源包共1个文件格式为doc大小约2.96MB内容包含模板框架与具体案例方便对照理解。目前已有1720人浏览学习适用于需要撰写或评审软件设计文档的读者。通过参考其中的章节划分、图表规范与设计说明写法可快速搭建设计文档骨架并依据项目情况补充模块、接口与数据结构描述有助于减少文档编写盲区提高设计文档的完整性和规范性。1. 软件设计说明书模板一份能替你扛过评审的文档骨架软件设计说明书这东西平时没人想起一到过CMMI评审、交软著申请材料、或者接手一个半路项目就会被追着要。这份资源是一份基于 Rose 工具的 OO 软件设计说明书模板正文附带一个仓储管理系统 EYP 的教学软件案例从封面密级、修订记录、缩略语一直排到模块详细设计和数据库详细设计。它解决的是开发里很实际的一类尴尬文档格式没标准每个人写的设计说明书长得都不一样评审会上被问设计依据是什么答不上来。适合三类人看——要补设计文档的开发、被软著材料折磨的产品、带团队走 CMMI 流程的负责人。下面直接拆模板本身怎么填。2. 把模板骨架吃透封面、密级、修订记录与缩略语的填法2.1 封面与密级先定身份信息再动笔模板封面给了一套完整的字段样例产品名称 PNXX、产品版本 PVV2.0、密级四选一绝密 / 机密 / 内部公开 / 完全公开案例里勾的是内部公开。页脚还有一个容易被忽略的细节——Total 21 pages 共 76 页模板本身的骨架是 21 页把案例内容完整填进去之后文档展开到 76 页。这个差异本身就是个提醒不要因为模板看着薄就以为工作量小系统结构、模块设计、数据库设计写起来页数翻三到四倍是常态。封面下半部分是拟制、审核、批准三栏日期格式统一写成 yyyy-mm-dd。注意这其实是个占位符模板作者留给你替换用的实际交付时必须改成具体日期后面我会专门讲占位符清理的坑。版权行写着版权所有CMMI V3.0也就是这套文档结构和评审口径是按 CMMI V3.0 来的公司内部过级可以直接套。密级的选择直接影响文档分发范围。我的建议是内部研发项目一律选内部公开或完全公开选机密意味着要加访问控制、加密存储、借阅登记评审材料走邮件发都费劲。只有真正涉及核心算法或商业机密的模块才考虑拆出来单独加密管理。2.2 修订记录这就是文档的后悔药修订记录表有六个字段Date日期、Revision Version修订版本、CRID / Defect ID变更单号、SecNo修改章节、Change Description修改描述、Author作者要求姓名工号。案例里给的样例是2001-06-081.00initial初稿完成NameID。这张表的价值在评审时体现得最充分。评审专家问这版和上一版到底改了哪些地方的时候不用翻正文直接指修订记录。CRID 字段在有变更管理制度的公司里是必填的需要关联到变更单或缺陷单没有变更单制度的小团队这一列可以留空但版本号和修改描述不能省。我一般要求项目组每次文档更新至少加一行记录哪怕只是修正 3.2 节时序图错误这种一句话描述三个月后再看文档也能快速定位演化过程。2.3 缩略语清单与目录先让读者知道你在说什么模板在正文之前安排了缩略语清单要求给出每个缩略语的英文全名和中文解释。这个表被很多开发无视但实际评审时它特别能体现专业度。一张完整的缩略语表长这样缩略语英文全名中文解释MVCModel-View-Controller模型-视图-控制器ORMObject-Relational Mapping对象关系映射PojoPlain Ordinary Java Object普通 Java 对象VoValue Object值对象CMMICapability Maturity Model Integration能力成熟度模型集成目录一共九章是这份模板最稳定的部分简介、需求描述、第一层系统结构设计描述、第二层模块结构设计描述、数据库设计可选、组件视图、进程视图、模块详细设计、数据库详细设计可选。也就是说这份设计说明书天然是两层结构设计的大纲——第一层讲系统整体架构第二层拆模块细节最后落到类、方法、数据库对象。无论项目大小我都建议保持这个目录骨架不变只增删可选章节。文档页数膨胀通常就是从可选那两章失控开始的。3. 从第一层架构到模块时序系统结构设计怎么写3.1 第一层系统结构MVC 三层与 Tapestry、Spring、Hibernate 的分工模板的第三章要求写第一层系统结构设计。案例给出的系统结构是典型的 SSHStruts/Spring/Hibernate时代 MVC 三层但表现层换成了 TapestryTapestry 的 Page 层做控制Html 装载数据发回客户端Service 层用 Manager 管理业务Hibernate 做 ORM 关系映射Pojo 负责展示数据Vo 负责保存与查询数据库。这套设计的核心逻辑值得细说。原文里有一句关键描述Page 层依赖于 Service 的 Manager 以及 Pojo并通过 Spring 的 IOC 依赖注入模式将 Manager 与 Pojo 注入 Page。翻译成白话就是Page 本身不 new 任何 Manager 对象所有依赖由 Spring 容器注入这样页面类只关心取数据和调方法不关心对象从哪来。而 Manager 依赖 Dao由 Hibernate 的 ORM 映射把 Pojo 动态生成 Vo落到数据库对应的表和字段。权限、日志、事务这些横切逻辑则通过 Spring AOP 处理ACEGI 负责权限控制。从今天的视角看这套技术栈确实有年头了但拆开看它的分层思路完全不过时。我在现在的项目里仍然会要求表现层不写业务逻辑业务逻辑集中在 Service 层数据访问单独一层实体对象和数据传输对象分离。你写系统结构设计时不要只画一个三层架构图就完事要把每一层的职责边界、层与层之间的依赖方向、控制反转和面向切面的处理方式写清楚。这部分的深度直接决定评审专家是否认可你的设计。3.2 第二层模块用户管理那条六步时序图第二层模块结构设计要把系统拆到功能模块粒度。案例仓储管理系统 EYP 一共五个模块用户管理、产品管理、仓库管理、客户管理、运筹管理。每个模块要求包含模块设计描述和功能实现说明。模板里用户管理这个模块写得最完整可以当作其他模块的参照。它的功能描述是三句话老师登录后进入用户管理模块查询显示存在的用户对存在用户进行修改与删除新增不存在的用户。下面跟着一条六步时序图请求 → DoAction → Response → Save or Get → 返回结果 → 返回最终结果。其中第二步业务处理包含一个判断——查询是不是有权限查询用户第三步行返回没有权限或其他错误信息。这条时序图看起来简单但它回答了评审时最常见的三个问题谁来发起请求、系统在哪里做权限校验、数据最终流向哪里。写类似时序图时我建议在文字部分补一步说明把时序图里每个箭头的入参和出参列出来比如步骤动作输入输出1前端请求查询用户查询条件姓名/工号请求消息2Manager 校验权限当前用户身份有权限/无权限3Dao 层查询数据库查询条件用户 Pojo 列表4Manager 转换 Vo 并返回Pojo 列表Vo 列表分页结果模板里还给出了一个非常务实的业务整体性能列表这是很多开发写设计文档时最容易漏掉的部分在线用户 200 个文件导入导出不得超过 100000/20 秒超过 20 秒的界面一律要以进度条显示并发量处理 50 个/1 秒。性能指标的价值在于它是后面对系统做压力测试的验收依据。没有指标的设计文档测试阶段就只能凭感觉判断性能合不合格。写的时候注意把硬件配置一起写上——案例里明确写了 Win Server 2002、2.8GHz CPU、4G 内存性能数字脱离环境没有意义。给用户管理模块补充了一段 Manager 层伪代码模板的详细设计部分要求的就是这种形式// 用户管理查询用户列表的 Manager 层伪代码 public ListUserVo getUserList(String keyword, int page, int pageSize) { // 1. 权限校验由 Spring AOP 切面统一处理 checkPermission(user:query); // 2. 调用 Dao 层查询原始数据返回 Pojo 列表 ListUserPojo pojoList userDao.findByCondition(keyword, (page - 1) * pageSize, pageSize); // 3. 将 Pojo 转换为 VoVo 才是最终展示给前端的数据结构 ListUserVo voList new ArrayListUserVo(); for (UserPojo pojo : pojoList) { voList.add(convertPojoToVo(pojo)); } // 4. 查询总数用于前端分页展示 int total userDao.countByCondition(keyword); return buildPageResult(voList, total); }这段伪代码的逻辑说明Manager 层做了三件事——权限校验、数据查询、数据转换。权限校验放在 Manager 层入口而不是 Page 层是为了保证所有入口页面、接口、定时任务都经过同一套权限逻辑。参数说明keyword 是模糊查询条件page 和 pageSize 是分页参数注意分页用的是(page - 1) * pageSize这是跳过偏移量的标准写法。Pojo 转 Vo 的动作放在 Manager 层而不是 Dao 层目的是让 Dao 层保持纯粹的数据访问职责。伪代码不要求能直接编译运行但必须让实现者看一眼就能翻译成真实代码。4. 数据库设计与组件/进程视图三个可选章节的取舍4.1 数据库设计可选实体定义、E-R 图与存储过程怎么分层描述模板第五章是Database DesignOptional数据库设计可选正文案例里这章只写了一句话见数据库接口说明书。这其实是一个非常实用的处理方式数据库设计单独成册设计说明书中只保留引用关系。但要注意这个可选是有条件的——项目里如果存在复杂报表、批量导入导出、跨表事务数据库设计这章就不能省。如果选择在说明书里展开数据库设计模板给出了清晰的粒度要求。实体定义部分要详细定义每个关键数据表、视图中的各个字段属性、存储要求、完整性约束、功能、注意事项对静态数据表应考虑定义初始配置记录。这条里最容易忽略的是静态数据表的初始配置记录比如系统里的角色表、权限表、字典表这些表的数据量不大但必须在设计阶段就定好初始数据否则联调时前端拿不到下拉框选项会被误认为接口没通。内部依赖性描述要求用 E-R 图描述实体间的关联依赖关系分析对存取空间、性能、完整性的要求。画 E-R 图不难难的是把存取空间和性能要求写出来。实际做法是在设计说明书中列一张表标注每张核心表的预估数据量、增长速率、索引策略和冷热数据分离方案。哪怕只是简单估算也能让 DBA 在物理设计阶段有参考依据。行为定义部分说白了就是存储过程和触发器的设计文档。模板要求根据功能或其他方式对存储过程/触发器进行归类便于进一步细化和分解并说明每类存储过程/触发器主要功能。详细定义每个存储过程(触发器)的功能、输入输出参数、返回值、返回的记录集、依赖的数据表和存储过程以及一些特殊要求比如需要启用事务等。给一个规范化描述的样例-- 存储过程伪代码库存盘点事务处理 -- 功能按月生成盘点差异报告核对库存快照与实时库存 -- 输入参数checkMonth 盘点月份格式 yyyy-MM -- 输出参数diffCount 差异记录数 PROCEDURE sp_inventory_check(checkMonth VARCHAR(7), diffCount INT OUTPUT) BEGIN -- 开启事务先锁定快照表再逐条比对库存变动记录 -- 差异数据写入盘点差异表并更新盘点状态位 END;说明这个伪代码定义了存储过程的输入输出边界和事务要求。关键字在于先锁定快照表——并发环境下不做锁处理盘点结果会被正在发生的出入库操作干扰。外部依赖性描述要写清楚这个存储过程依赖哪些表、哪些其他存储过程避免上线时才发现调用链断裂。4.2 组件视图与进程视图什么时候必须写这两章模板第六章 Component View 组件视图明确要求用 Component 图、deployment 图来描述系统的运行组件EXE 文件、DLL 等及其网络部署情况还要用目录树展示源代码文件的组织方式。进程视图则要求把系统分解为轻量级进程单个控制线程和重量级进程成组的轻量级进程并说明进程之间的主要通信模式例如消息传递、中断和会合。这两个章节在新手手里经常被跳过因为它们看起来没有代码可写。我的判断标准很简单单机单体应用、单进程部署组件视图和进程视图可以合并成一页纸写清楚进程数、端口号、部署形态即可只要是分布式系统、多服务部署、有消息队列或定时任务这两章就必须认真对待。组件视图里有一个细节值得特别注意——源码目录树。模板要求用目录树展示源码怎么组织这其实是在强制你交代代码结构。实际写的时候把核心包结构画出来标注每个目录的职责评审专家可以通过这张图快速判断你的模块边界是否清晰。进程视图最难写的是通信模式。模板给了三个关键词消息传递、中断、会合。在 Web 系统里最常见的模式是消息传递——客户端通过 TCP/IP 协议把请求传给 WebServerWebServer 处理后再把响应传回来。如果系统里用了消息队列要在这一章里写明生产者和消费者的关系、消息主题的定义、失败重试的策略。这些内容在代码评审时容易被忽略但在设计文档里提前定义能省掉后续联调的大量扯皮。5. 模板填写避坑五条高频翻车记录与排查方法5.1 占位符残留交付前必做的一次全局搜索现象文档打开修订记录里日期还是yyyy-mm-dd作者栏写着NameID正文某处还留着XX或者#。原因这是最典型的模板套用不彻底。模板作者留的占位符格式是 yyyy-mm-dd、NameID 这种真实项目里经常有人只改了封面产品名忘了改修订记录和页脚。评审专家拿到文档翻到第二页看到占位符第一印象直接归零。解决交付前做一次全局搜索把 yyyy、NameID、XX、TODO 这类标记全部查一遍。# 在文档导出的纯文本或源码目录里搜模板占位符 grep -rn yyyy\|NameID\|TODO\|XXX\|修改章节 --include*.md --include*.txt .参数说明-r 是递归搜索-n 显示行号--include 限制文件类型。搜出来的每个结果都要人工确认是真实内容还是漏改的占位符。这个操作我建议放在文档定稿前一天做因为临时改的话容易连带改动格式。5.2 密级与文档身份不一致现象封面勾选内部公开但正文页脚和页眉还印着绝密两个字。原因模板的密级标识出现位置很多——封面、版权页、页眉页脚都有。很多人只改了封面那一处生成 PDF 后其他位置的原模板密级没有覆盖到。解决生成 PDF 后逐页抽检重点看页眉页脚。密级这个字段在团队内部往往被忽视但一旦外发就是个合规问题。更稳妥的做法是定稿前统一搜绝密机密内部公开这几个词确认整篇文档的密级标识全部一致。软著申请材料一般选内部公开或完全公开选绝密会导致材料审核卡壳。5.3 功能列表的空列现象功能表格里修改说明备注代码量三列整列空白格式还在内容完全没有。原因模板里那三列是留给功能介绍表用的。案例里五个模块——用户管理、产品管理、仓库管理、客户管理、运筹管理只填了模块名后面几列没填。空列比没有列更难看评审专家会认为你连表格内容都没想清楚。解决要么把每列填上要么删除空列。实际项目里代码量这一列价值不大估算也不准我一般直接删掉修改说明留一个指向修订记录的引用即可。表格展示的信息应该每列都有实际意义不要为了保持模板原样而保留空字段。5.4 时序图只有主流程没有异常分支现象用户管理模块的时序图只画了六步主流程——请求、DoAction、Response、Save or get、return result、Response整个图里没有无权限数据不存在保存失败这些分支。原因画图的时候只顺着正常路径走了一遍没考虑异常场景。评审会上最常被追问的就是第二步权限校验不通过流程走到哪第四步保存失败错误信息怎么返回解决时序图主流程画完之后用文字在下方补充异常分支的走向。比如模板案例里第二步业务处理查询是不是有权限查询用户异常分支是返回没有权限或其他错误信息。哪怕时序图里不画分支文字说明也必须有。我的习惯是每画一条主流程箭头就问一遍这一步失败了下游怎么办把答案写进图下方的 Notes 里。5.5 性能指标脱离环境现象性能指标表里写着并发量处理 50 个/1 秒但没有写测试环境也没有写测试工具更没有写这个指标是峰值还是均值。原因性能数字本身来自模板但模板需要的其实是一个可以复现的指标定义。很多项目直接把模板的数字抄上去根本不看自己项目的实际规模——这比空白还危险因为后面测试报告对不上评审会直接判定文档造假。解决性能指标必须带环境前缀。案例里其实做了正确示范——写了 Win Server 2002、2.8GHz CPU、4G 内存然后才写在线用户 200 个。这个数字只在那个硬件环境下有效换台机器就得重新评估。写性能指标时把硬件、中间件配置、测试工具、并发口径四要素写全少了任何一项指标都没法验收。6. 交付前自检用评审视角回读这份说明书6.1 三遍读法信息读、实现读、评审读文档定稿前不要直接交换个身份读三遍。第一遍当作一个没参与过项目的开发来读只看能不能理解系统是做什么的、分几层、每层职责是什么第二遍当作要接手这个模块的维护者来读看能不能按着时序图和类设计把代码搭出来。第三遍最容易被忽略——把自己当成评审专家专门挑刺。6.2 自检清单照着逐项打勾再交检查项合格标准不合格时怎么办依赖关系第一层架构图中每个组件都能在下层找到对应实现补组件映射表接口定义每个模块/子系统接口有名称、说明、定义补接口描述节伪代码可翻译性所有关键方法伪代码能直接翻译为真实代码重写缺少边界条件的伪代码图表关联时序图步骤与文字描述完全对应统一编号图的步骤号必须文图一致性能指标硬件环境、并发口径、测试工具齐全补环境描述删掉无法复现的数字修订记录最后一行的日期和版本与文档当前状态一致补一条定稿修订记录这套表的来源是我自己的血泪经验有次评审会上专家问了句你这伪代码里分页参数没判空翻到第二页不崩吗当场答不上来。从那以后我每次交设计文档前都强制自己把伪代码逐行走一遍翻译——不是真的编译而是在脑子里假设自己是实现者从第一个方法往下推推到哪个方法参数对不上、哪个返回值可能为空就在文档里标出来改掉。这个过程通常能发现三五处图上看着通、实际写代码会卡住的逻辑断点。希望帮到你。本文还有配套的精品资源点击获取
返回列表