《Code Complete》ch.24 重构】的更多相关文章

WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件项目,应该首先以系统化的方法进行需求开发,定义一份严谨的列表来描述程序的功能.设计完全遵循需求,并且完成的相当仔细,这样就让程序员的代码编写工作从头到尾直线型地工作.表明绝大多数代码首次编写后就已完美,测试通过即可被抛诸脑后.代码被修改的惟一时机发生在交付使用后在新版本进行功能的添加 现实:在初始开…
最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多少,一定要在某个函数前call之类的限制,而应该在assert等地方加入这些判断,让代码去做限制,而不是注释. 代码阅读的次数要比写的次数多得多 类的成员变量表征类拥有怎样一个属性 类的继承表征类还可以有另一个特殊的版本 类用到的其他类的次数叫做扇入(fan in),越少越好 要在构造函数中对所有的…
重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete 的收获吧. 记得第一次读code complete 还是刚毕业的时候,身边好多朋友极力向我推荐此书,于是我就买了一本读起来,可能是当时功力不够,读起来总是觉得没啥味道,而且极为枯燥,总觉得不如<深入浅出MFC>,<CLR Var C#>,<Windows Internals&g…
Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为是很正确的.这本书语言生动,擅于用隐喻说明深刻的编程原理,虽然并不是写给新手看的,但作为一个新手,我依然从中学到了很多.    2.这本书有很多一针见血的论述:设计是一个启发式过程:编程的最大难题是解决其复杂性:要深入一种语言编程而不是在一种语言上编程,等等.    3.实践是这本书的核心,它提供了…
WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 确定错误原因:二分法 同他人讨论问题 忏悔式调试 抛开问题,休息一下 修正问题 动手之前先要理解问题 理解程序本身,而不仅仅是问题 验证对错误的分析 放松一下 治本,而不是治标 修改代码时一定要有正确的理由:不要随机地修改代码,在没有理解代码时对她做的改动越大,你对她能正确工作的信息就越低 检查自…
WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编码的变量值.重复出现需要统一的代码模式——这些是测试所发现不了的 让人们知道他们的代码将要被复查,这样他们会小心谨慎检查自己的工作 提供技术交流平台,提升开发者水平 HOW? 结对编程 用编码规范来支撑编程 不要让结对编程变成旁观 不要强迫在简单的问题上使用结对编程 有规律地对结对人员和分配的工作任…
WHAT & WHY ? 软件质量的特性 外在特性 正确性(Correctness) 可用性(Usability) 效率(Efficiency) 可靠性(Reliability) 完整性(Integrity) 适应性(Adaptability) 精确性(Accuracy) 健壮性(Robustness) 内在特性 可维护性(Maintainability) 灵活性(Flexibility) 可移植性(Portability) 可重用性(Reusability) 可读性(Readability)…
WHAT? 反复执行的代码片段(你是第一天学编程吗) WHY? 知道如何使用及何时使用每一种循环是创建高质量软件的一个决定性因素 HOW? 检测位于循环开始/循环结尾 带退出的循环 进入循环 只从一个位置进入循环 把初始化代码紧放在循环欠扁前边 用while(true)处理无限循环 在适当的情况下多使用for循环 在while循环更适用的时候,不要用for循环 处理循环体 用{}将循环体括出 避免空循环 把循环内务操作放在循环开始or结尾 一个循环只做一件事 退出循环 确认循环可以终止——在脑海…
WHAT? 条件语句指if.else.case.switch,循环语句指for.while WHY? 不用条件语句你写得出代码吗? HOW? if-then 正常情况放在异常情况之前 执行频率高的情况位于执行频率低的频率之前 switch-case default语句应该用于处理真正的默认情况 使用default语句用于检测错误和意料之外的状况 当代码需要跨越case时,用注释说明…
WHAT? 最简单的控制流:即按照先后顺序放置语句与语句块 WHY? 尽管组织直线型的代码是一个简单的任务,但代码结构上的一些微妙之处还是会对代码质量.正确性.可读性和可维护性带来影响 HOW? 必须有明确顺序的语句 使依赖关系变得非常明显 使子程序名能突显依赖关系 利用子程序参数表明依赖关系 用注释说明 用断言/错误处理代码来检查依赖关系 顺序无关的语句 使代码易于自上而下的阅读,将相关的代码组织到一起 // bad MarketingData marketingData; SalesData…