• 斷言(軟件開發)

    編輯
    本詞條由“匿名用戶” 建檔。

    斷言(軟件開發)簡介

    編輯

    計算機編程中,特別是在使用命令式編程范式時,斷言是一個與程序中的某一點相連的謂詞(狀態空間上的布爾值函數,通常用程序的變量表示為邏輯命題),在代碼執行的那一點上總是應該評估為真。斷言可以幫助程序員閱讀代碼,幫助編譯器編譯代碼,或者幫助程序檢測自身的缺陷。對于后者,一些程序通過在運行時實際評估謂詞來檢查斷言。然后,如果它實際上不是真的--斷言失敗--程序就認為自己有缺陷,通常會故意崩潰或拋出一個斷言失敗的異常。下面的代碼包含兩個斷言,x>0和x>1,它們在執行過程中的指定點確實是真的。x=1;assertx>0;x++;assertx>1。程序員可以使用斷言來幫助指定程序和推理程序的正確性。例如,一個前提條件--放在一段代碼的開頭的斷言--確定了程序員期望代碼執行的狀態集。放在結尾的后置條件描述了執行結束后的預期狀態。例如:x>0{x++}x>1.上面的例子使用了C.A.R.Hoare在1969年的文章中使用的包括斷言的符號。這種符號不能在現有的主流編程語言中使用。然而,程序員可以使用其編程語言的注釋功能包括未檢查的斷言。例如,在C語言中。x=5;x=x+1;//{x>1}。注釋中包含的大括號有助于將這種注釋的使用與其他使用區分開來。庫也可以提供斷言功能。例如,在C語言中使用支持C99的glibc。#include<assert.hintf(void){intx=5;x=x+1;assert(x>1);}一些現代編程語言包括檢查過的斷言--在運行時或有時靜態地檢查的語句。如果一個斷言在運行時被評估為錯誤,就會導致斷言失敗,這通常會導致執行中止。這引起了人們對檢測到的邏輯不一致的位置的注意,這可能比其他情況下產生的行為要好。斷言的使用有助于程序員設計、開發和推理程序。

    使用方法

    編輯

    在Eiffel等語言中,斷言是設計過程的一部分;其他語言,如C和Java,只在運行時使用它們來檢查假設。在這兩種情況下,它們都可以在運行時檢查其有效性,但通常也可以被壓制。

    契約設計中的斷言

    編輯

    斷言可以作為一種文檔形式發揮作用:它們可以描述代碼在運行前期望找到的狀態(其前提條件),以及代碼在運行結束后期望得到的狀態(后置條件);它們還可以指定類的不變性。Eiffel將這種斷言集成到語言中,并自動提取它們來記錄類。這構成了契約設計方法的一個重要部分。這種方法在沒有明確支持的語言中也很有用:使用斷言語句而不是注釋中的斷言的好處是,程序可以在每次運行時檢查斷言;如果斷言不再成立,可以報告錯誤。這可以防止代碼與斷言不同步。

    用于運行時檢查的斷言

    編輯

    斷言可用于驗證程序員在實現程序時做出的假設在程序被執行時仍然有效。例如,考慮下面的Java代碼。inttotal=countNumberOfUsers();if(total%2==0){//totaliseven}else{//totalisoddandnon-negativeasserttotal%2==1;}在Java中,%是余數運算符(modulo),在Java中,如果它的xxx個操作數是負數,結果也可以是負數(與數學中使用的modulo不同)。

    斷言(軟件開發)

    在這里,程序員假設total是非負的,所以除以2的余數總是0或1。該斷言明確了這一假設:如果countNumberOfUsers確實返回一個負值,那么程序可能有一個錯誤。這種技術的一個主要優點是,當錯誤確實發生時,可以立即直接檢測出來,而不是在以后通過通常不明顯的影響來檢測。由于斷言失敗通常會報告代碼的位置,人們通常可以準確地指出錯誤,而不需要進一步調試。斷言有時也被放置在執行不應該到達的地方。例如,在C、C++和Java等語言中,斷言可以放在switch語句的默認子句處。任何程序員沒有故意處理的情況都會引發錯誤,程序會中止,而不是在錯誤的狀態下默默地繼續。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/164207/

    (5)
    詞條目錄
    1. 斷言(軟件開發)簡介
    2. 使用方法
    3. 契約設計中的斷言
    4. 用于運行時檢查的斷言

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久