个人对代码质量、面向对象度量、重构、设计模式、设计原则以及实践比较感兴趣,在平常的项目中也或多或少接触过一些。这些东西不是朝夕能够练成的,本文记录下自己在网上收集的一些资料,以备日后详阅。
首先介绍几款代码静态检查工具,这是我们项目开发人员本地构建需要做的事。
Eclipse插件CheckStyle,能够保证项目开发人员使用同样的编码风格,整个团队保持一致的编码风格显然很好。
PMD,检测编码常见的一些错误,在代码提交svn之前,开发人员消灭一些低级编码错误。
FindBugs,跟PDM类似,也能够检测常见的代码问题。
Eclipse Metrics,检测函数的圈复杂度,所谓圈复杂度其实就是函数里面的if-else、while、for等逻辑控制,显然圈复杂度越高,就意味着函数逻辑越复杂,我们项目里面规定函数圈复杂度不能超过15。
EclEmma,能检测我们Junit单元测试代码覆盖率,即看看源代码有哪儿些能够被单元测试覆盖到,哪儿些不能。
Simian - Similarity Analyser,检查项目中重复代码。
UCDetector,能够检测项目中的无用代码。
上面这几款工具主要关注点都是在代码质量上,下面介绍几款设计相关的工具,更加侧重package的划分是否合理、jar之间的依赖关系。
jDepend,历所有类生成每个包的依赖程度,稳定性,可靠度等报告。重点在三个方面: extensibility可扩展, reusability可重用, maintainability可维护。主要根据Robert C. Martin提出的面向对象设计原则,生成Java包的质量评价报告。
tattletale,可以分析工程jar包之间的依赖关系、是否存在jar冲突。
Structure101,分析包之间的依赖关系,能够显示项目的依赖关系图,辅助我们解决依赖混乱、循环依赖等设计缺陷。
Infusion,是一个业界广泛应用的软件架构分析工具,通过对度量数据的分析,得到设计缺陷等软件架构的定量分析,对开发人员提高代码设计能力有较大帮助。
下面分享下几个学习OOD遇到的几个很不错的网站:
objectmentor提供了OO相关的培训课程。
sourcemaking介绍重构以及设计模式。
GOF23种设计模式是特定场景下的最佳解决方案,属于最佳实践。这些模式背后的理念和原则是一致的,基本上都是为了解耦、扩展和复用。比设计模式更高级的是设计原则和理念。
http://en.wikipedia.org/wiki/Unix_philosophy Unix设计哲学
https://en.wikipedia.org/wiki/List_of_software_development_philosophies 软件开发哲学
http://www.iteye.com/news/20930 常见的一些软件设计原则
http://coolshell.cn/articles/2324.html Unix传奇(下篇)
http://coolshell.cn/articles/1007.html 优质代码的十诫