標准化程序開發是敏捷開發中的核心內容之一。標准化代碼不僅有利於團隊之間的合作,也有利於模塊之間的集成,節省時間與成本。在VS中也為創建標准化代碼做出了很多努力。筆者在這篇文章中就跟大家分享一下,在VS平台中創建標准化代碼的注意事項。具體的說,就是五大禁令和四大推薦。
禁令一:不要隨意檢查代碼。
這可能跟用戶正常的認識有所差異。有些開發人員可能認為在開發過程中,檢查代碼是必須的。不過在敏捷開發的模型中,這恰恰是禁止的。因為如果在代碼的編寫中,不時的檢查代碼,會浪費開發人員大量的時間與精力。當然,這也並不是說用戶不用檢查代碼的工作,而是強調代碼的檢查應該有一個特定的模型。
具體的說,在編寫代碼的時候,應該事先做好相關的准備。如需要創建一個威脅模型,然後在模型的指導下完成相關的代碼檢查工作。在必要的情況下,項目小組需要確定接受最嚴格的安全檢查的代碼的優先順序,已經發現問題時的解決順序。在VS中,可以幫助項目團隊建立一個威脅模型,並指導開發人員的後續工作。
禁令二:沒有驗證用戶的輸入。
代碼的標准化還包括對用戶輸入的驗證。如一個日期型字段,本來只允許用戶輸入某個特定范圍內的日期。但是用戶可能由於某種誤操作,輸入了一個非日期型的數據或者輸入的日期超過了某個特定的范圍,此時由於開發人員在用戶界面中沒有采取任何的驗證操作,導致應用程序接受了這個不合理的值,並進行了後續的運算。等到運算結果出來後或者根本無法進行後續的運算才發現用戶的輸入有問題,向用戶提示錯誤信息。此時已經晚了。不但浪費了用戶的時間,而且在系統中產生了不必要的垃圾數據。更嚴重的是,可能會因為用戶輸入了錯誤的數據,導致系統運算出現死循環。最終會因為系統資源耗盡,而使得應用程序當機。
這是一個明顯違反代碼標准化的做法。在實際應用程序開發過程中,應該避免這種情況的發生。
禁令三:利用斷言來檢查外部收入。
注意斷言這項功能在VS中還並不完善。微軟也沒有將其編譯到正式的版本中。所以開發人員不能夠使用斷言來驗證外部輸入。而必需采用其他的方式,來仔細驗證導出的函數和方法,以及相關的參數與結果,並確認所有用戶的輸入以及所有文件和套結字數據的有效性。這個檢查看起來比較麻煩,其實只要做好第一點,即在一開始就建立一個合適的威脅模型,那麼這個檢驗的工作就會變得非常的簡單。
禁令四:硬編碼的用戶ID與密碼對。
硬編碼的用戶ID與密碼對的存在,嚴重違反了標准化代碼與敏捷開發的要求。如果使用VS系統提供的代碼分析工具,這個工具會檢測到硬編碼用戶ID與密碼的存在,並提醒開發人員不要這麼操作。
硬編碼用戶ID與密碼,簡單的說就是在應用程序代碼中直接創建用戶名與密碼。這是禁止的。在程序開發過程中,要與用戶有比較好的互動性。這包括允許用戶創建用戶並根據自己的需要設置密碼。從技術層面來說,可以使用一個加密的文本文件或者數據庫來存儲用戶的用戶名與密碼。當用戶登錄的時候,對其進行解密並進行匹配。
禁令五:緩沖區溢出。
緩沖區溢出也違反了敏捷開發的基本要求。緩沖區溢出會帶來很多意想不到的後果。而且有些攻擊程序就是通過緩沖區溢出來實現攻擊目的的。很多不標准的代碼編寫習慣會導致緩沖區溢出。如在代碼中沒有檢查用戶輸入數據的合法性,則用戶就可以在輸入的數據中加入一些非法的元素,導致函數的返回地址被用戶的某個地址所覆蓋,從而造成緩沖區溢出,實現攻擊者攻擊的目的。
一般來說,只要標准建立恰當,並在實際開發中嚴格按照規則來進行開發,那麼可以在很大程度上避免緩沖區溢出的問題。如在標准中,會寫明對於用戶輸入的每個數據都需要進行合法性驗證。如果開發人員沒有遵循這個標准,那麼就一切都白搭。
建議一:靈活使用代碼分析工具。
一個應用程序其可能有成千上萬條代碼構成。為此通過手工來檢查代碼的有效性往往是一項比較困難的工作。而且其實代碼能夠編譯通過,也只能夠說明這個代碼沒有語法上的錯誤。但是其可能在某些方面存在性能上的問題。當代碼中存在影響後續系統運行的性能隱患,這不符合敏捷開發的要求。
而要解決這個問題,需要從兩個地方著手。一是在前期編寫代碼時候,要遵循標准化的原則,即要嚴格根據預先定義的代碼規則來編寫應用程序。二是在開發完畢後,要學會使用代碼分析工具,來對已有的代碼進行分析。在VS的Team中提供了一個代碼分析工具。通過這個工具,可以明顯的減少代碼中BUG發生的可能性。而且這個工具本身就是根據一定的標准所開發的,其可以發現代碼中不標准的地方(雖然其語法沒有問題、也能夠實現用戶的需求)。
建議二:錯誤要及時總結,不能夠在同一個地方栽倒兩次。
人一旦養成了某個習慣,無論是壞習慣還是好習慣,以後都很難更改。一個有經驗的開發人員,可以根據代碼書寫的習慣來判斷這個代碼的開發人員。這也在提醒我們,代碼通常會以重復的模式書寫。如果犯了第一個錯誤之後,沒有及時總結處理,則很有可能會在第二次再犯類似的錯誤。所以說錯誤要及時總結,不能夠在同一個地方栽倒兩次。
從VS平台的角度講,當發現某個代碼由問題,而且可能還在其它地方使用,那麼需要通過查詢功能,來查詢這個代碼在其他地方的使用情況。另外,也可以將需要被重復調用的代碼寫成一個類。如此的話,當發現代碼有問題的時候,只需要修改這個類即可。
建議三:規范化的文件路徑和URL地址。
當應用軟件規模比較大,則會牽涉到很多的文件路徑和URL地址。在編寫標准化代碼的過程中,文件路徑與URL地址的標准化是其一個基本的要求。為此對於文件路徑和URL地址要預先進行規劃。
在VS中,筆者建議使用相對地址,而避免使用絕對地址。也就是說,在應用程序安裝過程中,允許用戶根據實際情況來選擇安裝目錄。然後系統就根據安裝目錄作為相對路徑的開始。另外在項目開始時,項目負責人要預先制定出一套合適的編碼規則。項目組的成員在編寫代碼時,要嚴格遵循這個規則。
建議四:盡量使用可移植的代碼。
代碼的移植性一直是評價是否是敏捷開發的重要指標之一。而標准化代碼顯然可以提高代碼的移植性。在VS平台中,也會代碼的可移植性創造了很好的條件。一個簡單的例子就是模板。在VS中,提供了豐富的模板。其實模板就是一段段可移植代碼。
而且在VS中,還可以自己創建模板。在筆者的開發環境中,就有近百個模板。如用戶登錄模板、數據保存前的檢驗模板等等。如現在需要新開發一個應用程序,需要用到登陸功能。則筆者可以直接調用自己以前創建的模板,然後進行小規模的調整。