從測試角度寫代碼(一)調試分級

從測試角度寫代碼(一)調試分級

一.爲什麼要使用調試分級

調試分級並不是一定要做的,需要根據具體情況進行分析,比如我們在使用開發小型代碼時,是完全不需要使用調試分級的,反而會給我們帶來了代碼編寫的複雜性。調試分級一般用於大型項目開發中,可以快速定位代碼問題,提高編程效率,以下場景都是可以使用調試分級進行優化的選項。

  • 當我們進行大型項目開發時基本都是按階段性開發進行的,當我們調試完一階段代碼之後,如果需要繼續調試開發下一段代碼時,需要將上一段代碼的打印信息全部屏蔽。
  • 上一個場景儘管有同學說我們可以開發下一階段任務前,利用編譯器的查找替換將上階段的代碼的printf全部替換//printf進行快速註釋,但是如果我們需要輸出的代碼既有需要顯示的業務代碼,又有需要開發時的調試方法。直接使用替換功能將調試信息註釋掉同時也會將顯示信息註釋。
  • 在項目發佈上線的頭天,進行最後的代碼測試時,如果調試打印出現了錯誤信息,但是這個信息並不緊急,爲了不影響發佈日期,我們完全如期上線項目,在後期使用補丁或者更新的方法進行代碼修飾。但如果沒有代碼分級的情況下,在大型項目中測試打印出非常多信息的情況下,如何快速得到錯誤嚴不嚴重呢。

二.調試分級層次

  • 以上問題都可以通過手動修改printf進行改變,但是這種方法在使用時,即繁瑣又低效,而且一步步修改也容易出錯,自己寫一個小的demo代碼還好,具體代碼實施時,還是使用分級調試的思想比較快捷。

  • 我認爲調試分級參照日誌的做法,大致的分爲以下四個級別:

    • ERROR級別:這種級別優先級最高,表示運行功能的過程中表示代碼已經發生了錯誤,比如文件讀寫出錯,內存訪問出錯,需要進行修正。這種問題需要立即解決。
    • WARNING級別:這種級別優先級其次,表示代碼能夠正常運行,但是可能存在潛在問題,這種問題在也需要進行解決,但是如果項目緊急,完全可以先根據警告信息進行一個判斷。當錯誤信息不會影響到整個項目的功能運行,我們先將產品發佈,後期通過更新和補丁進行修復。比如現在很多手機廠商在發佈會上需要發佈新的操作系統,儘管系統中還存在一些小的DEBUG,但是就目前而言,這些小bug基本不會影響到用戶體驗,這時我們爲了保證如期發佈,可以使用先上線,後修復的策略。
    • DEBUG級別:這種級別屬於程序調試級別,在程序開發時,提供一個調試級別給程序員們做一個信息調試,獲取出程序員員所需要的調試信息。在項目發佈後,需要屏蔽掉這一級別顯示信息。
    • INFO級別:這種級別屬於正常輸出級別,系統通過正常的打印出業務信息與用戶進行交互,我們需要展顯出來的菜單信息就是這一層。
  • 實現調試分級的方法

    • 利用不同的宏定義不同的調試等級,下面代碼定義出了兩種級別,一個正常的信息交互info_log,一個用於調試debug_log。我們調試代碼可以使用debug_log代替printf,正常的交互信息可以用info_log代替printf。具體實現代碼如下:

      #define DEBUG_PRINT 1
      
      #if(1 == DEBUG_PRINT)
      #define debug_log printf
      #else
      #define debug_log
      #endif
      
      #define INFO_PRINT 1
      
      #if(1 == INFO_PRINT)
      #define info_log printf
      #else
      #define info_log
      #endif
      
      #include <stdio.h>
      #include <stdlib.h>
      
      int main(void)
      {
      	char *info_messages = NULL;
      
      	info_log("you scanf messages is %s\n", info_messages);
      
      	while(1)
      	{
      		info_messages = (char*)malloc(sizeof(int)*10000);
      		if(NULL == info_messages)
      		{
      			debug_log("no enough memory\n");
      			break;
      		}
      
      	}
      	return 0;
      }
      
    • 程序輸出

      • 將info_log的宏置爲1,debug_log的宏置爲0,只顯示正常交互信息

        在這裏插入圖片描述

      • 將info_log的宏置爲0,debug_log的宏置爲1,只顯示調試信息

        在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章