简介CMMI 3.0 软件工程规范文档面向软件研发管理者、过程改进EPG成员及质量与项目管理从业者用于系统理解能力成熟度模型集成框架解决组织在过程定义、量化管理与持续优化中缺乏统一参照的问题。资源包共1个文件为PDF格式大小约5.17MB内容围绕CMMI-DEV的等级划分、通用目标与实践展开并梳理了从v1.3到v2.0的版本演化脉络。文档详细讲解初始级至优化级五个成熟度等级的目标与实践要点涵盖需求管理、项目策划与监控、配置管理、过程质量保证、因果分析与决策等实践域同时给出GG与GP的对应关系及2.0与1.3的PA映射说明。读者可借此掌握过程域之间的对应逻辑、评估抽样规则以及商业目标驱动改进、性能数据衡量效果等核心理念适合作为体系落地、内审准备与评估备考的参考材料。目前已有1411人学习下载。1. 从“文档补丁”到“过程基线”CMMI 3.0 规范文档到底在解决什么很多团队第一次接触 CMMI 3.0第一反应是“又要补一堆文档”。这个反应本身就说明问题如果规范文档只是评审前突击补齐的模板那它和真正的过程改进没有关系。CMMI 3.0 把已定义的过程作为核心特征意思是组织级要有一套标准过程项目在此基础上做裁剪而不是每个项目各写各的。规范文档就是这套标准过程的载体它要回答的是“这件事我们组织标准怎么做、项目可以怎么改、改完怎么留痕”。它适合三类人正在准备 CMMI 3 级评估的 EPG工程过程组成员、需要把研发流程落成可执行文件的研发管理者、以及被要求写“软件工程规范文档”但不知道从哪下手的工程师。标题里的“软件工程规范文档”不是一份文档而是一组有层次的文件方针、过程、规程、模板、检查单。搞清这个层次后面的编写和落地才不会变成堆字数。2. CMMI 3.0 规范文档的四层结构与裁剪逻辑2.1 为什么不能只写一份“大而全”的规范常见做法是写一份几百页的《软件工程规范》结果没人看项目该怎么做还怎么做。CMMI 3.0 的已定义过程要求组织标准过程OSP可裁剪、可度量、可改进。一份大文件无法裁剪也无法对应到具体实践域。正确的结构是分层的每层解决不同问题。层级文件类型回答的问题典型责任人L1方针组织为什么要求这么做高层管理者L2过程这类活动分几个阶段、谁负责EPGL3规程每一步具体怎么操作过程所有者L4模板/检查单产出物长什么样、怎么查项目组这个表不是让你照抄而是说明评审时看的是层次是否完整、上下是否一致。方针里承诺的资源过程里要有对应活动过程里要求的活动规程里要有操作步骤规程里要求的产出模板里要有字段。2.2 用裁剪表把组织标准过程映射到项目裁剪不是删文档而是根据项目特征选择过程元素。我一般会建一张裁剪表把项目类型、规模、生命周期模型作为输入输出需要执行的过程和需要产出的工作产品。# 裁剪表片段cmmi3_tailoring.yaml project_profile: type: enhancement # 项目类型new / enhancement / maintenance size: small # 规模small / medium / large lifecycle: iterative # 生命周期waterfall / iterative / agile tailoring_rules: - when: type maintenance drop: - 需求开发-原型评审 keep: - 配置管理-变更控制 - 验证-回归测试 - when: size small merge: - 项目计划与项目监控合并为一份周报 - when: lifecycle agile replace: - 阶段评审 - 迭代评审逻辑说明这份 YAML 不是给工具读的是给 EPG 和项目经理对齐用的。project_profile描述项目特征tailoring_rules是组织级允许的裁剪规则。每条规则必须写清“什么条件下、动哪个过程元素、怎么动”。参数说明drop表示不执行但要在裁剪记录里说明理由merge表示合并产出物replace表示用等效活动替代。裁剪结果要经过过程所有者批准不能项目组自己说了算。2.3 规范文档的编号与追溯设计CMMI 3.0 强调双向追溯。规范文档如果每一条都是孤立段落追溯就无从谈起。常见做法是给每个过程元素一个唯一 ID格式建议为过程域缩写-类型-序号例如REQ-PROC-001表示需求开发过程的第一条。模板字段里要留“上游依据”和“下游产出”这样评审时能顺着 ID 查。注意编号一旦发布就不要改修订用版本号区分。很多团队在评审前改编号导致追溯矩阵全部失效。3. 用模板和检查单把规范文档写成可执行文件3.1 需求规格说明书的字段设计软件工程规范文档里最容易被写废的就是需求模板。常见问题是字段太多、填的人不知道写什么。CMMI 3.0 要求需求可追溯、可验证所以模板字段要围绕这两点设计。## 需求条目REQ-FUNC-012 - 需求描述用户可以通过邮箱重置密码 - 来源客户访谈记录 INT-2024-003 - 优先级高 - 验收标准输入已注册邮箱后 60 秒内收到重置链接链接 30 分钟内有效 - 上游依据BR-002 账户安全策略 - 下游产出TC-FUNC-012、DES-AUTH-004 - 变更历史2024-05-10 初稿2024-05-12 增加有效期约束逻辑说明每条需求独立成块字段固定。验收标准是测试用例的直接输入上游依据和下游产出构成追溯链。参数说明优先级用高/中/低三档不要用数字避免争议变更历史记录日期和变更点不写人名人名在配置管理工具里查。3.2 代码评审检查单的落地写法规范文档如果只写“要进行代码评审”等于没写。检查单要具体到能勾选。下面是一份针对 Python 项目的评审检查单片段其他语言可替换规则。# 代码评审检查单生成脚本gen_checklist.py CHECKLIST { 命名与风格: [ 变量名是否使用 snake_case, 常量是否全大写, 函数名是否以动词开头, ], 异常处理: [ 是否捕获具体异常而非裸 except, 异常信息是否包含上下文, 资源是否用 with 管理, ], 测试: [ 新增函数是否有对应单元测试, 边界条件是否覆盖, 测试是否独立可重复, ], } def render(checklist): for section, items in checklist.items(): print(f### {section}) for item in items: print(f- [ ] {item}) if __name__ __main__: render(CHECKLIST)逻辑说明这个脚本把检查单从文档变成可打印的评审清单。CHECKLIST字典的键是检查维度值是具体检查项。参数说明评审时每条要么勾选要么在评审记录里写不适用理由。render函数输出 Markdown 格式可以直接贴到评审 issue 里。实际使用时检查单要随项目类型裁剪比如维护项目可以去掉“新增函数测试”这一条。3.3 配置管理规范中的变更控制流程CMMI 3.0 的配置管理要求变更可控制、可审计。规范文档里要写清变更申请、影响分析、审批、实施、验证五个步骤并给出状态流转。-- 变更请求表结构change_request.sql CREATE TABLE change_request ( cr_id VARCHAR(20) PRIMARY KEY, -- 变更请求编号 title VARCHAR(200) NOT NULL, submitter VARCHAR(50) NOT NULL, submit_date DATE NOT NULL, impact_analysis TEXT, -- 影响分析结论 status VARCHAR(20) DEFAULT submitted, -- 状态submitted / analyzing / approved / rejected / implemented / verified approver VARCHAR(50), approve_date DATE, verify_date DATE );逻辑说明这张表是配置管理规范落地的核心。status字段约束了变更不能跳步impact_analysis必须填写才能进入审批。参数说明cr_id建议用CR-年份-序号便于检索approver只在状态为 approved 及之后才有值。规范文档里要写明每个状态的责任人和最长停留时间比如 analyzing 不超过 3 个工作日。4. 规范文档的评审、度量与持续改进4.1 用评审检查单验证文档一致性文档写完不等于能用。EPG 内部要先做一致性评审检查方针、过程、规程、模板之间是否对齐。我一般用一张交叉检查表逐条核对。检查项检查方法不通过示例方针承诺的资源在过程中有活动搜关键词方针说“提供培训”过程里没有培训活动过程要求的产出在模板中有字段字段映射过程要求“风险等级”模板没有该字段规程步骤可操作让新人试做步骤写“进行充分测试”没有具体方法裁剪规则不冲突规则两两比对两条规则对同一项目给出矛盾裁剪这张表的使用方式是每条检查项抽 3 到 5 个样本记录不通过项退回修改。评审记录本身也要存档作为 CMMI 3.0 评估时的客观证据。4.2 过程度量的最小指标集CMMI 3.0 不要求度量一切但要求度量支持过程改进。规范文档里要定义指标、采集频率、责任人、用途。常见的最小指标集包括需求变更率、评审缺陷密度、测试逃逸率、进度偏差。下面是一个采集脚本示例。#!/bin/bash # 采集需求变更率change_rate.sh # 用法./change_rate.sh 项目ID 起始日期 结束日期 PROJECT$1 START$2 END$3 # 从变更请求表统计已批准的变更数 CHANGES$(sqlite3 cmmi.db SELECT COUNT(*) FROM change_request \ WHERE statusapproved AND submit_date BETWEEN $START AND $END;) # 从需求表统计基线需求数 BASELINE$(sqlite3 cmmi.db SELECT COUNT(*) FROM requirement \ WHERE project_id$PROJECT AND baseline_date $END;) if [ $BASELINE -eq 0 ]; then echo 基线需求数为 0无法计算 exit 1 fi RATE$(echo scale4; $CHANGES / $BASELINE | bc) echo 需求变更率$RATE逻辑说明脚本从变更请求表和需求表分别取数计算变更率。参数说明PROJECT是项目 IDSTART和END是统计区间。BASELINE为 0 时直接退出避免除零。这个指标建议每月采集一次超过阈值时在过程改进会上分析原因。规范文档里要写明阈值比如变更率超过 0.3 触发根因分析。4.3 把评估发现回写到规范文档CMMI 3.0 评估或内部审计发现的问题不能只改项目要回写到组织标准过程。常见做法是建一张改进跟踪表记录问题、根因、修改的文档 ID、修改版本、生效日期。## 改进项IMP-2024-007 - 问题多个项目反馈需求评审检查单缺少“非功能需求”检查项 - 根因模板设计时只考虑功能需求 - 修改文档REQ-CHK-001 需求评审检查单 - 修改版本v1.2 - 生效日期2024-06-01 - 验证方式抽查 3 个项目评审记录确认非功能需求已检查逻辑说明每条改进项必须关联到具体文档 ID 和版本否则改了什么说不清。参数说明验证方式要可执行不能写“持续观察”。生效日期之后启动的项目必须使用新版本之前项目可沿用旧版本但要在裁剪记录里说明。5. 用脚本自动校验规范文档的追溯完整性规范文档写到一定规模后人工检查追溯链不现实。我一般会写一个轻量校验脚本把文档里的 ID 抽出来检查上游依据和下游产出是否成对出现。下面是一个 Python 示例假设文档是 MarkdownID 格式为XXX-XXX-数字。# 追溯校验脚本trace_check.py import re from pathlib import Path ID_PATTERN re.compile(r\b[A-Z]{2,4}-[A-Z]{2,4}-\d{3}\b) def extract_ids(text): return set(ID_PATTERN.findall(text)) def check_trace(doc_dir): upstream {} # 下游 ID - 上游 ID 集合 downstream {} # 上游 ID - 下游 ID 集合 for md in Path(doc_dir).rglob(*.md): text md.read_text(encodingutf-8) for block in text.split(\n\n): ids extract_ids(block) if 上游依据 in block: for i in ids: upstream.setdefault(i, set()).update(ids - {i}) if 下游产出 in block: for i in ids: downstream.setdefault(i, set()).update(ids - {i}) # 检查每个上游依据是否在别处被引用为下游产出 for down_id, up_ids in upstream.items(): for up_id in up_ids: if down_id not in downstream.get(up_id, set()): print(f断链{down_id} 声明上游 {up_id}但 {up_id} 未声明下游 {down_id}) if __name__ __main__: check_trace(./docs)逻辑说明脚本按空行分块识别包含“上游依据”和“下游产出”的块建立双向映射。upstream记录每个下游 ID 声明的上游downstream记录每个上游 ID 声明的下游。最后检查一致性输出断链。参数说明ID_PATTERN根据实际编号规则调整比如需求用REQ-FUNC-012测试用例用TC-FUNC-012。doc_dir是文档根目录。这个脚本建议在文档提交前跑一次断链为 0 才允许合并。提示脚本只检查显式声明的追溯关系隐式引用比如正文里提到某个 ID 但没写在字段里不会识别。规范文档里要强制要求追溯关系写在固定字段中。实际使用中我会把这个脚本挂到 CI 里每次文档仓库有 push 就自动跑。断链输出到构建日志评审时直接看日志。这样规范文档的追溯完整性就不再依赖人的记忆力而是变成可重复的检查动作。对于准备 CMMI 3.0 评估的团队这套校验记录本身也是过程执行的客观证据。本文还有配套的精品资源点击获取
