关于提高代码质量的思考之提高代码健壮性

接着上期的拓展性之后,今天谈谈代码的健壮性。代码的健壮性又称鲁棒性,是高质量代码的一个重要指标。

有人分析了印度软件行业比中国好的一个原因:印度的一个老程序员,月代码量在一千行左右,这一千行代码,算法平实,但都是经过仔细推敲,实战检验的代码,不会轻易崩溃的代码。我们的程序员,一天就可以写出一千行代码,写的代码简短精干,算法非常有技巧性,但往往是不安全的,不完善的。印度人的程序被称作:傻壮。但程序就得这样!

那么如何写出一个代码简短精干,算法非常有技巧性,而又非常安全的代码呢?我逛了很多论坛,发现主要有如下几点:

1. 内存泄漏的检测

内存泄漏是C语言代码里面比较容易忽视而又非常难查找原因的问题。这里推荐一组C语言代码,感觉挺不错的----memwatch,将其放入我们的项目中一起编译就可以了。当我们执行编译后的程序时,就会在所在目录下生成memwatch.log日志文件,里面就是程序的内存使用情况的描述。举一栗子:(这是一段有内存泄漏的代码)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include"memwatch.h"
 4
 5 int main(int argc, char* argv[])
 6 {
 7         char*p2;
 8
 9         p2= (char*) malloc(sizeof(char) * 128);
10
11         return0;
12 }

执行编译命令:gcc-DMEMWATCH -DMEMWATCH_STDIO a.c memwatch.c

ps:要记得编译的时候定义宏MEMWATCH和MW_STDIO哦
执行测试程序:./a.out
查看日志文件:vim memwatch.log

输出结果如下:

=============MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============

Startedat Tue Nov 26 10:23:48 2013

Modes:__STDC__ 64-bit mwDWORD==(unsigned int)

mwROUNDALLOC==8sizeof(mwData)==56 mwDataSize==56

Stoppedat Tue Nov 26 10:23:48 2013

unfreed:<1> a.c(9), 128 bytes at 0x1fa8310 {FE FE FE FE FE FE FE FEFE FE FE FE FE FE FE FE ................}
Memoryusage statistics (global):
N)umberof allocations made: 1
L)argestmemory usage : 128
T)otalof all alloc() calls: 128
U)nfreedbytes totals : 128
MEMWATCHdetected 1 anomalies

从上面的输出可以看出,在a.c中第9行动态申请的128bytes没有释放掉,
如果正常编译的话gcca.c
调用valgrind./a.out 会显示

totalheap usage: 1 allocs, 0 frees, 128 bytes allocated

…

如果用gcc-DMEMWATCH a.c memwatch.c编译的话,再调用valgrind./a.out就会显示:

All heap blocks were freed – no leaks are possible

证明memwatch帮助我们把没有释放掉的空间释放掉了。  

2. 异常处理
    如果你写的代码里面有较多的输出输出,你就要考虑异常处理了。如果你需要你的代码更加的完善和健壮,完善的异常处理机制也是必要的,C语言中,有很多异常处理的方法,常用的有assert、errorno、exit等。这些百度就一堆了,我就不当一个搬运工了。有一个比较好的方式,就是自己重新定义assert函数。可以像这样:

void __assertex__(const char *file, unsigned int line, const char *function, const char *expr);

当然网上也是有很多方式的,这个也是需要根据自己的实际情况来修改这个函数的。可以参考百度哦。

3. 引入日志

最后,日志系统对一个健壮的系统来讲是必不可少的,这点毫无争议。当然对于一个小型系统,引入日志是一件非常有好处的事情,目前我的身边就有好多例子,由于客户修改了某些信息后出现问题,我们通过查看日志可以直接定位到用户在什么时间进行了如何的操作,能比较好的对出现的问题进行定位解决。日志也不是越复杂越好,需要根据实际情况确定自己的系统中需要怎样的日志,需要记录什么,或者说以后可能会需要哪些方面的需求。

每天进步一点点!

时间: 2024-10-12 07:56:56

关于提高代码质量的思考之提高代码健壮性的相关文章

团队代码中Bug太多怎么办?怎样稳步提高团队的代码质量

最近负责的Android APP项目,由于团队成员变动.界面改版导致代码大幅修改等原因,产品发布后屡屡出现BUG导致的程序崩溃. 经过对异常统计和代码走读,BUG主要集中在空指针引起的NullPointerException和RuntimeException异常,这也是Android项目中最容易导致崩溃的根源. 导致这些BUG的原因主要是: 1.对项目架构不熟悉,缺乏整体思考: 2.写代码逻辑不周密,思考不全面: 3.对代码的BUG和程序的稳定性重视不足: 4.项目较为复杂,多界面跳转.数据结构

