“能用的软件不一定是高质量的软件。”这是第二章开篇最发人深省的一句话。在软件工程中,功能正确只是及格线,而代码质量才是决定软件生命周期长短的关键。
一、 质量的三层体系
软件质量不是孤立的,它分为三个层次:系统质量、模块质量、代码质量。代码质量是基础,结构性的代码缺陷会贯穿整个软件生命周期,最终导致系统质量崩塌。
二、 代码坏味道(Code Smells)
PPT中列举了11种典型的代码坏味道,它们不会直接让程序崩溃,但会持续侵蚀五大质量属性:
长方法(Long Methods)
大类(Large Classes)
重复代码(Duplicate Code)
深嵌套(Deep Nesting)
魔法数字(Magic Numbers)
空检查过载(Null Check Overload)
长参数列表(Long Parameter Lists)
模糊命名(Vague Naming)
无用注释(Useless Comments)
未释放资源(Unreleased Resources)
复杂分支(Complex Branches)
以订单管理代码为例,深层的if嵌套、魔法数字(如userLevel == 3、payType == 1)让代码变得极难维护。这些坏味道会摧毁可读性、降低可维护性、破坏可测试性、削弱健壮性并限制可扩展性。
三、 五大核心质量属性
工业级代码必须在五个维度上达到平衡:
可读性:代码首先是写给人看的,其次才是给机器执行的。
可维护性:交付只是开始,维护才是主要生命周期。
性能:在合理优化与可维护性之间寻求动态平衡,而非极端压榨。
健壮性:异常输入下的容错能力,失败而不崩溃。
可复用性:一次编写,多次复用,降低开发成本。
四、 设计原则与反模式
本章重点强调了SOLID原则(单一职责、开闭、里氏替换、接口隔离、依赖倒置)、DRY(不要重复自己)、KISS(保持简单)和YAGNI(你不会需要它)。
同时,指出了六大质量反模式:功能优先忽视质量、永久的临时代码、复制粘贴开发、过度抽象设计、忽视边界与异常、只管实现不管维护。
五、 从主观到客观:量化质量指标
质量不能只靠感觉,必须量化。通过圈复杂度(分支越多越复杂)、内聚与耦合(高内聚低耦合)、代码覆盖率(行覆盖、分支覆盖)以及规范符合度(静态分析工具)来客观衡量代码质量。
案例:Java订单折扣计算器的质量演进
PPT最后展示了一个极佳的案例:从最初充满魔法数字和深嵌套的“坏代码”,逐步通过提取方法、策略模式、缓存优化、输入验证和泛型抽象,演变为生产级代码。这生动地证明了:质量是构建出来的,而不是事后补出来的。