代码阅读方法与实践---阅读笔记05

  代码的维护:有时候,代码不是我们学习的范例,而是需要得到修复。如果认为自己发现了大型系统中的一个bug,需要采取一些战略战术,不断细化对代码的阅读,知道发现问题为止。这种情况下,关键的思想是使用工具。我们要充分利用调试器、编译器给出的警告或者输出的符号代码、系统调用跟踪器、数据库的结构化查询语言的日志机制、包转储工具和windows的消息侦查程序,定位bug。编译程序时,加入调试支持,并使用调试器的栈跟踪机制、单步执行,以及数据和代码断电来缩小搜索的范围。

  代码演进:大多数,阅读代码不是修复一个bug而是为了增加新的功能,修改现存的bug、修改现存的特性、改编代码使之适应新的环境和需求,或者重构它们来增强代码的非功能性品质。关键的思想是对所分析代码的范围你有所选择;实际需要理解的代码只是系统全部实现的很小一部分。在实际工作中,通过选择性的了解与修改一两个文件,能够修改一个功能上百万行代码的系统。有选择地处理大型系统的各个主城部分时,应用采用:

  定位到感兴趣的代码;单独了解各个特定的部分;推断节选出的代码与其余代码的关系的策略。

  当系统中增加新工能时,首先的任务是找到实现类似特性的代码,将它作为待实现的功能的模板。当修改一个现存的特性时,首先,需要定位底层的代码。从特性得功能描述定位到代码的实现,可以按照字符串消息或者使用关键词来搜索代码。定位到特性后,就可以开始研究它的实现,设计新的特性或者增加的功能,以及定位可能影响到的区域--代码中与新代码发生交互的其他部分。在大多数情况下,只需要彻底了解这些代码就足够了。

  当代码的新环境和原来的环境完全不同时,则需要采用不同的方法。在此,最小化阅读代码工作的唯一希望就是,集中注意老代码和新环境之间的接口可能不同的方法。要专注于用户进行交互的代码,完全忽略系统中所有与算法有关的方面。

  代码演进变更中,一种完全不同的类型就是重构。由于某些开发工作采用极限编程和敏捷编程的方法,这些更改变得日益重要。重构对系统的更改,保持系统的静态外部行为不变而增强其非功能性品质。进行重构时,从一个能够正常工作的系统开始做起,希望确保结束时系统能够正常工作。一套恰当的测试用例可以帮助帮助此项约束。所以重构应该从编写测试用例着手。一种类型的重构专注于修复一种已知的问题点。在此,必须理解老的代码,设计新的实现,研究新的现实对相关的其他代码造成的影响并实现更改。

  另一种不同类型的重构是在软件系统上花费一些品质时间,主动寻找改进的代码。大规模的重构好像要比小规模的重构带来更多个好处。代码阅读寻找重构机会时,先从系统的架构开始,然后逐步细化,能够获得最大的效益。

posted @ 2017-10-29 17:17  IT瘦子  阅读(118)  评论(0编辑  收藏  举报