學習C語言,怎樣檢驗自己編程是否正確?

我的老家在東原


檢驗的方法有很多,主要介紹以下三種:

畫流程框圖,標註重要結點並做驗證程序

用條件編繹:分發行版與調試版兩種版本

用IDE的DEBUG模式及TRY/CATCH

以下分別介紹:

1,畫流程框圖,標註重要結點並做驗證程序

軟件開發者要養成畫流程圖的習慣。通過畫流程圖,能夠對邏輯運算、主要算法、最終輸出方式等有一個全面的掌握,使得很容易從顯示的結果,得出正確與否的結論。

很多人不劃流程圖,認為浪費時間,這是大錯而特錯的。做大型程序,一般開發、維護時間大致持續5~10年,甚至更多。人員在流動,沒有流程圖,後邊的人根本無法接手,無法明白程序的真正含義。到最後,系統再也無法更新了。如下圖的一元二次方程算法流程圖。

2,用條件編繹:分發行版與調試版兩種版本

調試版包括中間結果顯示及算法驗證顯示,便於跟蹤程序執行的正確性。

發版行只寫原代碼,無中間結果跟蹤。

我們在編程時,都會在h文件中定義這樣一組宏定義:

#define DEBUG_VER 0x55//調試版

#define RELEASE_VER 0x55//發行版

#define DEBUG_RELEASE DEBUG_VER

定義DEBUG_RELEASE為調試版本。

在編程時,如要某個位置顯示執行中間結果信息,用預處理條件編繹語句:

#if DEBUG_RELEASE==DEBUG_VER

//寫你要在屏幕輸出的內容

//printf(”valueN=d%”,i);

//或者,寫結果驗證程序。如上圖的一

//元二次方程,把解代入,兩端相等,

//就是正解。

#else

//寫發行版軟件

#endif

這樣,在軟件調試完成後,再設為發行RELEASE版。

3、用IDE的DEBUG模式及TRY/CATCH

當選擇DEBUG方式編繹時,用Trace語句顯示的字符串信息,會顯示在output窗口中,類似於printf語向。

或者用Try/Catch語句。特別適合於文件的打開/讀寫發生異常時。


BWanger軟件開發達人


這個問題的本質是一個關於軟件測試的問題,即如何測試軟件?所以我先介紹下軟件測試的通則,然後再針對C語言做些說明。

根據測試策略,主要有兩種。一是單元測試,即把整個軟件系統根據功能分為不同的單元,然後對各個單元進行測試;另外一種是集成測試,即把整個軟件系統看做一個整體進行測試。

針對不同的測試策略,又有多重不同的測試方法,比如:

1、黑盒測試,即通過數據輸入並觀察數據輸出,對比輸出值與期待值的差異度來判斷軟件內部功能是否正確的一種方式。黑盒測試將被測軟件軟件內部視為不可見的黑盒,測試人員不需要知道軟件內部的工作過程與實現原理。

2、白盒測試,白盒測試是相對於黑盒測試的另一種測試方法,它假設測試人員知道軟件內部的工作過程與實現原理,甚至還可以查看源代碼,目的是為了更深刻的認識軟件,然後再根據對軟件的認識進行有針對性的測試,以便更高效的發現問題。

3、靜態測試,即通過靜態分析的方法測試軟件,它主要通過軟件的靜態的測試程序中算法是否正確,計算方式是否正確等手段完成測試。

4、動態測試,是與靜態測試方法向對應的一種測試方法,因為它的主要目的是檢測軟件運行中出現的問題,所以被稱之為動態測試。它的目的是檢測軟件運行是否正確,功能是否完善,效率是否滿足要求等。

以上方法適合於所有語言,針對題主說的C語言,如果你寫的是一些大型程序,可能會用到上面介紹的這些方法的組合;如果只是學習或者一些簡單的程序,你可以寫根據編寫的程序的功能寫一些測試用例,然後通過運行這些測試用例來檢測你的程序是否正確。

下面是一個簡單的例子,有一個comapre函數,為了測試它的正確性,針對三種情況寫了不同的測試用例,通過運行測試用例發現在a=b的情況下程序運行不正確。如下圖:

對於更復雜的情況只需要編寫更多的測試用例即可。


編碼之道


我來回答下這個問題,我是一名科技創作者,也是一名c/c++程序員。

編程是否正確,這個可以分成幾個維度。

  1. 首先,程序代碼是否有語法錯誤。因為c語言是靜態語言,是強類型語言,所以編譯器會告訴你編寫的程序是否能通過編譯。
  2. 然後,程序代碼是否有功能錯誤。這個需要實際測試功能,做測試用例。通過測試用例才檢查你的程序是否達到預期效果。一般在進入開發之前,都會做測試用例評審。
  3. 最後,程序代碼是否有性能問題。如果沒有功能性問題,符合設計要求,可以實現預期的功能需求。那麼接下來就是性能問題了,主要是在數據量、併發量增長的情況下,程序是否會變得異常,比如說運行緩慢,響應速度明顯下降。

綜上所述,簡單來講經過這三個步驟,基本可以檢驗自己的編程是否正確。

以上是我的回答。



分享到:


相關文章: