动态

详情 返回 返回

模塊化,流程化,自動化 - 动态 详情

1.
最理想的情況是,一個模塊(比如一個庫)只輸出指定的外部接口,其餘內部接口對外都不可見,都是static的。

這個目標不太好實現。

如果是一個很小的模塊,所有代碼都在一個文件中,只有少量的對外接口,也只有少量的內部接口,這是可以實現的。

但是,一般意義上的一個模塊,通常是較大的,包含多個較小的子模塊,除了對外提供的接口和子模塊內部的接口,還有子模塊之間交互的接口。子模塊之間交互的接口,不應該讓外部看見,但又不是子模塊內部的接口,無法做成static。

為了處理子模塊之間接口的問題,可以把模塊中所有代碼都放在一個文件中,但這種做法比較少見。或者,把子模塊之間的接口做成定義在頭文件中的static函數,這種做法也不多見。目前只能採取折中辦法,子模塊之間的接口對外還是可見的,只是用特定的名稱去約束,去檢測,避免外部調用到這些接口。比如模塊對外提供的接口形如:ABC_doSomething1, ABC_doSomething2,而子模塊之間接口的名稱就用ABC_privDoSomething1,ABC_privDoSomething2。

2.
每個對外接口應該都有詳細的説明,比如是否線程安全,是否有調用順序的要求等。接口內部應該記錄被調用的情況,比如進入各個分支的次數,每次的耗時,當前的執行位置。

3.
為了對模塊進行測試,模塊的實現者要編寫上層代碼(上層調用本模塊的接口)和下層代碼(本模塊調用下層的接口)。這樣不依賴其他模塊就可以對本模塊進行測試。儘量做成平台無關的,這樣可以在開發機器上進行測試,而不用在實際的目標設備上測試。測試要完全,覆蓋到所有的接口,所有的用法,所有的路徑。測試應該包含非法,異常的情況,比如參數不合法,錯誤的調用順序等。

4.
模塊最好沒有外部全局變量,靜態變量在編譯時就統計出來。靜態變量也應該少用,把必須的靜態變量統一起來管理,做好記錄,運行時可以判斷靜態變量的正確值是怎麼樣的。可以在統一管理的靜態變量之間加入一些magic,這樣運行時就可以判斷靜態變量有沒有被破壞(踩內存)。

5.
記錄好動態申請的內存,運行時任意時刻都可以查到本模塊申請的內存,釋放的內存。運行時最好能判斷動態申請內存裏的內容是否是正確的。

Add a new 评论

Some HTML is okay.