(转)提高代码质量---one

1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao)了各自代码中这样或者那样的问题. 最近部门在组织bootcamp,正好我负责培训代码质量部分,在培训课程中让大家花了不少时间去讨论.改进.完善自己的代码.虽然刚毕业的同 学对于代码质量都很用心,但最终呈现出来的质量仍然没能达到“十分优秀”的程度. 究其原因,主要是不了解好的代码“应该”是什么样的.

如何提高代码质量(转)

原文:如何提高代码质量 1.软件产品质量 软件产品质量通常可以从以下六个方面去衡量(定义) : l         功能性(Functionality),即软件是否满足了客户业务要求: l         可用性(Usability),即衡量用户使用软件需要付出多大的努力: l         可靠性(Reliability),即软件是否能够一直处在一个稳定的状态上满足可用性: l         高效性(Efficiency),即衡量软件正常运行需要耗费多少物理资源: l         可维

【转载】三年0故障总结,提升代码质量的秘诀

该文章来自于阿里巴巴技术协会(ATA)精选文章. 个人经历 对我代码质量影响最大的是在一家外资企业,在这家公司我觉得有以下几个方面做的很不错. 团队编码风格统一 统一到什么程度? 不看代码作者,你很难区分代码是谁写的(在目前公司一些团队也能达到这个标准). 个人观点: 这样做有什么好处?团队中每个人阅读代码都很容易,减少很多沟通,维护成本( 代码阅读的次数远远大于变更的次数),并且心情非常愉悦.有人肯定觉得愉悦有点夸张,举个栗子: 有一些代码,如果不是由于与工作内容有关联,你是否有种这辈子都不情

三年0故障总结,提升代码质量的秘诀

个人经历 对我代码质量影响最大的是在一家外资企业,在这家公司我觉得有以下几个方面做的很不错. 团队编码风格统一 统一到什么程度? 不看代码作者,你很难区分代码是谁写的(在目前公司一些团队也能达到这个标准). 个人观点: 这样做有什么好处?团队中每个人阅读代码都很容易,减少很多沟通,维护成本( 代码阅读的次数远远大于变更的次数),并且心情非常愉悦.有人肯定觉得愉悦有点夸张,举个栗子: 有一些代码,如果不是由于与工作内容有关联,你是否有种这辈子都不情愿去接触它的感受.但也有一些代码,阅读下来一气呵成

从代码质量谈起

最近加入了一个临时的项目组,针对前期客户提出的需求在原有系统上做一些升级开发.说白了就是只能使用旧的技术在原有代码上增加功能,有的是需要开发新功能有的只是在原有基础上进行改进.刚开始,项目经理在和我谈需求的时候聊得轻描淡写,以为只是做一些简单的迭代开发,因此信心满满的答应下来.可直到拿到项目的源码才发现全然不是这么回事.项目逻辑混乱,代码杂论无章再加上客户需求不够具体致使整个项目组一度陷入阅读源码的泥潭. 2017年初阿里巴巴也发布了<Java开发手册>旨在帮助行业人员提高开发质量和效率.大大

提高php代码质量 36计

1.不要使用相对路径 常常会看到: ? 1 require_once('../../lib/some_class.php'); 该方法有很多缺点: 它首先查找指定的php包含路径, 然后查找当前目录. 因此会检查过多路径. 如果该脚本被另一目录的脚本包含, 它的基本目录变成了另一脚本所在的目录. 另一问题, 当定时任务运行该脚本, 它的上级目录可能就不是工作目录了. 因此最佳选择是使用绝对路径: ? 1 2 3 4 define('ROOT' , '/var/www/project/'); re

如何提高C#代码质量

本文将<Effective C# Second Edition>一书中适用于 Unity 游戏引擎里使用 C# 的经验之谈进行了提炼,总结成为21条(一开始总结的是22条,后来发现第22条也是.NET的特性,Unity版本的mono并没有实现,所以严格意义上来说是21条)准则,供各位快速地掌握这本书的知识梗概,在 Unity 中写出更高质量的 C# 代码. <Effective C# Second Edition>一书原本有50条原则,但这50条原则是针对C#语言本身以及.NET来

提高代码质量:如何编写函数

阅读目录 命名 函数参数 编写函数体 总结 函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的.写好一个函数是提高程序代码质量最关键的一步.本文就函数的编写,从函数命名,代码分布,技巧等方面入手,谈谈如何写好一个可读性高.易维护,易测试的函数. 回到顶部 命名 首先从命名说起,命名是提高可读性的第一步.如何为变量和函数命名一直是开发者心中的痛点之一,对于母语非英语的我们来说,更是难上加难.下面我来说说如何为函数命名的一些想法和感受: 采用统一的命名规则 在谈及如何为函数取一