【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

编写代码本身不是一件很复杂的事情。按照一定的逻辑,配合一定的IDE工具,撸起袖子马上就可以干起来。但是不可否认,人与人开发代码的质量还是有差别的。有的同学虽然写代码写了很长时间,但是常常眉毛胡子一把抓,要结构没有结构,要逻辑没有逻辑,更谈不上扩展、测试和性能分析了。那么,个人怎么写出质量还可以的代码呢?

结构分析和设计

谈到写代码,大家都喜欢一边code一边思考。按照我个人的经验来说,这不是一种很好的方法。要写出质量还可以的code,必须在逻辑上是经受得起考验,无论是状态机还是异常情况的考虑上都必须是完备的。然而在写code的时候,你的精力常常是分散的,根本没有办法考虑清楚每一种情况。所以,在code之前还不如把数据结构拆开来,好好分析一下代码的逻辑和流程,至少做到手到、笔到才可以。相关的一些工作都可以在这段时间完成,
1. 设计清楚代码的流程和状态机
2. 将流程、图标用markdown标记出来
3. 分析清楚将来代码的部署环境

编译代码之前再好好阅读一遍

编写好code之后,很多同学都喜欢马上运行,恨不得马上就见到效果。但是,一步到位的情况是很少发生的。或多或少,你的代码会有这样那样的问题,与其在将来才发现这些问题,还不如从头到尾阅读几遍,自己讲给自己听。如果觉得不好意思,可以改成默念的形式,买一只小挂件放在电脑旁边对着它讲也可以。读个几遍之后,一般的编译错误都可以被你发现的,或者说逻辑十分简单的错误也是逃不了你的法眼的。做好了这一步,就可以开始编译调试了。

学会用pclint等代码检测工具检查你的code

一般的编译工具都会对不合理的code给出告警,但是这种告警是非常weak的。所以,我们还会使用第三方工具来检测代码中还有什么风险。windows上用的比较多的就是pclint,linux上用splint比较多。

学会单元测试

各个编程语言都有自己的编程框架,c有cunit,cpp有cpp unit,java有junit。编写单元测试的目的就是测试function对各种输入的响应情况,有没有异常的情况发生。随着测试用例,其实我们对code的信心也会越来越强,不然每一次发布软件的时候,都是胆战心惊的。单纯的黑盒测试是根本没有办法从coverage上面覆盖到所有情况的,所以除了dump功能的function之外,配套的单元测试是十分有必要的。

检测内存泄漏

对于一般的上层软件来说,打交道最多的就是内存,设备空间它也访问不了,中断也没法做,异常也没法处理。所有的资源都需要通过syscall向os申请才可以,这时候检测内存泄漏就十分必要了。一般的客户端程序对于内存泄漏可能看得没有那么重,但是server确实避免不了的,毕竟它是需要长时间运行的。好在有现成的工具可以帮助我们检测内存泄漏的相关情况,linux上用的比较多的就是valgrind。还不清楚的同学可以去好好试一试。

性能分析

按照我个人的经验,软件的性能分析其实是十分伤脑经的,但是也是有规律可循的。一般来说,对于app来说,花费时间最多的地方就是memory copy,lock,database, socket这几个方面。当然,如果这几个方面如果都做得还可以,不妨可以从业务本身的角度去进行分析和优化,这常常也会有不错的收获。好在现在有很多的工具可以帮助我们分析一下软件的瓶颈究竟在哪,windows下用的比较多的就是vtune,linux是gprof。

自动化集成测试工具

像jenkins这样的自动化集成测试工具在企业里面用的比较多。如果自己写的软件比较大,也可以用这种方法。如果只是几千行的小代码,不妨写一个bash脚本,把所有要做的动作用脚本串起来,效果也很不错。

不停重构

很多时候,代码是需要不停重构的,这时候只要按照上面的逻辑不停迭代就可以了,当然测试用例也开始发挥它的作用了。

总之,基本流程应该是这样的,

Created with Raphaël 2.1.0Startdesigncodestatic checkunit testdynamic testjenkinsEnd

随想录(高质量代码开发)相关推荐

  1. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  2. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  3. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

                 The reasonable man adapts himself to the world; The unreasonable one persists in trying ...

  4. 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

    阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的类型务必一致 建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法    ...

  5. 编写高质量代码改善C#程序的157个建议——建议148:不重复代码

    建议148:不重复代码 如果发现重复的代码,则意味着我们需要整顿一下,在继续前进. 重复的代码让我们的软件行为不一致.举例来说,如果存在两处相同的加密代码.结果在某一天,我们发现加密代码有个小Bug, ...

  6. 《编写高质量代码:改善c程序代码的125个建议》——第1章 数据,程序设计之根本建议1:认识ANSI C...

    本节书摘来自华章计算机<编写高质量代码:改善c程序代码的125个建议>一书中的第1章,建议1,作者:马 伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第1 ...

  7. 编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句

    建议104:用多态代替条件语句 假设要开发一个自动驾驶系统.在设计之初,此自动驾驶系统拥有一个驾驶系统命令的枚举类型: enum DriveCommand{Start,Stop} 当前该枚举存在两个命 ...

  8. java 151建议_编写高质量代码改善java程序的151个建议——导航开篇

    前言 系列文章: 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,惨不忍睹是吧.确实,人和代码一样都在成长,都在变好当中.有时候只是实现功能的编程,长 ...

  9. 编写高质量代码的50条黄金守则-Day 04(首选字符串插值)

    该文章由本人原创发布,最新版本现已迁移至:编写高质量代码的50条黄金守则-Day 04(首选字符串插值) | .Net中文网. 编写高质量代码的50条黄金守则-Day 04(首选字符串插值),本文由比 ...

最新文章

  1. inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五
  2. java多图片上传插件,Bootstrap中的fileinput 多图片上传及编辑功能
  3. java构建二叉树_java实现二叉树的构建以及3种遍历方法
  4. Javascript基础知识笔记一
  5. 如何使用dosbox运行程序——步骤详解
  6. vs2010 c语言乱码,从vs2010中复制带有中文字符的代码到office等时出现乱码的解决方案.doc...
  7. “拖延症”的良方——对于追求完美,自制力差,情绪化的人很受用。 【谨以此文共勉。】 来源: 胡野的日志
  8. 正规手游代理该怎么选?
  9. 快速跳转到行首/行尾 快捷键
  10. java导入Excel中数据查重的方法
  11. 《安富莱嵌入式周报》第285期:电子技术更新换代太快,我要躺平,Linux内核6.1已经并入RUST,一夜161个网站密码遭泄,Matlab精选课件,开源电子书
  12. pytorch载入部分预训练权重
  13. [柒穆雨] 2020平面设计的发展趋势
  14. 栈与队列(逆波兰式)
  15. 禁用和启用google翻译
  16. PS教程:合成复古人物风格海报的技巧
  17. [Nikon D80]月季
  18. Linux学习之socket编程(一)
  19. word插入图片,嵌入型,无效果
  20. HTML中地图根据数据变色,echarts中国地图根据数据对省份渲染不同的颜色

热门文章

  1. ZooKeeper 了解
  2. 12个必备的JavaScript装逼技巧
  3. Win10 OneDrive无法同步文件怎么办?一个命令搞定
  4. JAVA - 守护线程(Daemon Thread)
  5. 用HTML5 Canvas为网页添加动态波浪背景
  6. 读后有感 - UI设计师必知:线框图、原型和视觉稿
  7. Maven 项目关于 plexus-utils:jar的错误解决
  8. tornado基本使用一
  9. cmd 命令提示符常用操作
  10. SQL Server - SQL Server 2016新特性之 --- Query Store