⌨️ 第五章 从设计到测试
📄 本篇摘要

金字塔的顶两层:系统测试把整个软件当黑盒测【整体行为】,验收测试由客户/使用方确认【这就是我要的东西】。分界线一句话:系统测试问【做对了吗】,验收测试问【做的是对的这个东西吗】。

📝 关系

上一节:单元测试与集成测试 | 下一节:黑盒与白盒、覆盖率

一、系统测试:站在整体的高度

零件合格(单元)、组装合格(集成),还不等于产品合格——性能撑不撑得住并发、内存漏不漏、异常会不会雪崩、界面流程顺不顺,都是系统层面才暴露的问题。常见类型:

系统测试阶段不再看代码内部(内部已由下层测试管过),只对着需求规格说明书逐项验证。

二、验收测试:客户说了算

系统测试通过后,交到客户/使用方手里,按合同或需求清单确认——这东西是我要的吗?场景对不对、报表格式合不合意、业务流程走不走得通。验收标准最好在开发前就白纸黑字:临到验收才讨论什么叫【完成】,是项目纠纷的头号来源。

通过验收=交付。单元/集成/系统/验收这四层,正好对应第 5-9 节软件生命周期里【开发→交付】的主干。

三、V 模型:开发与测试一一对应

教材的 V 模型把两侧对齐——左边的开发产物,右边各有一个测试等级盯着:

需求分析 \             / 验收测试     (验收测需求)
  系统设计 \         / 系统测试      (系统测设计)
   详细设计 \     / 集成测试        (集成测设计间的接口)
     编码实现 \ / 单元测试         (单元测代码)

读法:每种缺陷在哪个阶段埋下的,就该在对应等级的测试里抓住。需求阶段的误解,单元测试永远抓不住——它只能被验收测试抓住。

四、动手 Demo:用一张验收清单跑一遍小系统

# 一个迷你【成绩换算系统】:需求规格说明书三条
# R1: 90 分以上输出 A;R2: 60~89 输出 B;R3: 60 分以下输出 C
def to_grade(score):
    if score >= 90:
        return "A"
    if score >= 60:
        return "B"
    return "C"

# —— 单元测试层:函数本身 ——
assert to_grade(95) == "A"
assert to_grade(75) == "B"
assert to_grade(40) == "C"

# —— 系统测试层:按 R1~R3 逐条走完整流程 ——
report = {"A": 0, "B": 0, "C": 0}
for name, score in [("波仔", 95), ("小红", 75), ("小明", 40)]:
    report[to_grade(score)] += 1
print(report)
assert report == {"A": 1, "B": 1, "C": 1}

# —— 验收测试层:客户的验收标准(写在合同里的样子)——
acceptance = [
    ("R1", 90,  "A"),
    ("R1", 89,  "B"),   # 客户现场最爱的挑刺点:边界归属
    ("R2", 60,  "B"),
    ("R3", 59,  "C"),
]
for rule, score, want in acceptance:
    got = to_grade(score)
    print(f"{rule} {score} 分 -> {got}  {'通过' if got == want else '不通过'}")
    assert got == want
print("验收通过")

沙箱实跑输出:

{'A': 1, 'B': 1, 'C': 1}
R1 90 分 -> A  通过
R1 89 分 -> B  通过
R2 60 分 -> B  通过
R3 59 分 -> C  通过
验收通过

看到什么算成功:四条验收逐条通过、最后打出验收通过。

读结果:89 分归 B 还是 A?这种事单元测试写得再好也替代不了验收现场的那一问——验收清单里必须亲手写下边界。验收标准先行,纠纷少一半。

五、30 秒实验

把需求改成【90 分及以上为 A】之外再加一条【正好 60 分输出 A-】,改 to_grade 让验收清单的 R2 一条变红——体验一次【需求变更→验收失败→返工】的迷你全流程。

六、常见误区

误区 真相
系统测试就是再跑一遍单元测试 系统测试不看代码看需求;性能、安全、兼容都是整体问题
验收是走过场 验收标准不先写清楚,交付日就是扯皮日
V 模型只是画着好看 它提醒你:需求阶段埋的误解,只有验收级测试能抓
自测三问(点击展开) 1. **系统测试和验收测试各问一句什么话?** 答:系统测试问【软件整体做对了吗】,验收测试问【做的是客户要的那个东西吗】。 2. **V 模型的对应关系举一例。** 答:需求分析对验收测试——需求误解只能由验收级测试抓住。 3. **验收标准什么时候定?** 答:开发前白纸黑字写好,不能等交付日再谈。

相关笔记