今天开始读
Michael
C. Feathers
的《
Working
effective with legacy code》。准备写一些读书笔记,主要是为了加强自己的理解,同时也是为了将来的复习。
修改代码是每个程序员都干过的事情,无论是过去、现在还是将来。有时候是修改自己编写的代码,有时候是修改别人编写的代码。可以说,修改代码是程序员工作中很重要的一部分。
简单来说,修改代码的原因主要有以下几种:
-
修改
Bug
-
添加新的特性
-
改善设计
-
优化资源的使用
修改
Bug和添加新的功能就不用说了,估计每个程序员都做过。通常修改
Bug和添加新的功能都会改变现有的程序的行为。
改善设计是另外一种软件变动,我们希望改变软件的结构以增加可维护性,通常我们不希望改变现有程序的行为。如果在改变的过程中,程序的行为发生了变化,我们会称之为
bug。改善设计而不改变行为的变化我们也称之为重构。
优化和重构很相似,但是目的不同。优化的目的是改变程序使用资源的情况,通常是时间和内存。
总的来说,这四种原因的比较如下:
|
添加特性
|
修改
bug
|
改善设计
|
优化
|
结构
|
改变
|
改变
|
改变
|
--
|
功能
|
改变
|
改变
|
--
|
--
|
资源使用
|
--
|
--
|
--
|
改变
|
|
|
|
|
|
如果我们继续细化,把功能的改变细分为添加新的功能和改变原有的功能(包括删除原有的功能),那么情况如下
|
添加特性
|
修改
bug
|
改善设计
|
优化
|
结构
|
改变
|
改变
|
改变
|
--
|
新功能
|
改变
|
--
|
--
|
--
|
原有的功能
|
--
|
改变
|
--
|
--
|
资源使用
|
--
|
--
|
--
|
改变
|
在添加新特性、改善设计和优化的时候,我们都希望保持原有的功能。就算是修改
bug的时候,我们会改变一些原有的功能,但是我们同样希望保持其他的原有的功能。因此,对于以上四种修改代码的原因,我们都是希望改变一些东西,同时保持全部或者大部分的原有功能不变。
那么这个对于程序员来说意味着什么呢?意味着程序员不仅仅要保证修改的一部分修改正确了,同时要保证其他的部分没有变化。不幸的是,要保证其他的部分没有变化不仅仅是不去碰那一部分代码就可以了。更加不幸的是,当我们做修改的时候,通常我们不知道到底有哪些其他的部分是可以发生变化的。(就算是自己写的代码,也很难完全想清楚,更别说是其他人写的代码)。
分享到:
相关推荐
深入剖析修改遗留代码的各种方法和策略,从理解遗留代码、为其编码测试、重构及增加特性等方面给出大量实用建议,是所有程序开发人员必读之作。 理解修改软件的机制:添加特性、修正缺陷、改进设计、优化性能把...
Working Effectively With Legacy Code
真正的修改代码艺术(英文版), 保证能看.
☆ 说明如下:☆ 《修改代码的艺术》 《Working Effectively with Legacy Code》
In this book, Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases. This book draws on material Michael created for his renowned ...
Working Effectively with Legacy Code(修改代码的艺术 英文原版)
修改代码是每一位软件开发人员的日常工作,开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基...
修改代码的艺术Working Effectively With Legacy Code
working effectively with legacy code
working.effectively.with.legacy.code.pdf Table of Contents Robert C. Martin Series 1 Foreword 1Preface 2.Acknowledgments 3.Introduction 5 How to Use This Book5 Part I: The Mechanics of Change 6 ...
修改代码的集大成之作. Amazon全五星图书.. 适用于各种语言或平台... 修改代码是每一位软件开发人员的日常工作。开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化...
中文文字版,重构代码的好书,比较有名,就不再多做介绍。
10-2_legacy_vista32-64_dd_ccc.exe ati 690 x1200 win7/win8/win8.1/win10/vista x64显卡驱动
离线安装包,亲测可用
统信系统UOS资源包389-ds-base-legacy-tools-dbgsym_1.4.0.21-1 资源列表: 389-ds-base-legacy-tools-dbgsym_1.4.0.21-1_mips64el 389-ds-base-legacy-tools-dbgsym_1.4.0.21-1_i386.deb 389-ds-base-legacy-tools-...
有效地使用遗留代码 我们为什么要改变软件? 添加功能 - 添加一些行为,保持现有行为不变 修复错误 - 改变一些行为,保持其他行为不变 改进设计 - 更改代码结构,保持现有行为不变 优化资源使用 - 更改代码以提高...
赠送jar包:browsermob-legacy-2.1.5.jar; 赠送原API文档:browsermob-legacy-2.1.5-javadoc.jar; 赠送源代码:browsermob-legacy-2.1.5-sources.jar; 赠送Maven依赖信息文件:browsermob-legacy-2.1.5.pom; ...
赠送jar包:browsermob-legacy-2.1.5.jar; 赠送原API文档:browsermob-legacy-2.1.5-javadoc.jar; 赠送源代码:browsermob-legacy-2.1.5-sources.jar; 赠送Maven依赖信息文件:browsermob-legacy-2.1.5.pom; ...
Summary As a developer, you may inherit projects built on existing codebases with design patterns, usage assumptions, infrastructure, and tooling from another time ...Chapter 10 Stop writing legacy code!