介面問題似乎是程式設計人員心中永遠的痛,在開發過程中不知道有多少矛盾產生於此。這不前幾天我們在開發的乙個專案又遇到了這個問題,事情原本很簡單,開發人員a是負責編寫底層函式的,開發人員b負責編寫上層函式,當時規定了嚴格的介面(用c語言開發,通過乙個結構來進行引數傳遞)。按道理說不應該有太大的問題,但b在呼叫a編寫的底層函式的時候卻發現,當他把賦好值的結構傳遞給a編寫的函式後卻得不到正確的結果,於是便找到a要求a對其函式進行糾錯,a經過一天的查詢發現自己的函式沒有錯誤,而問題是在b傳遞過來的結構中的引數不對,原來在這個結構中存在乙個字串變數,由於a在這個字串賦值的時候沒有對字串的長度進行檢驗,發生了賦值越界,結果將後邊乙個int 形的資料覆蓋了,問題找到了,處理起來一點也不困難,只要b將自己的**進行適當的修改就可以解決這個,誰也沒有想到的是b不肯承認是自己的問題,反而責怪a在編寫底層函式的時候沒有進行資料檢驗,a自然認為自己很無辜,於是問題鬧到我這裡來了,我讓他們把各自的源**都拿來,通過走查,發現a的演算法沒有問題,而且在函式的入口處做了資料合法性檢查。而b的函式存在很明顯而致命的問題――資料越界,而且在資料輸出的時候沒有進行資料檢驗。問題明晰了,如何處理也就很簡單了,我不想多說了,但在大家處理藉口問題的時候有幾件事情希望大家注意:
1介面一定要詳細、穩定,不要多變。
介面要詳細穩定,不要經常改變,這個道理誰都明白,但在實際工作中,當你使用乙個新開發平台進行開發的時候往往很難做到這一點,特別是對於乙個新手,由於對開發平台了解不夠往往忽視對介面的設計,造成介面的經常性變化。在這種情況下可以採用以下幾種方法來解決問題,乙個是要編寫一些demo程式,通過這些demo程式來了解開發平台,這對確定介面很有好處,二盡量少傳遞簡單變數,而採用傳遞結構或物件的方法,這樣即使發生了變化也便於修改,三寧可多傳,不要少傳。除了極少數的程式,現在的**對於多傳幾個引數不會對系統效能有很大的影響,在實在沒有時間的情況下,寧可多傳引數而不用也比到時候引數不夠無法進行操作好得多。當然這種方法這是一種臨時的應急的方法,不可多用。而且,在以後一定要進行優化。
2介面一定要有書面記錄。不能僅僅是口頭約定,
口頭約定一般是在時間非常緊張的時候或開發人員開發關係很密切的時候經常出現的一種現象,一般來說開發人員認為這種口頭約定的不會影響開發,但實際上這種情況往往是產生程式設計問題以及破壞同事關係的主要源泉。俗話說好記性不如爛筆頭。無論當初說得多麼好,彼此之間也會存在一些理解上的差異,而且隨著時間的流失,還有乙個遺忘的問題,最後乙個可怕之處是:一旦發生問題的時候無法確定責任,因為沒有書面文件,一旦發生的爭執,領導往往會各打50大板,而工作人員都會認為自己是冤枉的,影響彼此的合作關係。所以在這種情況下,還是費一點力氣,將介面記錄下來比較好.
3介面不但做輸入檢驗,還要做輸出檢驗。
介面的輸入和輸出都要做盡可能的做檢驗。很多情況是如果只是在底層函式做資料合法性檢驗是無法驗證資料的有效性的,介面上方的高層函式在呼叫底層函式的時候也應該做輸出資料的合法性檢驗,很多時候往往是由於介面傳遞了錯誤的引數而導致介面出現問題。此外,一旦發生介面問題,首先要檢驗的就是確定介面傳遞的引數是否正確,在保證引數傳遞正確的情況下,再去尋找演算法錯誤。
4在有關介面的問題上應該相互協作,不能推卸責任。
所謂推卸責任是指兩個方面:乙個是在介面約定不太好的情況下很多操作放在介面的兩頭均可,這時候如果雙方都推卸責任,而矛盾也就因此產生(特別是在工作緊張的情況下),另一點是一旦在介面處發生問題,作為上層的開發人員一定要保證輸入引數的正確性,另外還要協助底層開發一起解決問題――很多情況是因為設計的問題,底層函式無法利用現有的引數完成相關的操作,在這種情況下如果沒有上層開發人員的協助,底層開發人員是無法完成程式的修改。作為底層開發人員應該保證函式的正確性,此外提供相關的資料檢驗和返回提示,幫助上層開發確定問題的發生原因。
總之,介面問題是雖然是我們在協作開發工作中最長遇到的問題,但並不是乙個不可解決的問題,有時候人們的心理因素的影響往往大於技術因素的影響,正視這些問題是我們解決這個問題的關鍵。
原來是諾頓若的禍
昨天早上出門的時候還可以開啟的電腦到了晚上竟然不能啟動了,原來出過一次問題,不過那次是因為硬碟,而這次是因為諾頓,昨天晚上不知道是什麼原因,就在d盤重新安裝了乙個xp,今天還是看電視的時候才知道這個訊息的,哎,用了諾頓這麼多年,不知道這次的事件對諾頓會有什麼影響,也不知道諾頓會怎麼進行賠償 不過我是...
又是系統時間惹的禍 TreeView
由於要產生一大批 幾十個的說明,於是我又開啟了codesmith 我家的codesmith版本很舊了,破解版在我家電腦上沒啥作用了,為了繼續用。我只好把電腦時間改到08年去了。於是繼續doing coding 啊。突然點著點著到乙個treeview介面,顯示不了,刷了n次不出來,偶爾還報指令碼錯誤。...
又是系統時間惹的禍 TreeView
由於要產生一大批 幾十個的說明,於是我又開啟了codesmith 我家的codesmith版本很舊了,破解版在我家電腦上沒啥作用了,為了繼續用。我只好把電腦時間改到08年去了。於是繼續doing coding 啊。突然點著點著到乙個treeview介面,顯示不了,刷了n次不出來,偶爾還報指令碼錯誤。...