编码入门

Posted ZhangShuo1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编码入门相关的知识,希望对你有一定的参考价值。

一. 编码基本功

1. 前言

根据实践数据可以看出,调试时间占据了我们开发时间中的最大部分,普遍能到60%。如果我们有方法大幅消减调试阶段的时间,效率自然能够大幅提升。

通过什么手段能够做到?

  • 写好代码,以模块化为中心指导思想,尽量把代码写清晰,写健壮,少出一些BUG;
  • 做好单测,以自动化为中心指导思想,尽量早,尽量低代价,尽量全面,验证所有逻辑,把BUG消灭于萌芽之中;

2. 6步法

这6个步骤,围绕『单测』这个核心,目的是提高单测的效率、效果,让单测可以成为一道『拦河大坝』,把BUG阻断在开发阶段,避免后续『大海捞针』,在大范围代码中定位BUG。
  • 设计改善:对设计产出的API进行优化,以及对模块内部结构进行微调,做好分层和解耦。
    目的是提升代码的模块性,让代码更容易理解,更容易调试,测试,修改,复用,扩展。
    本步骤输出API函数的原型定义。
  • 编写单测的用例&代码:在编写函数实现代码前,先编写函数的单元测试代码,利用单元测试来调试函数,降低函数调试的难度和工作量。本步骤输出API函数的单测代码。
  • 函数代码实现:编写函数的实现代码,重点关注代码的易理解性,健壮性。利用前一步写好的单测案例进行逐函数调试。本步骤输出API函数的实现代码,完成代码调试。
  • 覆盖率分析:在函数编写实现,并利用单测调试完毕后,收集覆盖率数据并分析,根据覆盖率数据衡量单测质量,增补新的单测用例。
  • valgrind检测:对于C/C++,单元测试无法发现内存泄漏、溢出、线程类问题。可以利用valgrind对单测运行过程进行检查,排除这几类问题。
  • codereview:对于设计类问题,以及只在特定异常场景发生的错误,单测、valgrind检测都无法完全消除。可以通过代码review,人工排除这一类的问题。

3. 设计中注意事项

  • 在函数中要检查参数的有效性(可以使用assert),调用函数要检查函数返回值
  • memcpy不能对重叠区域进行拷贝,memmove可以
  • 释放过的指针要置为null
  • 局部变量要初始化
  • malloc分配内存要初始化才能使用
  • 使用strtol替换atoi

二. 优秀项目

  • lua,lua是一门简单快速的脚本语言。lua和C扩展模块之间的参数传递非常独特,是基于栈模型的。这让C代码操作LUA函数参数变得简单而快速。另外LUA语言的API设计非常简洁,头文件结构堪称典范,是学习怎么设计模块接口的好素材。
  • git,git是linus在linux外对软件世界的另一卓越贡献。git的第一个版本是linus的个人作品,推荐从这个版本的源码开始阅读。
  • cjson
  • libevent
  • sqlite3
  • cmockery
  • linux内核

以上是关于编码入门的主要内容,如果未能解决你的问题,请参考以下文章

编码入门

音视频入门——H.264编码(宏块+片+帧)浅析

字符编码入门

深度学习入门(六十四)循环神经网络——编码器-解码器架构

Python入门系列之字符编码

(深度学习快速入门)自编码器及其变体(关键词:自编码器堆叠降噪变分AESAESDAEVAE)