在軟體項目的開發過程中,我們必須要面對這樣一個現實問題,就是風險無處不在。如果不能正確的識別和控制風險,那麼點滴的疏漏就有可能把項目推向崩潰的邊緣
首先,軟體項目中的風險具有繁殖能力。如果不能識別項目中的初級風險,那麼這個風險很可能在項目推進過程中衍生出其他風險。如使用者需求定義過程,沒有充分理解使用者的意圖或使用者的操作習慣,而是想當然的定義使用者的需求,那麼就會給系統架構結構的設計或使用者介面(UI介面)設計,埋下風險的種子。日後只要條件成熟,它們會遍地開花的。
其次,軟體項目中的風險具有變異能力。雖然同類項目可以參照類比,但是,不能生搬硬套。不同的環境下,同樣的風險會有不同的表現形式。如使用者需求的定義,不同設計人員,定義的結果會就會發生差異。如果我們不能及時的發現和糾正這些差異,日後就有可能把項目推向一個進退兩難的境地。
三,軟體項目中的風險具有依賴性。項目中任何風險都不是獨行俠,它們本質上是互相依賴,互為因果的。它們就像一張無形的網,如果你能找到正確的節點,那麼很多風險都會被你破解在無形之中,如果找不到爭取的節點,那麼它們會越攪越亂,最後讓你難以自拔。
那麼如何識別軟體項目中的風險呢?
從思想意識方面,要注重以下方面
1、 三四而後行,做一件事情之前,一定要想清楚前因後果,不但要有工作熱情,更要有謹慎而科學的思考習慣;
2、 要有團隊意識,我們知道任何個人的思維是有局限性的,軟體作為一種知識密集性產品,我們需要能力強、素質高的個人,他們是團隊的核心,但絕不排斥任何人對項目有益的思考和建議。
3、 要有良好的溝通交流意識,這種溝通交流不僅是項目組內部的,同時也要涵蓋到項目的客戶。做為開發人員,大多是專業技術人員,對項目的應用領域的知識知之甚少,容易一葉障目,因此與客戶的溝通交流尤為重要。
人員管理方面,要注意一下問題
1、人員構成是否與項目的複雜度匹配,項目組不一定都得是強人,對於簡單項目使用強人是浪費;對與複雜項目,沒有強人是災難;
2、項目群組成員的是否穩定,穩定的團隊,人員之間容易形成默契,有助於形成開發合力,提高開發效率和項目品質;
3、項目群組成員的角色分工是否合理,每個人是否能夠各盡所長,避己之短。
在實際開發過程中,要考查分析以下幾個方面
一, 使用者需求定義階段
1、 功能的定義是否清楚,這裡要求功能的界定不能具有二義性;
2、 是否有重複的功能定義;
3、 項目的應有範圍和環境是否定義清楚;
4、 項目中涉及的工作流程是否定義清楚;
5、 軟體系統中的需要消費和生產的資料是否定義清楚;
二, 系統設計階段
1、 開發技術的選擇是否合理,這裡要堅持的原則是複雜的業務,要用簡單的技術來實現,這樣可以讓開發人員有更多的經曆來關注業務領域,而不是陷於複雜技術的泥沼;
2、 功能介面的定義是否合理,這裡同樣要堅持簡單的原則,這樣可以降低介面對接的複雜度,減少開發人員學習使用介面的時間,提高開發效率
3、 功能是否進行了原子化的分解設計,這裡要堅持的獨立的原則,也就是說每個任務單元要儘可能的單一,並且我們可以同這些單一的工作群組合完成不同功能,這樣可以提高代碼的複用度,降低代碼的耦合度;
三, 程式設計及編碼階段
1、 相關人員對作業範圍內的業務概念是否全面掌握;
2、 相關人員對作業範圍內的專業技術是否全面掌握;
3、 相關人員對於編碼規範是否有全面的認識;
4、 Debug環境是否具備,對於大型並行開發的軟體項目,很多功能存在依賴關係,要並行開發,勢必有一些功能不具備在編碼階段進行Debug的條件,為了具備Debug的條件就要做一些類比的工作,因此在工作量的計划上一定要充分的考慮;
5、 相關代碼的品質檢查標準和相關的責任者是否明確。
四, 測試階段
1、 測試環境是否具備,特別是大型項目,由於並行開發和功能依賴或硬體裝置的限制,測試時需要做大量的類比工作,因此一定要在時間和人員給予保障;
2、 測試案例的設計是否合理,很多時候測試案例是由開發人員編製的,這樣的用例容易把開發人員的邏輯思維帶到用例當中,使得測試案例陷入一個固定的思維模式,而成無效用例;
3、 測試資料中的狀態資料是否涵蓋應用領域的每一種狀態,如果沒有,則測試資料是不健全的,測試結果就會有誤差;
風險是不可迴避的,我們必須時刻關注項目進展過程中的缺陷和不足,時刻警惕著。