原作者 Robert C Martin
1 Rigidity.刚性,
软件越来越难于修改的趋势。即使一个小的改动也会因为依赖关系而引发一系列其它模块的修改。因为越来越难以修改,最后老板就下令不得修改。刚性由技术上升为政治
2 Fragility 脆弱性
每次修改都引发软件多处崩溃的趋势。崩溃经常发生在和修改处没有概念上联系的位置。
3 Immobility 固定性
软件不能被其它项目或者本项目中其它部分重用。某个工程师发现某个项目中一个模块和他想要的功能类似,但当他想重用这个模块时却被其依赖的一大堆其它模块吓退了。
4 viscosity 粘性
粘性来自两方面:设计和环境。当需要修改时,工程师经常会有不止一种方法做出改动。一些方法能保留原有的设计,另一些则破坏设计。如果保留设计的方法比hack的方法要困难,设计的粘性就很高。做错事很容易,但做对事很难。
环境的粘性来自于开发环境的缓慢和低效。举例来说,如果编译时间很长,开发者就倾向于不需要大规模重编译的修改,如果check in一些文件需要几小时的时间,开发者就倾向于减少check-in的文件数目的修改,尽管这类修改有时从设计的角度讲并不是良好的。