ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

GJB 438B软件质量保证报告:V模型九阶段十八张检查表自动化

GJB 438B软件质量保证报告:V模型九阶段十八张检查表自动化 简介《软件质量保证报告.docx》是一份面向软件质量工程师、配置管理员及军用/嵌入式软件项目成员的规范化质量记录模板适用于遵循GJB 438B-2009《军用软件开发文档通用要求》的软件研制项目。资源包共1个docx文件约32KB为单文档结构内容以章节条文与检查表格为主无视频或脚本附件便于直接查阅与二次套用。文档按“范围—引用文档—软件研制概述—软件质量保证情况”组织先给出产品与软件标识表、系统概述及需方、用户、开发方、质量保证组织等职责划分再说明“V”型生命周期下项目策划、需求、概要设计、详细设计、编码、集成、配置项测试、系统测试与维护各阶段划分。核心部分以表格逐阶段列出工作产品与过程检查项数、问题数、检查项通过率及总体评价覆盖软件开发计划、质量保证计划、配置管理计划、需求规格说明、各类设计说明、源代码与测试报告等并交代质量保证组参与策划、监控、配置管理、需求管理与评审的审核方式。目前已有184人学习下载可作为撰写同类报告的章节框架与表格填写参考。1. 软件质量保证报告为什么要按“阶段×检查类型”拆成18张表一份软件质量保证报告.docx模板翻开会发现从项目策划到软件维护的九个研制阶段每个阶段都被切成了“产品质量”和“过程质量”两张检查表。产品质量表记录工作产品的检查项数、问题数和通过率过程质量表记录项目监控、配置管理、需求管理、测量与分析等工程活动的符合性。这种写法对应GJB 438B-2009对军用软件开发文档的要求——质量保证组织必须对过程和产品分别做出客观评价两类数据的来源和统计口径不同混在一张表里没法追溯问题出在哪个环节。它适合嵌入式软件的质量师、配置管理员和测试工程师。编码阶段同步开展单元测试验证详细设计软件集成阶段验证概要设计配置项测试阶段验证需求规格说明系统测试阶段验证研制任务书。各阶段检查数据汇入报告第4章的专职质量保证部分形成从策划到维护的完整质量链。软件质量保证与测试的交叉点在每一张过程表里都有体现——评审过程、需求管理过程、配置管理过程这些都是测试之外决定交付质量的环节。下面从V模型与报告结构开始拆解。2. GJB 438B-2009框架下质量保证报告的四层结构与V模型映射2.1 范围层的软件标识表与角色定义范围部分的第一张表是产品和软件的标识对照表字段包括类别、名称、标识号、缩略名、版本号、发布号。这张表看着简单但版本号和发布号最容易填错——版本号跟着配置项走发布号跟交付批次走两者不在同一个维度上。软件1的版本号可能是V1.0但发布号对应的是第3次交付的P3这两个字段的对应关系要跟配置管理报告保持一致否则审核时会被要求返工。系统概述要回答四个问题软件在上一层次产品中承担什么功能、由哪几个CSCI组成、运行在什么硬件平台和现场环境、涉及哪些组织和机构。文档里用a、b、c三条CSCI的逐条说明覆盖了软件1、软件2、软件3各自承担的功能比如软件1实现某个组成部分的特定功能软件2负责另一部分。需方、用户、开发方、保障机构、测试团队、质量保证组织、配置管理组织、开发监控组织这八个角色都要在这里交代清楚第4章的质量保证活动才能跟角色对上号。2.2 V模型九阶段与中间产品的验证关系第3章“软件研制概述”是整个报告的时间轴主干把九个阶段按V模型排列出来V模型位置阶段验证的设计文档典型时间节点左侧下降段项目策划软件开发计划20XX年XX月左侧下降段软件需求研制任务书20XX年XX月左侧下降段概要设计需求规格说明20XX年XX月左侧下降段详细设计概要设计说明20XX年XX月底部编码实现详细设计说明同步单元测试20XX年XX月右侧上升段软件集成概要设计说明20XX年XX月右侧上升段配置项测试需求规格说明20XX年XX月右侧上升段系统测试研制任务书20XX年XX月右侧上升段软件维护需求变更与配置管理交付后这个映射关系写进报告后回答了每个测试阶段在验证什么。时间节点精确到月即可顺序不能乱——策划评审在需求评审之前需求评审在概要设计评审之前。软件维护阶段重点监控需求管理和配置管理确保需求变更和技术状态受控。2.3 专职质量组织的审核范围与计划编制依据质量保证组由软件质量经理和软件质量师组成在策划阶段介入参与制定和评审开发计划、开发规范对软件开发过程和产品质量做客观评价。质量师编制《软件质量保证计划》的依据是GJB 438B-2009计划里确定审核、检查的内容、方式和时间。审核范围分两类。过程活动包括项目策划、项目监控、配置管理、需求管理、测量与分析、测试、评审以及需求分析、设计、编码、测试等工程活动。工作产品包括研制任务书、开发计划、配置管理计划、测试计划、需求规格说明、设计说明、源代码、测试说明和测试报告。把工作产品跟阶段对应起来就是4.1到4.9逐阶段的检查表。2.4 十八张检查表的“1N”结构规律从4.1.1到4.1.8每个阶段挂两张表产品表在前过程表在后。以概要设计阶段为例产品表只有一行“软件概要设计说明”过程表有五行概要设计说明评审过程、项目监控过程、需求管理过程、配置管理过程、测量与分析过程。这种“1N”的结构在九个阶段里反复出现产品表的行数取决于该阶段产出多少份工作产品过程表的行数取决于该阶段执行多少项工程活动。把这张结构图用代码描述出来后续填表和自动化生成都有依据# 九个阶段的检查表结构定义产品项和过程项按阶段分组 stage_checklist { 项目策划: { 产品: [软件开发计划, 软件质量保证计划, 软件配置管理计划, 软件验证计划, 软件合格审查计划, 软件需求标准, 软件设计标准, 软件编码标准], 过程: [项目策划过程, 项目监控过程, 配置管理过程, 测量与分析过程, 计划类文档评审过程] }, 软件需求: { 产品: [软件需求规格说明, 软件测试计划], 过程: [需求规格说明及测试计划评审过程, 项目监控过程, 需求管理过程, 配置管理过程, 测量与分析过程] }, 概要设计: { 产品: [软件概要设计说明], # 注意此阶段产品项只有一份文档 过程: [概要设计说明评审过程, 项目监控过程, 需求管理过程, 配置管理过程, 测量与分析过程] }, 详细设计: { 产品: [软件详细设计说明, 软件测试说明], 过程: [详细设计说明评审过程, 项目监控过程, 需求管理过程, 配置管理过程, 测量与分析过程] }, 编码实现: { 产品: [软件源代码], 过程: [代码审查报告及单元测试报告评审过程, 项目监控过程, 需求管理过程, 配置管理过程, 测量与分析过程] }, 软件集成: { 产品: [软件集成测试说明, 软件集成测试报告], 过程: [评审过程, 项目监控过程, 需求管理过程, 配置管理过程, 测量与分析过程] }, 配置项测试: { 产品: [软件配置项测试报告], 过程: [评审过程, 项目监控过程, 需求管理过程, 配置管理过程, 测量与分析过程] }, 系统测试: { 产品: [软件系统测试报告], 过程: [评审过程, 项目监控过程, 需求管理过程, 配置管理过程, 测量与分析过程] } }这段字典直接对应报告4.1节到4.1.8节的表结构每个阶段的“产品”列表对应一张表的行“过程”列表对应另一张表的行。维护这个字典比维护Word里的表格更容易发现遗漏——比如系统测试阶段的过程项里少了“评审过程”还是“测试过程”一眼就能看出来。3. 质量检查表的指标定义与数据填写方法3.1 检查项数、问题数与通过率的计算规则检查项数是质量师实际审核的条目数量不是文档页数。一份需求规格说明可能被拆成80个检查项取决于质量保证计划里定义的检查单颗粒度。问题数是审核中发现的不符合项数量每个问题都要有对应的记录编号。通过率的计算是检查项数 - 问题数/ 检查项数 × 100%。同一个检查项可能发现多个问题这种情况下通过率仍然按检查项去重计算但问题数按实际记录累加。用代码把计算逻辑固定下来避免手工算出不同口径def calc_pass_rate(check_items: int, issue_count: int) - float: 计算质量检查通过率 check_items: 检查项总数质量保证计划中定义的检查条目 issue_count: 发现的问题数按问题记录编号去重后计数 返回: 通过率百分比保留两位小数 if check_items 0: raise ValueError(检查项数必须大于0) # 通过项 检查项总数 - 问题数同一检查项多个问题只扣一次 passed max(check_items - issue_count, 0) return round(passed / check_items * 100, 2) # 概要设计阶段产品检查示例 rate calc_pass_rate(check_items45, issue_count3) print(f概要设计阶段产品通过率: {rate}%) # 输出 93.33%通过率不等于缺陷密度。检查项可能关联多个问题记录但通过率的分母始终是检查项总数。如果某阶段通过率低于80%通常说明入口条件没有满足需要先做问题闭环再进入下一阶段。3.2 工作产品检查表与过程检查表的数据差异对比维度工作产品检查表过程检查表检查对象文档、代码、报告等具体输出物工程活动的执行情况数据来源文档审查记录、代码审查报告过程审核检查单、监控记录常见问题类型内容缺项、格式不符合标准、追溯性不足流程未执行、记录缺失、角色职责不清问题闭环方式修改文档、补充追溯矩阵调整流程、补充监控记录填写频率每份工作产品完成后每个工程活动周期工作产品检查通常采用同行评审加质量师抽查的方式过程检查依据质量保证计划中定义的过程审核检查单逐项确认。过程检查的问题往往比产品检查更难闭环因为流程性问题涉及角色习惯和工具链配置不是改一份文档就能解决。软件质量保证与测试的交叉也在这里体现——配置项测试和系统测试阶段的过程检查关注的不是测试用例本身而是测试活动的评审、监控和需求追溯是否到位。3.3 中层验证与联合评审记录的填写要点中层验证覆盖概要设计、编码实现、软件集成、软件系统测试四个阶段。验证时间要精确到日期参与人员要列出具体角色。中层验证的“层级”指的是跨阶段的中间确认活动比如在概要设计阶段通过原型验证关键接口的可行性在编码阶段通过静态分析工具验证编码规范的执行率。联合评审表的字段包括序号、项目阶段、评审对象、时间、评审方式和级别、参会人员。评审级别分项目级和公司级项目级评审由项目内部组织公司级评审需要质量保证组织之外的角色参加。评审方式要写清楚是会议评审还是传阅评审传阅评审需要附上签署记录。4. 用python-docx批量生成质量保证报告的阶段检查表4.1 把检查数据抽成可配置的JSON结构手工往Word模板里填十几张表效率低且容易出错。更稳定的做法是把第2章定义的检查表结构扩展成JSON数据文件每个阶段挂三个字段产品检查、过程检查、总体评价。产品检查和过程检查各是一个数组每项包含名称、检查项数、问题数通过率由程序计算后写入。{ project: XXX软件, stages: [ { name: 项目策划, products: [ {item: 软件开发计划, checks: 32, issues: 0}, {item: 软件质量保证计划, checks: 28, issues: 1}, {item: 软件配置管理计划, checks: 25, issues: 0} ], processes: [ {item: 项目策划过程, checks: 15, issues: 0}, {item: 项目监控过程, checks: 12, issues: 0} ] } ] }这个JSON就是数据源每次阶段检查完成后只需更新数字不需要动Word模板。维护数据源比维护文档表格更可靠版本控制工具能直接看出哪个阶段的数据变了。4.2 模板占位符替换与表格行动态插入python-docx支持读取现有.docx模板、替换段落文本和操作表格。思路是模板里给每张表预留一个标记行比如第一行写{{TABLE:项目策划-产品}}脚本找到标记后替换成实际数据行。from docx import Document def fill_table(doc, marker: str, rows: list): 在doc中查找包含marker的表格按rows数据填充 marker: 模板中的表标记文本如 {{TABLE:项目策划-产品}} rows: [{item:软件开发计划,checks:32,issues:0,rate:100.0}] for table in doc.tables: # 检查表格首行是否包含标记 header table.rows[0].cells[0].text.strip() if marker not in header: continue # 清空原标记行按数据逐行写入 table.rows[0].cells[0].text 工作产品名称 for i, row_data in enumerate(rows): if i 1 len(table.rows): row table.rows[i 1] else: row table.add_row() row.cells[0].text row_data[item] row.cells[1].text str(row_data[checks]) row.cells[2].text str(row_data[issues]) # 通过率由程序计算不手工填 rate calc_pass_rate(row_data[checks], row_data[issues]) row.cells[3].text f{rate}% break doc Document(软件质量保证报告_template.docx) # 假设已从JSON加载了stages数据 fill_table(doc, {{TABLE:项目策划-产品}}, stages[0][products]) doc.save(软件质量保证报告_filled.docx)这段代码的核心是标记行查找和动态增行。模板里每个表只保留标题行和标记行实际数据行由脚本插入表格行数不再受模板预设行数的限制。通过率始终调用calc_pass_rate计算避免手工填写时出现四舍五入不一致。4.3 生成后的一致性校验脚本生成文档后需要校验三个一致性产品表行数是否与该阶段工作产品清单匹配、过程表行数是否与质量保证计划中定义的过程活动匹配、通过率是否与检查项数和问题数自洽。def verify_table(table, expected_items: int): 校验表格行数是否符合预期 table: python-docx的Table对象 expected_items: 该阶段应有的检查项数量 返回: (是否通过, 实际数据行数) # 跳过标题行统计有内容的行数 data_rows [r for r in table.rows[1:] if r.cells[0].text.strip()] actual len(data_rows) ok actual expected_items if not ok: print(f校验失败: 期望{expected_items}行, 实际{actual}行) return ok, actual校验脚本放在生成脚本之后运行任一表行数不对就中断保存并输出差异。这样在文档进入评审流程之前数据层面的低级错误已经被拦住。5. 第三方评测数据与内部质量数据的合并核对第三方评测通常覆盖文档审查、静态分析、代码审查、动态测试四个层次每个层次会产出问题数、执行用例数、回归关闭数。报告第6章把单元测试、部件测试、配置项测试、系统测试四个级别的第三方数据分别列出但内部质量保证数据在4.1到4.1.8已经记过一轮两边需要交叉核对。核对方法是把内部检查记录和第三方评测记录归入同一张对照表按阶段和测试级别对齐。差异超过阈值的项要标注原因比如内部检查项数偏少可能是因为内部检查单的颗粒度更粗第三方问题数偏多可能是因为第三方采用了更严格的静态分析规则。最终报告中第三方评测部分的数字必须与内部质量保证部分的阶段数据能对应上不能出现同一份文档在两个章节里检查项数不一致的情况。第三方评测的动态测试回归数据容易核对遗漏——内部检查记录的是“问题已关闭”第三方报告里要看的是“回归测试确认问题归零且未引入新问题”这两个口径不一样。合并时要把回归确认的用例数和新增问题数单独列出。该文档适用于嵌入式软件的质量保证报告编制尤其在采用V模型生命周期的项目中九阶段十八张表的框架可以直接复用。需要调整的是每个阶段的检查项数、问题数和具体工作产品名称这些取决于项目的实际产出物和质量保证计划中的检查单定义。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进