常用软件工程概念与工具
持续更新中…
资料
相关书籍
软件构建组成
细节请参考《代码大全》
代码质量的重要性
代码的生命周期中有不少与一半的时间都用于阅读,代码的可阅读性(质量)很重要
经典概念
SOLID/CLEAN
SOLID:Single Responsibility / Open&Closed / Liskov Substitution / Interface Segregation / Dependency Inversion
CLEAN:内聚(Cohesive)/松耦合(Loosely Coupled)/封装(Encapsulated)/自包含(Assertive)/无冗余(Nonredundant)
3Y:层次化( hierarchy)/ 模块化( modularity) / 规整化( regularity,保存模块接口的通用性)
其他资料:https://users.ece.utexas.edu/~adnan/pike.html
YAGNI
YAGNI。YAGNI 有很强的扩展性,比如只做好当前、不重复、尽量不添加新功能
TDD
测试驱动开发。逻辑测试 & 边界测试。函数或模块的编写要方便测试,而且每当你收到 bug 报告,请先写一个单元测试来暴露这个 bug
经典论述
- 好代码的检验标准就是人们是否能轻而易举地修改它
- 与其猜测未来需要哪些灵活性、需要什么机制来提供灵活性,我更愿意只根据当前的需求来构造软件,同时把软件的设计质量做得很高
- 每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中
重构
下面的内容截取自 《重构:改善既有代码的设计》 /
重构:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构
在软件开发的大部分历史时期,大部分人相信应该先设计而后编码。重构正好与此相反,哪怕手上有一个糟糕的设计,甚至是一堆混乱的代码,我们也可以借由重构将它加工成设计良好的代码
重构原则
- 重构的第一步:确保即将修改的代码拥有一组可靠的测试(TDD),合理的测试可以极大的减少调试时间
- 两顶帽子。将重构与添加新功能在版本控制的提交中分开
- 何时重构。让扩展变得容易、事不过三,拒绝重复、帮助理解、逐步清理不合理的地方
- YANGNI。不需要理解的代码不要重构
- 自动化重构。使用智能工具可以减少工作量