有一段时间一直在想,什么样子的代码是一个好的代码、高质量的代码,这些是在福建的时候写的,已经过去有一些日子了。想到那些日子里,承担者项目上的一些压力,工作之间
依然在思考代码,依然在读 软件敏捷开发 这本书。
软件设计的最终体现为源代码,满足设计标准的唯一软件文档就是源代码清单。源代码就是设计。具有灵活性、可维护性和可重用性的良好架构设计会带来高质量的代码,高质量的代码必然有良好的架构设计。
如何衡量软件的好坏呢?
僵化性(Rigidity):关联的地方太多,难以改动;实际发生改动之后,许多因改动带来的影响自己难以预测到,往往需要在庞大的代码中搜寻变动。
脆弱性(Fragility):关联了概念无关的地方,出现新问题的地方与改动的地方没有概念上的关联。
牢固性(Immobility):系统重能够被重用的地方难以抽取出来,需要巨大的努力和风险。
粘滞性(Viscosity):包括软件的粘滞性和环境的粘滞性。软件的粘滞性发生在保持系统设计的改动方法比那些破坏设计的生硬改动手法更难应用时;环境的粘滞性发生在环境迟钝、低效时,比如导致大规模重编译的改动或者需要几个小时check in几个文件中的改动。
不必要的复杂性(Needless Complexity):代码中预置的那些处理潜在变化的代码,致使设计中含有绝不会用到的结构。
不必要的重复性(Needless Repetition):开发人员忽视了抽象,对于系统的改动开始变得困难起来。
晦涩性(Opacity):模块难以理解。用清晰、富有表现力的方式编写代码。
――――读<>
这些都是软件在腐化的臭味道,软件的腐化是由代码来表现出来的。现在我对于代码的理解:
可读性:代码不仅是给用户写的,也是给team成员读,(对我们而言,还要给维护人员读)。只有代码具有可读性,才能具有好的可维护性、才能被复用。读好的代码能提高,读不好的代码也能发现问题。通过代码评审来提高团队的代码质量是一种非常有效的方式,能够直接影响了设计。
可测试性:测试用例是代码的第一个用户,如果代码难以测试,可以说是很难用,就更难复用。
复用性:保持代码的抽象性,代码能写到没有一点能让自己copy的地方只是第一步。如果我们自己设计的代码自己都不能进行复用,还谈什么系统复用,还谈什么提高复用性。我们不能等有一个万能的复用框架别人做好给我们使用,我们应该从建立自己的复用库开始,可以建立自己的CVS(CVSNT)来管理自己的源代码库。(在不断抽象之下,就是分析的结果,一般一个包的抽象类有50%左右的时候这个包是最稳定的。)
可维护性:代码要有好的复用性,必须有良好的架构,易读,易于测试,对于改动灵活。程序在运行中不可能不遇到各种各样的问题,对于我们的项目可能是对于现场运行环境的细小的变更,可能会是运行中的性能的问题?会不会导致系统的崩溃呢?能够提供观察系统运行状态的良好的接口,能够提供分析系统异常信息的合理的结构。当系统出现异常的时候,我们不希望系统立刻就会崩溃,我们不希望只是看到异常。