CC++代码检视实例相关文章链接如下:微软过桥问题与测试人员素养等价类分法新解测试用例设计中的NP难题90,程序员写不出无BUG的二分查找程序,C/C++,也许有些读者已经急切地想找一些代码来试验一下看能否通过上面的内容来提高自己的检视能力。下面就讲几个代码检视的实例,请读者在看这些实例时先不要看后面的分析,自己先拿张纸边看代码边把自己能够发现的问题记录下来,然后再和后面的分析进行比较。如果能够发现后现分析中没有提及的问题,说明已经将评审检视基本功学得非常好了。:/**写日志函数,实现将日志信息写入日志文件中的功能***@paramchar*pszLogFile-日志文件名***@paramchar*pszLogMsg-要写入的日志消息字符串***@returnint-失败返回-1,成功返回0*/intWriteLog(char*pszLogFile,char*pszLogMsg){FILE*fp;fp=fopen(pszLogFile,w);fseek(fp,0,SEEK_END);if(fwrite(pszLogMsg,sizeof(char),strlen(pszLogMsg),fp)!=strlen(pszLogMsg)){return-1;}fclose(fp);return0;}下面按照检视要点来对这个函数进行检视:n从输入校验方面的检视要点来看的话,输入参数没有校验。即没有判断输入的文件名是否合法或是否为空。文件名中有许多特殊字符是不能使用的,会导致打开文件失败。输入的日志消息字符串是否为空也没有判断。n从函数方面的检视要点可以发现打开文件函数的返回值没有进行校验,即没有判断打开文件是否成功,n从资源释放方面的检视要点来看,打开的文件在return-1;这行之前没有被关闭。n再从系统调用方面的检视要点来看,调用fopen使用不正确的参数,实际上第二个参数不能使用”w”,”w”参数会将文件内容清空掉,以前写的信息都会丢失,应该改成“a+b”。改掉这个参数后,fseek()那个调用就可以不要删除掉了。n除了上面的检视要点外,还需要使用元素分析法来进行检查,从日志文件这个元素进行分析,两条日志信息间应该有分隔符分开的,因此需要对pszLogMsg判断是否有分隔符,如果没有的话,程序中应该给它补上分隔符。所以总共可以得到上面写日志函数的几个主要问题如下:1)输入参数pszLogFile,pszLogMsg没有进行校验2)打开文件后没有判断是否打开成功3)fopen()第2个参数使用不正确,应该使用“a+b”作为参数4)return-1;前没有将打开的文件关闭掉5):/**整数求和函数,计算0到指定正整数(包括指定整数)间所有整数的和***@paramintnum-指定的整数求和的上界***@returnint-求得的整数之和*/intSum(intnum){inti,sum;for(i=0;inum;i++){sum+=i;}returnsum;}这个程序看起来很简单,寥寥两三行程序,初看起来不应该有多少问题,还是检视一下看看它到底存在多少问题。n先分析以上代码中的变量初始化问题,显然sum变量没有被初始化n进行一致性检查发现函数是求正整数之和,函数参数应该定义成unsignedint类型才更确切n根据计算方面的检视要点进行分析,发现当num较大时可能会造成整数上限溢出,要解决这个溢出问题,有三种方法,一是将参数的类型改成unsignedshort或者将返回值改成64位整数类型,或者在程序中对输入参数进行上限校验,校验失败返回-1表示失败。n进行循环边界检查发现inum应该为i=num因此检视出来的主要问题如下:1)变量sum没有初始化2)函数参数类型定义不准确3)当参数num的值大到一定程度时会造成整数上限溢出4)循环中的条件inum写错,应为i=,请检视出其中的问题。/**删除字符串最右边的特殊字符(包括空格、回车符、换行符、TAB字符)直到遇到非特殊字符为止源字符串不能修改,删除特殊字符后的字符串放到返回值中***@paramchar*str-源字符串指针***@returnchar*-返回删除特殊字符后的字符串,失败或者删除特殊字符后字符串内容为空时返回NULL;*/char*StrTrimRight(char*str){intlen;char*psz;if(str!=NULL){returnNULL;}len=strlen(str);psz=str+len;while(*ps
CC++代码检视实例 来自淘豆网m.daumloan.com转载请标明出处.