如何编写更少bug的程序? 尽可能避免常见的程序错误。
沟通设计先行 + 编写可复用代码 + 做得更多 + 做的更少 + 创造“编程心流”+ 严格的程序测试
一、 沟通设计先行
为避免需求或业务逻辑理解的不完全或偏差, 或者设计上存在较大的缺陷, 导致后期不必要的返工, 耗费宝贵的时间和精力, 编程开发遵循的首要准则是沟通设计先行: 与需求方、业务方和工作伙伴多多沟通交流, 进行设计评审, 能够有效地减少因为需求、业务理解偏差导致的逻辑错误和个人经验不足导致的设计错误。 编程与交流活动的适当调节, 也非常有益于延长程序员的寿命。
软件工程师应下决心下功夫锻炼和提升自己的表达能力与语言沟通素养。
二、 尽可能复用 。
编写和测试可复用代码, 尽可能复用经过严格测试的可靠公共库。 代码复用、组件复用、框架复用、 接口规范复用、设计模式复用、开发架构复用、 甚至应用模板复用; 复用使得可以从 40% , 甚至 60% 快速起步, 而不是从 0% 开始。工作量的压力小了, 很大程度上会消减因为进度压力导致的代码质量低下的问题。
创建一个应用工程模板, 将你在实际工作项目中所学习到的、所探索到的和所创造的重要知识、技术和经验聚合到这个系统, 让它成为你工作中的百宝箱。
三、 做的更多。
之前对参数校验、前置条件、 结果校验是不是做得不充分, 补上吧! 之前对错误和异常考虑是不是不够周全, 补上吧 ! 之前的单元测试、 接口测试是不是基本没怎么做, 补上吧!
哇! 也许你会说, 工作量增大了好多! 有时间去做这么多工作吗? 这就要应用到第三条法则: 做得更少。
四、 做得更少。
“做得更少”有三层含义:
(1) 尽可能自动化, 减少手工操作, 凡是操作不方便的、信息需要记忆的, 就要集成到程序中自动化完成, 避免不必要的脑力消耗; 比如查看日志排查问题, 《使用getopt解析命令行一例》, 就编写了一个脚本, 能够获取所有应用服务器的日志并按照内容关键字进行筛选展示, 而不需要手动逐个登陆应用服务器去查看日志了, 也不需要记忆日志地址, 做到最简化, 还学到了新技能。 脑力应该思考最重要的事情, 尤其是判断和决策相关;
(2) 要尽可能创造新的技术和方法, 将耗时繁琐的工作变成轻松的工作; 比如编写单元测试是比较“没技术含量”的事情, 能不能编写程序自动化生成可执行的测试用例呢? 这不就转换成“很有技术含量”的事情了。 《Jtester+unitils+testng:DAO单元测试文件模板自动生成》 展示了一个例子。
(3) Write Less and Do More. 《编程语言与可复用性》展示了 Python 是如何用一行代码来解决一个可复用性很强的小功能的。 日常编程中, 也应多思, 提炼出问题的核心概念及交互, 用更少的代码实现更多的功能。这是软件开发中最具创造力的地方。
所有繁琐的、没有“技术含量”的活, 都可以转化成非常需要创造力的、富有“技术含量”的挑战。 取决于做事思路的转换。
五、 创造“编程心流”。
“心流”是做一件事非常流畅自如且非常享受的状态。 当处于“心流”状态时:
(1) 感觉时间过得很快, 不知不觉;
(2) 全身心投入, 热情创造;
(3) 专注、娴熟自如地做事;
(4) 如果有些事情不懂, 会努力去学会它。
六、 严格的程序测试
严格的程序测试可以找出很多常见的编程错误, 应充分信任程序测试的作用, 充分而严格地测试程序。
通过严格的程序测试, 将使编写代码的信心大增, 能够更大胆地重构, 尝试新技术, 拓展新领域。