通读笔记(按主题聚类,不按原书顺序)
通读完成 2026-08-27。正文 9 章(原则 1–201)+ 引言 + 作者序/前言(2021 版新增)。原书 1995 年初版,2021 年中译版附作者 26 年后的逐章复审——这是本书最独特的两层声音,拆解必须分开标。
主题簇 A:这本书是什么(原则 vs 技术/语言/工具;没有物理定律)
13-ch01.txt:7软件产物非实体,物理定律不能成为软件工程的基础。13-ch01.txt:9原则=工作准则,集体智慧;绝对真理或推论两种形态。13-ch01.txt:11,15,17技术=按部就班流程;语言=基本元素+规则+语义;工具=软件程序(顾问/分析/自动化/辅助)。13-ch01.txt:27原则随学科演化;1964 年的原则(短变量名、小程序)今天看很傻;三十年后今天的原则也一样。13-ch01.txt:31译者注:英文原书出版 25 年后,超过 95% 的原则没过时。10-fm.txt:7前言引 Lehman:软件开发由人管理和实现,长远不可预测;但软件展现规律性特征,所以原则可以被列出来。10-fm.txt:21本书刻意回避流行趋势(流行 3–10 年失宠);不直接讲面向对象,讲封装。10-fm.txt:5与08-fm.txt:41原则不相互独立;任意 两条不 100% 兼容(「距离产生美」vs「眼不见心不烦」)。14-ch02.txt:211P37 责任:桥塌了问工程师;软件失败时工程师怪编译器/方法/经理/时间。要么做好,要么不做。14-ch02.txt:115P19 复杂问题都有「简单解法」的建议——Turski:那是错的。19-ch07.txt:483P164 方法救不了你:结构化浪潮(70s–80s)、对象浪潮(80s–90s);好的组织采用前后都好。19-ch07.txt:499P165 没有奇迹:行业生产力年增 3–5%;宣称 50–100% 增长是炒作。14-ch02.txt:179P30 跟风小心(lemming);14-ch02.txt:183P31 但别忽视技术(波浪 5–7 年)。14-ch02.txt:135P22 技术先于工具(没规矩的木匠);139P23 务实用工具(CASE 提效 10–20%,70% 的 CASE 工具从未被使用);143P24 工具给优秀工程师;147P25 CASE 昂贵($17,000 安装/$3,000 年费,译者注已过时)。14-ch02.txt:203P36 研究再转化不可行(研究者缺实战;用语分歧)。08-fm.txt:53作者 2021:CASE 一词不流行了,今天的工具=问题跟踪/版本控制/虚拟机/项目管理/调试。
主题簇 B:质量(1–7,142)
14-ch02.txt:7P1 质量第一,没商量;Yourdon:加速测试/忽视 bug/未定先编码→说「不」。14-ch02.txt:15P2 质量因人而异(优雅设计 vs 响应时间 vs 低成本 vs 满足需求);温伯格「政治困境」。14-ch02.txt:23P3 效率与质量不可分:贝尔实验室——要求每千行 1–2 个 bug 时,人月 150–300 行。14-ch02.txt:31P4 高质量可能:航天飞机软件 300 万行,每行高达 1000 美元,每万行错 <1;方法=客户参与/原型/简单设计/审查/最优秀的人。14-ch02.txt:39P5 质量无法事后补(retrofit);一次性原型不能转产品的主要原因。14-ch02.txt:47P6 低可靠性比低效率糟(效率可局部优化;可靠性难发现难隔离,可伤人)。19-ch07.txt:175P142 想优化什么就优化什么:Weinberg/Schulman 五团队实验,同一需求,各被要求优化不同目标,除一个外都做到了。18-ch06.txt:87P112 温伯格「无差错谬论」:大量错误证明软件无价值,零错误对价值什么也没说。
主题簇 C:需求为什么会错(7,10–13,15–17,20,38–44,50,130)
15-ch03.txt:7需求工程=提出/研究问题 + 说明黑盒外部行为;产出需求规格说明。15-ch03.txt:19P39 先定问题再写需求:电梯故事(高层楼电梯慢),六种解法(提速/新电梯/错峰/快递电梯/提租金/归位算法),成本风险差异巨大;方案变化比构建便宜。15-ch03.txt:27P40 立即确定需求;三种徒劳希望;增量开发不是不做需求规格的借口。14-ch02.txt:51P7 尽早交付:瀑布 99% 资源耗尽才第一次交付;原型法 5–20%。14-ch02.txt:71P10 做好抛弃准备:Brooks;Royce 1970:第一个完整部署的系统往往是第二个造的;25% 资源给预发布版。14-ch02.txt:75,79,83P11–13 一次性原型(快速粗糙,验关键未理解特性)vs 演进式原型(高质量,从已理解特性做起);一次性原型做快,一页纸需求。15-ch03.txt:43P42 原型降低界面风险(故事板)。14-ch02.txt:91P15 看到越多需要越多;文档按利于更改存储;配置管理要提前就位。14-ch02.txt:99P16 开发中变化不可避免(Bersoff 第一定律)。14-ch02.txt:103P17 能买不造:现成软件解 75% 问题;自造 10× 费用+100% 超支风险,最后还是 75%。14-ch02.txt:119P20 记录假设:Lehman 约 10 行代码一个假设;直线加速器月相故事。15-ch03.txt:51P43 记录需求为什么被引入(两秒响应例;记日期时间参与者)。15-ch03.txt:61P44 识别子集(最小有用子集+最小增量;X 列表)。15-ch03.txt:115P50 排优先级(橙汁 vs 生命维持;M/D/O 或 0–10)。19-ch07.txt:39P130 客户优先级:可能 10% 必需功能按时,90% 延迟可忍。15-ch03.txt:11P38 低质量需求→低质量估算(成本估算错误前 5 因全与需求有关)。
主题簇 D:把需求写清楚(28,32–35,41,45–49,51–60)
15-ch03.txt:35P41 立即修需求错误:设计阶段 5×、编码 10×、单元测试 20×、交付 200×。15-ch03.txt:127P52 每条需求单独编号(追踪的前提;R27;「应该」词匹配)。15-ch03.txt:133P53 减少歧义:范根检查法/形式模型辅助重写/对开页。15-ch03.txt:149P54 自然语言辅助增强而非替换;161P55 先写自然语言再写形式模型(拨号音两版对比;先形式会描述模型而非系统)。15-ch03.txt:173P56 需求规格保持可读(所有相关方)。15-ch03.txt:181P57 明确规定可靠性:99.999% 无意义;三概念=需求失效/失败率/可用性(病人监护 vs 电话系统)。15-ch03.txt:191P58 明确环境越界行为:空管 101 架飞机;前 3 个选项(报错/崩溃/忽略)不可接受但都「正确」。15-ch03.txt:205P59 待定项自毁(开发经理 1995 年 12 月前解决)。15-ch03.txt:213P60 需求存数据库(译者注:iCafe/TAPD/Jira)。15-ch03.txt:77P46 需求阶段别做设计(FSM 警告注记)。15-ch03.txt:87,93P47–48 用对方法+多视角(ER 图/状态机/Petri 网/决策表;OOA+FSM+决策树组合)。15-ch03.txt:101P49 合理组织(电话交换:功能/通话方/视角层次)。14-ch02.txt:167P28 形式化方法:每项目至少一人熟;先用自然语言;08-fm:61 作者 2021 自白:26 年里没有共事的工程师真用过形式化方法。14-ch02.txt:187–199P32–35 文档标准/术语表/索引/同名同义(三类特殊命令例)。15-ch03.txt:121P51 书写简洁(目标跟踪例)。