随想录(高质量代码开发)
来源:互联网 发布:会务软件 编辑:程序博客网 时间:2024/05/17 04:47
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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脚本,把所有要做的动作用脚本串起来,效果也很不错。
不停重构
很多时候,代码是需要不停重构的,这时候只要按照上面的逻辑不停迭代就可以了,当然测试用例也开始发挥它的作用了。
总之,基本流程应该是这样的,
- 随想录(高质量代码开发)
- 代码质量随想录(一):可读是王道
- 代码质量随想录(二):必也正名乎
- 代码质量随想录(三):名字好,误会少
- 随想录(提高代码质量的几个工具)
- 随想录(提高代码质量的几个工具)
- 代码质量随想录(四):排版,不只是为了漂亮
- 代码质量随想录(五):注得多不如注得巧
- 随想录(怎么阅读代码)
- 随想录(在实践中学习kernel代码)
- 随想录(在实践中学习kernel代码)
- 随想录(在实践中学习kernel代码)
- 随想录(在实践中学习kernel代码)
- 随想录(编写简单资源管理代码)
- 随想录(学习wrk的代码)
- 随想录(内存屏障示例代码)
- 随想录(webbench压力测试代码)
- 随想录(用python开发网站)
- 【C/C++】运算符问题
- 作业《IOS_C语言》结构体、结构体数组
- 破解手机"私密相册"app的密码 wpjpg格式图片
- PHP namespace的定义
- 文字编码(文件IO流 )
- 随想录(高质量代码开发)
- Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
- leetcode 223: Rectangle Area
- 安装redis
- Linux系统中断处理编程
- 数据库
- 【C/C++】指针基本问题
- CentOS minimal 网络配置
- epoll 模型