关键词:
一. 编码基本功
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内核
go语言入门篇-golang之文本编码处理
Golang之文本编码处理 查看详情
第二章python入门(代码片段)
...需要的环境(mac/windows):解释器:py2\py3开发工具:pycharm2.2编码2.2.1编码基础常见编码:ascii(英语)unicode(内存中使用的编码,可以支持世界上任何语言符号。又称:万国码。由联合国组织定义)cse2(以前常用的编码形式)cse4(常用的编... 查看详情
入门笔记小结
...。3.<metacharset="UTF-8"> "UTF-8"是unicode系列中的一个编码。 采用unicode字符编码,一种编码就可以表示所有语言。4.设置字体颜色时,链接的颜色没有改 查看详情
word入门
...用(十六进制数)+alt+x在word中快速打出来常用UTF-8十六位编码符号编码符号编码α03b1β03b2≤2264≥2265 2.快速加上下标1.加上标:使用Ctrl+Shift+=组 查看详情
数制与编码--绪论(基础入门知识)
1.模拟量:连续变化的物理量2.数字量:模拟→数字量(A/D)3.数字系统:使用数字量来传递、加工、处理信息的实际工程系统4.数字系统的任务:(1)将现实世界的信息转换成数字网络可以理解的二进制语言(2)仅用0、1完成所要求的... 查看详情
rkmpp库快速上手--mpp编码入门(代码片段)
首先,了解MPP编码之前,先了解一下MPP的MPI接口。1、MPI接口结构 MPP设计的MPI接口,下面的图都来自于官方参考文档: MppMem:C库malloc内存的封装;MppBuffer:dmabuf内存的封装;... 查看详情
servlet之中文乱码问题入门版
...1postrequest.setCharacterEncoding("utf-8");解决post中的//utf-8是项目编码,要跟项目编码格式统一,//当然也能够选用其它编码。1.2响应response.setCharacterEncoding("utf-8");response.setContentType 查看详情
java入门到精通-第57讲-sqlserver数据类型
[关键字]用[]包起来SQLserver数据类型:非unicode编码:在计算机世界,每一个字符都有编码的东西unicode码的特点:用两个字节表示一个字符(可以是英文字符,汉字)。big5支持繁体;iso-8859-1编码:支持欧洲文字编码;gb2312支持中... 查看详情
20190221beautifulsoup入门(代码片段)
...从网页抓取数据。BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,BeautifulSoup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始... 查看详情
requests库入门
...ponse.text页面的字符串形式 Response.encodingheader中定义的编码(若header中未定义则会出问题) Response.apparent_encoding根据页面分析得到的编码 Response.co 查看详情
(初学者编码器。入门级)HTML点击游戏上的保存/加载功能不起作用
】(初学者编码器。入门级)HTML点击游戏上的保存/加载功能不起作用【英文标题】:(BeginnerCoder.EntryEntryLevel)Save/LoadfunctiononHTMLclickergamenotworking【发布时间】:2022-01-1709:58:34【问题描述】:初学者从论坛网站和youtube学习,请多多... 查看详情
ffmpeg入门篇
...转码在转码过程中,ffmpeg调用demuxers将inputs分解成已编码数据包,decoder将已编码数据包解码成非压缩的帧数据,接着再经过一系列filter处理,处理完由encoder进行压缩编码,最后再经过muxer进行合成输出output值... 查看详情
tensorflow实现one-hot编码tensorflow2入门手册(代码片段)
🔗运行环境:python3🚩作者:K同学啊🥇精选专栏:《深度学习100例》🔥推荐专栏:《新手入门深度学习》📚选自专栏:《Matplotlib教程》🧿优秀专栏:《Python入门100题》代码实现... 查看详情
python从入门到精通python的编码规范,标识符知多少?(代码片段)
...是Pyhon系列文章的第三篇,本文主要介绍Python程序的编码规范。干货满满,建议收藏,需要用到时常看看。小伙伴们如有问题及需要,欢迎踊跃留言哦~~~。文章目录前言注释缩进规则编码规范标识符命令规范标识... 查看详情
深度学习入门(六十四)循环神经网络——编码器-解码器架构(代码片段)
深度学习入门(六十四)循环神经网络——编码器-解码器架构前言循环神经网络——编码器-解码器架构课件重新考察CNN重新考察RNN编码器-解码器架构总结教材1编码器2解码器3合并编码器和解码器4训练模型5小结参考文献... 查看详情
python入门系列之字符编码
1.字符编码**【**所谓unicode】unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是它只是一种内部表示,不能直接保存。所以存储时需要规定一种存... 查看详情
python零基础到入门python预备知识必备篇——python基本编码规范(代码片段)
目录📢前言👑Python编码规范🏳️🌈声明编码格式🏳️🌈缩进规则🏳️🌈注释部分🏳️🌈空格🏳️🌈空行使用🏳️🌈模块导入部分🏳️🌈命名 查看详情
ffmpeg入门篇
...转码在转码过程中,ffmpeg调用demuxers将inputs分解成已编码数据包,decoder将已编码数据包解码成非压缩的帧数据,接着再经过一系列filter处理,处理完由encoder进行压缩编码,最后再经过muxer进行合成输出output值... 查看详情