跳到正文

第12章学习笔记:工程化、测试与综合项目

课程笔记

通过逐步可编译的程序掌握工程化、测试与综合项目,从现象走到语言规则、资源状态和工程证据。

关联:章节 第12章 工程化、测试与综合项目

第12章笔记:工程化、测试与综合项目

本章问题

通过逐步可编译的程序掌握工程化、测试与综合项目,从现象走到语言规则、资源状态和工程证据。 七课组成一条从可编译现象到语言规则、对象状态和工程验证的链,不能拆成互不相干的语法点。

七课连接

  • 接口、实现与目录结构:规则 interface is dependency boundary;实验任务为写一个能编译运行的最小程序展示“接口、实现与目录结构”,记录输入、关键对象状态、输出和编译命令,并用规则 interface is dependency boundary 解释结果;严格边界为不得把“接口、实现与目录结构”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《单元测试与可测设计》的输入或约束。
  • 单元测试与可测设计:规则 test one behavior with controlled inputs;实验任务为写一个能编译运行的最小程序展示“单元测试与可测设计”,记录输入、关键对象状态、输出和编译命令,并用规则 test one behavior with controlled inputs 解释结果;严格边界为不得把“单元测试与可测设计”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《编译警告与静态检查》的输入或约束。
  • 编译警告与静态检查:规则 warnings expose suspicious constructs;实验任务为写一个能编译运行的最小程序展示“编译警告与静态检查”,记录输入、关键对象状态、输出和编译命令,并用规则 warnings expose suspicious constructs 解释结果;严格边界为不得把“编译警告与静态检查”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《调试器与sanitizer思维》的输入或约束。
  • 调试器与sanitizer思维:规则 first invalid access matters;实验任务为写一个能编译运行的最小程序展示“调试器与sanitizer思维”,记录输入、关键对象状态、输出和编译命令,并用规则 first invalid access matters 解释结果;严格边界为不得把“调试器与sanitizer思维”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《性能测量与基准》的输入或约束。
  • 性能测量与基准:规则 benchmark fixes workload and metric;实验任务为写一个能编译运行的最小程序展示“性能测量与基准”,记录输入、关键对象状态、输出和编译命令,并用规则 benchmark fixes workload and metric 解释结果;严格边界为不得把“性能测量与基准”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《CMake与可重复构建》的输入或约束。
  • CMake与可重复构建:规则 build graph makes artifacts reproducible;实验任务为写一个能编译运行的最小程序展示“CMake与可重复构建”,记录输入、关键对象状态、输出和编译命令,并用规则 build graph makes artifacts reproducible 解释结果;严格边界为不得把“CMake与可重复构建”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《综合项目答辩》的输入或约束。
  • 综合项目答辩:规则 evidence=tests+sanitizers+benchmark;实验任务为写一个能编译运行的最小程序展示“综合项目答辩”,记录输入、关键对象状态、输出和编译命令,并用规则 evidence=tests+sanitizers+benchmark 解释结果;严格边界为不得把“综合项目答辩”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《综合项目答辩》的输入或约束。

实验闭环

从空目录建立在线兼容的C++17程序,开启警告,运行本章两道代码题各四组测试,再新增一个失败用例。C++20扩展另作显式比较。保存编译命令、输入、输出、首个诊断和修复后的回归。涉及资源就画所有权,涉及容器就标迭代器有效性,涉及并发就画happens-before。

复盘

错题不能只记“粗心”。标记它属于阶段、类型、控制、对象生存期、所有权、异常、复杂度还是并发。更换输入与实现重做阶段卷;能解释规则为何阻止错误,并能展示反例,才算迁移成功。