如何提高代码质量
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、提高编码质量的重要性:
代码是写给别人看,给别人用的。
一要考虑代码移交给别人维护;二是要考虑代码的各模块给别人复用。
二、执行的质量标准:
可读性、可维护性、易用性、可扩展性、可复用性、鲁棒性
1、可读性、可维护性
初级要求:别人拿到你的代码,没有阅读障碍,不需要向你请教也能看懂。
高级要求:别人可以花很少的时间看懂。
1)注释
a、文件注释:这个文件是干嘛的
b、模块注释:这个模块完成什么功能。对于嵌入式中资源的驱动,尽量描绘出
资源的信息。譬如flash驱动,应该描述出基地址、长度、扇区数、扇区的
基地址等。
c、逻辑注释:这个复杂的逻辑是如何实现的
d、函数注释:这个函数完成什么功能,该怎么用
e、功能块注释:这个函数内的这段话,要实现什么功能
f、变量注释:这个变量的作用
g、其它注释:宏定义、结构体、枚举、联合体等
2)版式
致力于让阅读更轻松
a、适量的使用空行,隔开不同的功能块
b、长行拆分
c、对齐
d、一行定义一个变量
e、尽量使用括号、花括号
f、变量的初始化
g、函数不要太长,长了之后考虑是否可以拆分
3)命名规则(风格)
从名字间获取最大量的信息,降低阅读障碍,提高阅读速度。
a、命名风格统一
b、顾名思义,名字应能准确反映出意思
c、命名要能明确区分出不同的类别:函数、宏、结构体、常量、全局变量、静
态变量、常量。
d、匈牙利命名法:强调变量的类型。
e、文件命名风格也要统一
4)模块化、层次清楚
阅读时,首先能总览全局,知道都有什么;对任何关注的局部,可以直接展开。
a、希望它是一棵树,不是一张蜘蛛网。
低耦合。
b、一棵面向对象的树
合理抽象,提供有效的接口
c、绘制逻辑图,用逻辑图来驱动
d、列举状态序列,用状态序列来驱动
2、易用性
针对程序、代码内部,模块提供的接口,要便于别的模块使用。
1)模块方法
a、将底层和应用服务剥离
b、明确的初始化方法
c、属性的抽象和描述
d、行为方法的抽象
2)抽象方法
a、站在自身特性的角度抽象
b、站在使用者(别的模块)的角度抽象
c、方法尽量越少越好
read、write、control
set、get
3)详细明确的注释
替代你来解说该模块。
3、可扩展性
便于后期进行各种方式的裁剪和增添。
1)模块抽象尽可能准确
2)低耦合
3)接口设计要尽量简明、通用
4)接口设计时,考虑扩展需求
4、可复用性、通用性
模块便于在别的项目中移植、复用,复用时不需要修改,或者所需要的修改很少。
1)模块抽象的准确性
2)模块抽象时考虑继承、拆分
3)模块自上而下分层
4)整体架构明晰
5、鲁棒性
代码在各种异常情况下稳定运行的能力
1)强调函数入口参数检查
a、空指针
b、数组越界
c、其它合法性检查
d、非法时的assert和异常输出
2)对模块的数据访问尽量用接口
便于添加合法性检查
3)注意变量类型的合理性
4)低耦合,模块化,架构清晰
5)逻辑图、状态序列图
6)对能统一的数值,尽量用枚举或define的方式
7)对执行相同功能的代码块,尽量封装成统一的函数或宏代码。
三、质量标准的实现
采取一定的手段,帮助项目组、研发人员逐步提高代码质量
1、提高代码质量的意识
实现需求功能只是最低级要求
2、详细设计及评审
a、强调模块、接口的设计
b、对输出的详细设计文档,按照质量要求进行评审
c、如果来不及输出详细设计文档,可以对逻辑图、状态序列图、模块图、头文件
进行评审。
3、代码评审
a、强调编码规范的遵守
b、注重可读性