Author:Anders小明
軟件工程中的經濟行為
1. 在傳統財務概念下,軟件公司或者商業公司IT部門的員工,是公司的成本中心。對于一個定額合同項目,員工工資成為項目中唯一的可變成本。
2. 因此,盡可能的縮短工期,減少人員投入就成為縮減成本的基本方式。
3. 軟件的分工模式,以及傳統的waterfall——流水線的工作方式,決定了問題發現的越早,修正的成本越低。
4. 有兩種手段來減少工期,工程上采用迭代,并讓迭代周期盡可能短,以及從技術上對于問題域進行分解,建立有效的邊界。
5. 迭代周期減少的目的是減少分工環節中尤其是第一個環節的不確定性帶來的問題,而對問題域的技術分解是解決開發環節的質量問題。因為通常維護成本是開發成本的3倍,提高質量可以減少項目后期對前期開發代碼的維護成本。
6. 同時,分解的好壞將決定了是否可以在開發環節中引入測試環節的工作,從而提供質量;并減少修正缺陷以及測試的工作量。
7. 質量是難以衡量的,通常以能否工作為準。而通常意義上的高質量代碼是可以較容易調整以及適應變化,但是不容易識別。
為保障質量,通常的手段是代碼審查,但在工程中完全代碼審查承保高昂,同時工作量大,并難以評估(評估結果有時因人而異)。而各種各樣的代碼規范檢查工具只能保障最低要求。
8. 在進度落后于計劃時,管理人員通常會下達行政指令——要求項目成員全力以赴趕上計劃。在此情況下,工程人員通常犧牲質量換取開發進度,同時把質量問題推后發生。
9. 軟件開發是腦力勞動 而非體力勞動;因此工程人員有很大的權利,他們有選擇質量和進度的能力,工程人員的工作狀況嚴重影響產出和進度。而上述情況的發生是人在利益環境下的自然選擇,對于工程人員的指責無濟于事。
10. 正確的工作方式是,為工程人員創造合適的條件以便工程人員做正確的事。
軟件架構師的工作
軟件工程的三要素:工具,方法和過程。然這所有的一切是規范人的分工和行為,提高人的生產效率,降低成本。
架構師的工作圍繞這個三個要素進行。
1. 工具評估(包括開發平臺,開發語言,開發工具以及輔助工具)。
A. 用好的工具提高生產效率,使人關注于有效工作內容,從而減少不必要工作量,減少成本。
特別對于分工下的團隊開發尤為重要。典型的分工是流水線,一步接一步。減少上一個環節的工作量,如開發環節,不僅提前下一個環節——測試的時間。
B. 用好的工具保證質量——另一種生產效率。
保證質量有利于減少工作上的反復,尤其影響到測試工作量,從而減少成本。
提高生產效率的同時有利于保證士氣。
2. 方法論選擇
解決問題的辦法就是分治。要被分解問題域是:數據(模型),計算和流程;而如何分解問題便是架構師的取舍啦,流行的有OOD和AOSD兩種。
在大比例結構中必需考慮的是:抽象分層,技術分層以及模塊切分。抽象分層(包括模型,計算以及流程抽象)以及模塊切分是基于業務的縱向以及橫向分解。而技術分層則是對于業務邏輯的技術分類,分類本身還可能涉及到平臺技術限制。所有分解都涉及到上下文的邊界建立——不僅僅是業務邏輯同時也是技術邊界。
分解問題必需考慮人的因素,降低分解后的知識學習阻力,保持知識的內聚以及有效組織是保證分解成功的關鍵。這些工作將有效保證開發人員不做出破壞系統分解邊界的行為。
考核分解的有效性:保證開發的效率。分解的目的是降低解決問題的難度,從而提高生產效率,如果分解方案增加了系統適應變化的能力,那么分解方案可能是錯誤的。
除了開發方法還有開發方式,已知的三種開發方式:編程式,聲明式以及產生式。
開發方式的選擇和技術分層有相當的聯系,一般認為除了Service以及Model,其它的技術分層代碼盡量使用聲明式以及產生式開發方式來完成,減少建立以及維護成本,提高效率。
對于Domain Model還要分析model的生命周期,明確設計主題。
3. 過程選擇
選擇的過程,最重要的是讓問題及早暴露(降低成本),盡早讓用戶使用(創造價值).
敏捷方法就是要讓問題更快的暴露,讓功能更快的實現。
文檔,文檔是過程的一個重要產物。文檔也是保證知識傳遞的。
在問題分解情況下的開發角色分為三種:開發者,使用者以及維護者。開發者寫的文檔給后兩者看,最最關鍵是寫給使用者的文檔。
所有的決定都是基于利益和成本考慮的。