2013年8月30日 星期五

要寫出零錯誤的程式,最重要的就是要熟悉各種錯誤發生的原因.
  • 要怎樣才能讓錯誤在內部測試階段即能自動浮上?
  • 我又要如何避免犯同樣的錯誤?
"更完整的測試".不過這個做法即不"自動",而且也沒有達到"預防".

    本書將提出一些實用的技巧及規範,用以減少所有可能的錯誤.
  "規範"不是固定的法則.就像是"goto"的限制一樣:大部份的時候我們應謹守,但是如果有更好的方法,也可以打破.

變數及函式的名稱
匈牙利命名慣例迫使所有的名稱都依照資料型別來命名,例如:

 char       ch;
 byte       b;
 flag        f;
 symbol  sym;
這種慣例並沒有嚴格規定每一種資料型別一定得用怎樣的縮寫,只要我們堅守同一種型別只用同一個縮寫來命名即可.
 char     *pch;
 byte     *pb;
 flag      *pf;
 symbol *psym;
 char    **pch;

 這種拼湊的資料名稱不容易唸出,但是這樣子的命名摜例可以允許程式師在型別之後接一兩個有意義的字,若再加上其單字開頭為"大寫".這樣子就可以改進其"可讀性"

char *strcpy( char *pchTo, char* pchFrom);
 不過這樣子又引發一些問題,因為匈牙利命名慣例的目的是要強調名稱的涵意,所以要把"資料型別"得交代清楚;不過卻漏了形容資料"實際被宣告為什麼用途".
其strcpy中的參數,實際上是指向一個以空字元(null 字元,'\0')結束的字串.故可改為
  char *strcpy( char *strTo, char* strFrom);
這樣子,str仍是字元指標,不過在見到這個名稱時,會更容易聯想到它不只指向一個字元,而是一個字串.

--------------------
 使用匈牙利的好處,就是可以更容易的解讀包含指位器的表示式.
 *ppb=pbNew
 在這行中,可以暫時把成對的*(代表位址的內容)和p(代表位址)相低,故成為
 pb=pbNew; //這樣子,兩邊的式子型別,即可相等.
 同樣子的,&,->也可;
 pb=&bTest; //p與&
 b=psysTest->bLeng; //p和->相抵成 "."

---------------------------
 認識本書所指的"錯誤"
 "bug"分成二大類:
1.還在程式發展過程中所發生的錯誤,
2.當自認完成某項能之後,成為漏掉的.

 一般,程式設計師可以已完成的程式中以查閱的方式將須修改的部份找出來(check out);不過與我們在圖書館查閱書籍不同的是,在圖書館借書,我們是將原書直接借出來;但在查閱程式時,只是從程式控制系統將原穚複製一份,而不更動原來的.這樣子就可以確保程式設計師在擴增新功能時,不至於影響原有的程式主檔;等到程式師將修改的部份完成後並且確認無誤後,再將"借閱"的程式還給控制系統.

 本書所提到的錯誤,指就是那些混進主檔內的錯誤;因為它們在發展過程被疏漏了,所以一直保持在程式中.

沒有留言:

張貼留言