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

编写更少bug的程序的六条准则的更多相关文章

  1. Java编写高质量代码改善程序的151个建议

    第一章  Java开发中通用的方法和准则 建议1:不要在常量和变量中出现易混淆的字母: (i.l.1:o.0等). 建议2:莫让常量蜕变成变量: (代码运行工程中不要改变常量值). 建议3:三元操作符 ...

  2. redux-amrc:用更少的代码发起异步 action

    很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...

  3. 编写更少量的代码:使用apache commons工具类库

    Commons-configuration   Commons-FileUpload   Commons DbUtils   Commons BeanUtils  Commons CLI  Commo ...

  4. 编写出色的GNU/Linux程序

    http://advancedlinuxprogramming.com提供了本书电子版的免费下载. 1 与执行环境交互 关于参数 C语言程序的main()函数使用两个参数和执行环境交互--(int)a ...

  5. VC++编写简单串口上位机程序

    VC++编写简单串口上位机程序   转载: http://blog.sina.com.cn/s/articlelist_1809084904_0_1.html VC++编写简单串口上位机程序 串口通信 ...

  6. 内核futex的BUG导致程序hang死问题排查

    https://mp.weixin.qq.com/s/sGS-Kw18sDnGEMfQrbPbVw 内核futex的BUG导致程序hang死问题排查 原创: 王领先 58架构师 今天   近日,Had ...

  7. 编写一个简单的C++程序

    编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...

  8. 使用PyQt来编写第一个Python GUI程序

    原文:使用PyQt来编写第一个Python GUI程序 本文由 伯乐在线 - Lane 翻译,Daetalus 校稿.未经许可,禁止转载!英文出处:pythonforengineers.com.欢迎加 ...

  9. 如何编写更好的SQL查询:终极指南-第一部分

    结构化查询语言(SQL)是数据挖掘分析行业不可或缺的一项技能,总的来说,学习这个技能是比较容易的.对于SQL来说,编写查询语句只是第一步,确保查询语句高效并且适合于你的数据库操作工作,才是最重要的.这 ...

随机推荐

  1. sell -- 解码16进制unicode

    1. //System.out.println("decodeUnicode:" + decodeUnicode("0049"));//I public sta ...

  2. AD834+表面声波滤波器调试小结

    AD834:带宽较宽,300M无压力,但是输出幅度小,当输入2VPPX2VPP的时候最大输出400mVPP.一个特别要注意的地方是输入走线尽量短,敷铜间距至少满足3倍线宽,不然隔直之后还会耦合信号进去 ...

  3. APICloud请你看英特尔智能硬件大赛决赛直播

    英特尔智能硬件大赛由英特尔硬享公社(CCE)发起,联合了全国各地50余家产业链优秀合作伙伴,旨在集合全国硬创资源,携手寻找中国最具代表性的硬件创业项目,并通过技术支持.资源对接.产品推广等方式助力项目 ...

  4. mongoose的promise(转发)

    Switching out callbacks with promises in Mongoose Published on July 28, 2015 mongo node mongoose pro ...

  5. 奥威Power-BI V11——凤凰涅槃,重磅来袭

    时隔一年,奥威Power-BI重磅再推新版,在之前V10 WEB可视化前端分析工具基础上,更加注重用户体验这一块.V11站在用户的角度,以用户的视野去设计研发新版本,最终在前端框架的优化.移动设备的体 ...

  6. Power-BI 仪表盘实现动态预警

    BI系统中仪表盘“序列”中的“预警”属性可以手工填入固定的值,也可从数据集里取值设定预警范围 ,以实现动态预警.其中的“范围”属性手工输入固定值应该为百分比(0-1),而在下拉选择绑定列为值是为数值. ...

  7. CentOS 6.6 yum 搭建LAMP环境

    CentOS 查看操作系统版本 [root@oa ~]# cat /etc/redhat-releaseCentOS release 6.6 (Final) 参考linux centos yum安装L ...

  8. [GeoServer]Openlayers简单调用

    Openlayers Demo: <html> <head> <title>OpenLayers Example</title> <script ...

  9. SQL Update实现使用一个表的数据更新另一张表

    表结构 功能 SQL Serevr Access 表结构

  10. javaee学习之servlet

    一.tomcat相关知识 tomecat虚拟主机与虚拟路径 1.tomcat的应用默认放在webapps目录下面,可以将其放在其他目录分区,让tomcat进行管理吗? 答:当然可以.方法:配置虚拟目录 ...