国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
隨想錄(做自己代碼的測試工程師)

from http://blog.csdn.net/feixiaoxing/article/details/40480189

  聯(lián)系信箱:feixiaoxing @163.com 


    很多工程師都有一個(gè)不好的習(xí)慣,因?yàn)榇蠖鄶?shù)it工程師都喜歡寫代碼,但是不喜歡測試代碼。在他們眼里,把功能做出來是一件很牛逼的事情,而軟件測試則是一件低級、價(jià)值量不高的事情。事實(shí)上是否真的如此呢,恐怕未必。姑且不談你寫的這份代碼是否真的會(huì)給用戶或者消費(fèi)者帶來價(jià)值,但是一份極其不穩(wěn)定甚至?xí)r常崩潰的軟件,肯定不會(huì)帶來什么好感,這也就意味著公司投資你作了這個(gè)勞動(dòng)很可能是個(gè)無用功。這個(gè)問題其實(shí)不光小公司有,大公司也是如此。


(1)很多朋友沒有代碼質(zhì)量意識。一份軟件的價(jià)值,一方面體現(xiàn)在是否可以滿足客戶的需求,另一方面也體現(xiàn)在它是否可以穩(wěn)定長久地運(yùn)行。代碼運(yùn)行的時(shí)間越長、越穩(wěn)定和健壯,這樣才能最大程度保留代碼的價(jià)值。


(2)測試工程師遠(yuǎn)沒有開發(fā)工程師了解代碼的健康程度。很多公司的測試工程師只是按照黑盒的方法對軟件進(jìn)行測試,這些測試的內(nèi)容包括了功能、易用性、邊界測試、兼容性、性能等等,但是這些測試都沒有開發(fā)者自己寫的單元測試重要。大多數(shù)單元測試可以在第一時(shí)間發(fā)現(xiàn)問題、解決問題,而不是等到測試的時(shí)候來進(jìn)行解決。如果開發(fā)者覺得代碼哪寫的好像有問題,那么十有八九有問題。只是個(gè)時(shí)間問題而已。


(3)好代碼是不停修改和重構(gòu)得來的。之前看了很多的代碼,這包括vxworks、gcc、linux、mysql等等,它們中的很多代碼從上個(gè)世紀(jì)八九十年代就已經(jīng)存在了,到今天還在修改。有的是重新調(diào)整流程,有的是為了適配新的cpu,還有的是為了兼容新的設(shè)備特性。所以說,一份健康的代碼需要反復(fù)的測試、反復(fù)的重構(gòu)、反復(fù)的運(yùn)行,沒有什么是一層不變的。在服務(wù)器上運(yùn)行的很多系統(tǒng)代碼,不知道經(jīng)過了多少次推倒重來的修改,經(jīng)過了多少次作者的代碼檢查,估計(jì)只有真正經(jīng)歷的人才知道。


(4)現(xiàn)有的工具可以極大地幫助我們進(jìn)行代碼的各種測試,我有一篇文章談到了這些工具。比如說,CUnit可以幫助我們進(jìn)行單元測試;splint可以進(jìn)行代碼的靜態(tài)檢查;valgrind可以進(jìn)行代碼的泄漏測試;gcov可以進(jìn)行覆蓋率的測試;gprof可以進(jìn)行代碼性能的統(tǒng)計(jì)測試;gdb的watch功能可以直接幫助我們檢查數(shù)據(jù)是否越界;core dump可以幫助我們保存程序的相關(guān)內(nèi)存信息,為我們逆向調(diào)試提供了方便。當(dāng)然,上面說的都是linux上面的工具,大家可以根據(jù)自己的環(huán)境,看看有沒有什么合適的工具幫到自己提高一下代碼的質(zhì)量。


(5)有些錯(cuò)誤是隨機(jī)的,但是有一定的概率性。這就要求我們對相關(guān)數(shù)據(jù)的輸入、輸出進(jìn)行記錄和處理。實(shí)現(xiàn)這個(gè)功能不難,用fprintf和fscanf就可以做到,下面是我自己寫的一份簡單代碼,算是拋磚引玉之用,

  1. #include <stdio.h>  
  2.   
  3. #define NAME "log.txt"  
  4.   
  5. int main(int argc, char* argv[]) {  
  6.   
  7.     FILE* file;  
  8.     char buf[32];  
  9.     int data;  
  10.     unsigned int udata;  
  11.     char str;  
  12.     unsigned int hex;  
  13.   
  14.     // generate log txt file  
  15.   
  16.     file = fopen(NAME, "rt");   
  17.     if(NULL == file){  
  18.   
  19.         file = fopen(NAME, "w");  
  20.         fprintf(file, "%d\n", 10);  
  21.         fprintf(file, "%u\n", -1);  
  22.         fprintf(file, "%s %c 0x%x\n", "china", 'c', 0x12345678);  
  23.         fclose(file);  
  24.   
  25.         return 1;  
  26.     }  
  27.   
  28.     // read file   
  29.   
  30.     fseek(file, 0, SEEK_SET);  
  31.     fscanf(file, "%d\n", &data);  
  32.     fscanf(file, "%u\n", &udata);  
  33.     fscanf(file, "%s %c 0x%x\n", buf, &str, &hex);  
  34.     fclose(file);  
  35.   
  36.     // output content to the screen  
  37.   
  38.     printf("%d\n", data);  
  39.     printf("%u\n", udata);  
  40.     printf("%s %c 0x%x\n", buf, str, hex);  
  41.   
  42.     return 1;  
  43. }  

(6)對于代碼中的日志、打印、告警要進(jìn)行分開處理。有的時(shí)候,代碼運(yùn)行很長時(shí)間才會(huì)發(fā)生錯(cuò)誤,那么除了core dump和代碼入庫記錄之外,你能看的就是打印日志了,所以寫一份自己的print函數(shù)也是很有必要的。因?yàn)閾Q成自己的print函數(shù)后,這些log你可以顯示出來,也可以保存到文件里面,同時(shí)也可以是一個(gè)空函數(shù),真是太方便了。

  1. #include <stdarg.h>  
  2.   
  3. void printk(char* fmt)  
  4. {  
  5.     va_list args;  
  6.     char buffer[256];  
  7.   
  8.     va_start(args, fmt);  
  9.     vsnprintf(buffer, 256, fmt, args);  
  10.     va_end(args);  
  11.   
  12.     printf("%s", buffer);  
  13. }  

    上面的觀點(diǎn)是我最近一段時(shí)間的感受,歡迎大家來交流。



本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語言常見文件操作函數(shù)總結(jié)詳解
第二十三講 再說文件的操作
轉(zhuǎn)貼:matlab fprintf
C語言編程---文件的打開與讀寫
C語言學(xué)習(xí)教程第十章-文件(6)
printf(),fprintf(),sprintf()函數(shù)的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服