本書展示了系統(tǒng)設計和項目設計的結(jié)構(gòu)化工程方法。本書的結(jié)構(gòu)反映了方法論的兩個部分:系統(tǒng)設計(通常稱為架構(gòu))和項目設計。這兩部分相輔相成,是成功的必要條件。附錄提供了一些補充內(nèi)容。
在大多數(shù)技術(shù)書籍中,每一章只針對一個主題并深入探討,這樣更容易編寫,但這通常不是人們學習的方式。相比之下,在這本書中,講解是螺旋式的。本書的兩大部分中的每一
章都重申了前幾章的觀點,通過多方面的洞察來進行更深入的研究或觀點的演進。這模仿了自然的學習過程,每一章都依賴于前面的章節(jié),所以你應該按順序閱讀這些章節(jié)。本書的兩大部分均包含了詳細的案例研究,以展示這些觀點以及其他方面。同時,為了保持迭代的簡潔性,作為一般規(guī)則,我通常避免內(nèi)容重復,因此即使是關(guān)鍵知識點,也只討論一次。
以下是對各章和附錄的簡單介紹:
第1章 元設計方法
本章介紹了下列關(guān)鍵思想:要想成功,必須同時設計系統(tǒng)和用來構(gòu)建系統(tǒng)的項目。這兩種設計對于終成功都是不可或缺的。沒有架構(gòu)就無法設計項目,設計一個無法構(gòu)建的系統(tǒng)是毫無意義的。
第2章 分解
本章致力于將系統(tǒng)分解為組成其架構(gòu)的組件。大多數(shù)人以壞的方式來分解系統(tǒng),所以本章首先解釋了不該做什么。一旦這個觀念建立起來,你將學會如何正確地分解系統(tǒng),在該過程中掌握一組有用的、簡單的分析工具并獲得觀察結(jié)果。
第3章 結(jié)構(gòu)
本章提升了第2章的思想,引入了結(jié)構(gòu)。你將看到如何捕獲需求、如何對架構(gòu)分層、架構(gòu)組件的分類及相互關(guān)系、特定的分類指導原則以及一些相關(guān)的問題,如子系統(tǒng)設計。
第4章 組合
本章說明如何將系統(tǒng)組件組裝成滿足需求的有效組合。這簡短的一章包含了本書的幾個關(guān)鍵設計原則,并將前兩章的內(nèi)容轉(zhuǎn)化為將在每個系統(tǒng)中使用的強大的思維工具。
第5章 系統(tǒng)設計示例
本章是一個廣泛的案例研究,展示了迄今為止所討論的系統(tǒng)設計思想。系統(tǒng)設計螺旋結(jié)構(gòu)的后迭代提供了一個實際的系統(tǒng),使系統(tǒng)設計與業(yè)務保持一致,并展示了如何生成架構(gòu)并對其進行驗證。
第6章 動機
由于大多數(shù)人從來沒有聽說過項目設計(更不用說實踐了),本章介紹了項目設計的概念和參與項目設計的動機。這是項目設計螺旋的第0次迭代。
第7章 項目設計綜述
本章概述了如何設計一個項目,首先定義了軟件研發(fā)的成功,然后介紹了明智的決定、項目人員配備、項目網(wǎng)絡圖、關(guān)鍵路徑、安排活動和項目費用等關(guān)鍵概念。本章涵蓋了隨后各章中使用的大多數(shù)思想和技術(shù),后重點討論了角色和責任。
第8章 網(wǎng)絡和浮動時間
本章介紹了項目網(wǎng)絡及其作為設計工具的使用。你將看到如何將項目建模為一個網(wǎng)絡圖,學習浮動時間的關(guān)鍵概念,了解如何在人員配備和調(diào)度中使用浮動時間,并了解浮動時間與風險的關(guān)系。
第9章 時間和成本
本章定義了在所有項目中時間和成本之間可能的權(quán)衡,并討論了通過正確工作來加速所有項目的方法。除此之外,你還將學習壓縮的關(guān)鍵概念、時間-成本曲線和成本要素。
第10章 風險
本章介紹了大多數(shù)項目中缺少的要素:量化風險。你將看到如何度量風險并將其映射到上一章的時間和成本概念中,以及如何基于網(wǎng)絡計算風險。風險通常是評估選項的方式,也是一流的規(guī)劃工具。
第11章 實踐中的項目設計
本章通過對設計一個項目所涉及的步驟進行系統(tǒng)的演練,將前幾章的所有概念付諸使用。其目標是演示設計項目時使用的思維過程,以及如何為業(yè)務決策者審查做準備。
第12章 高級技巧
遵循螺旋式學習模型,本章介紹了高級技巧和概念。這些技巧在各種復雜程度(從簡單到具挑戰(zhàn)性)的項目中都很有用,是對前幾章的補充,而且經(jīng)常會結(jié)合起來使用。
第13章 項目設計示例
本章是與第5章的系統(tǒng)設計示例相對應的項目設計示例。它也是一個案例研究,展示了設計項目端到端的過程。本章的重點是案例研究,而不是技巧。
第14章 總結(jié)
后一章從設計的技術(shù)方面進行了回顧,提供了一系列的指導、技巧、視角和開發(fā)過程思想。它從回答何時設計項目這個重要問題開始,以項目設計對質(zhì)量的影響結(jié)束。
附錄A 項目跟蹤
附錄A展示了如何在計劃方面跟蹤項目的進度,以及如何在需要時采取糾正措施。項目跟蹤更多的是關(guān)于項目管理,而不是項目設計,但它對于確保你在工作開始后履行承諾至關(guān)重要。
附錄B 服務契約設計
架構(gòu)本身是粗略的,你必須設計其每個組件的細節(jié),而這些細節(jié)中重要的是服務契約。附錄B指出了設計服務契約的正確方法。此外,關(guān)于模塊化、規(guī)模和成本的討論也很好地契合了本書大多數(shù)章節(jié)的內(nèi)容。
附錄C 設計標準
附錄C匯總了本書中提到的關(guān)鍵原則、指南和禁忌事項。該標準是簡潔的,是關(guān)于什么,而不是為什么。這個標準背后的原理可以在本書的其余部分找到。
本書展示了系統(tǒng)設計和項目設計的結(jié)構(gòu)化工程方法。本書的結(jié)構(gòu)反映了方法論的兩個部分:系統(tǒng)設計(通常稱為架構(gòu))和項目設計。這兩部分相輔相成,是成功的必要條件。
全書含大量圖和表,采用全彩印刷,閱讀體驗佳。
【前 言】
幾乎沒有人是被逼著進入軟件開發(fā)行業(yè)的。相反,許多人愛上了編程并決定以此謀生。然而,大多數(shù)人所希望的職業(yè)生涯與軟件開發(fā)那黑暗且令人沮喪的現(xiàn)實之間存在著巨大的差距。整個軟件行業(yè)正處于一場深刻的危機之中。因為軟件開發(fā)是多維的,所以導致了非常嚴重的危機,而軟件開發(fā)的每個方面都被打破了:
成本。一個項目的預算與實際開發(fā)該系統(tǒng)的成本之間的相關(guān)性很弱。許多組織甚至不愿意解決成本問題,可能是因為它們根本不知道如何解決,也可能是因為它們認識到根本承擔不起系統(tǒng)的高昂成本。即使新系統(tǒng)的個版本的成本是合理的,但由于設計不當和無法適應變化,整個生命周期的系統(tǒng)成本也往往會遠高于預期。隨著時間的推移,維護成本變得非常高,以至于公司通常會決定從頭開始,新系統(tǒng)很快就會像之前一樣陷入同樣甚至更糟糕的局面。而其他任何行業(yè)都不會選擇定期從頭開始,因為這樣做沒有經(jīng)濟意義。航空公司維護大型噴氣式飛機幾十年,而一棟房子可能維護整整一個世紀。
進度。后期限(deadline)的設定通常是武斷的、無法實現(xiàn)的,因為它與實際開發(fā)系統(tǒng)所需的時間幾乎沒有關(guān)系。對于大多數(shù)開發(fā)人員來說,后期限是無用的東西,它會在團隊努力工作的時候呼嘯而過。如果開發(fā)團隊確實在后期限之前完成了任務,那么每個人都會感到驚訝,因為沒有人指望它能按時完成。這也是一個糟糕的系統(tǒng)設計的直接結(jié)果,它會導致系統(tǒng)的變更和新工作的連鎖反應,并使以前完成的工作失效。而且,這是一個非常低效的開發(fā)過程的結(jié)果,它忽略了活動之間的依賴關(guān)系和構(gòu)建系統(tǒng)的快、安全的方式。不僅整個系統(tǒng)的上市時間相當長,而且單個功能的上市時間也可能很夸張。當項目的進度出現(xiàn)延誤時,情況已經(jīng)很糟了;當管理層和客戶都不知道這個延誤時,情況就更糟了,因為沒有人知道這個項目的真實狀況。
需求。開發(fā)人員往往終解決了錯誤的問題。終端客戶或其內(nèi)部環(huán)節(jié)參與者(如市場營銷人員)與開發(fā)團隊之間的溝通始終存在問題。大多數(shù)開發(fā)人員也無法適應他們未能捕獲需求的情況。即使需求被完美地傳達下去,它們也可能隨著時間的推移而改變。此變更將使設計無效,并破壞團隊試圖構(gòu)建的所有內(nèi)容。
人員配備。即使是普通的軟件系統(tǒng)也非常復雜,超出了人腦的理解能力。內(nèi)部和外部的復雜性是系統(tǒng)架構(gòu)不良的直接結(jié)果,這反過來又導致復雜的系統(tǒng)很難維護、擴展或重用。
維護。大多數(shù)軟件系統(tǒng)不是由開發(fā)它們的人員來維護的。新員工不了解系統(tǒng)是如何運行的,因此他們在試圖解決舊問題時不斷地引入新問題。這很快就拉高了維護成本,推遲了上市時間,甚至導致工作停頓或項目取消。
質(zhì)量。也許沒有任何其他東西可以像質(zhì)量那樣破壞軟件系統(tǒng)。軟件有缺陷,軟件這個詞本身就是缺陷的同義詞,開發(fā)人員無法想象沒有缺陷的軟件系統(tǒng)。修復缺陷通常會增加缺陷數(shù),添加功能或簡單維護也會增加缺陷數(shù)。質(zhì)量差是由不易測試、理解或維護的系統(tǒng)架構(gòu)直接導致的。同樣重要的是,大多數(shù)項目沒有考慮到基本的質(zhì)量控制活動,也沒有為每項活動分配足夠的時間,使其可以無可挑剔地完成。
幾十年前,業(yè)界開始開發(fā)解決世界問題的軟件。今天,軟件開發(fā)本身就是一個的問題。軟件開發(fā)中的問題往往以非技術(shù)性的方式表現(xiàn)出來,如工作環(huán)境壓力大、人員流動率高、工作倦怠、缺乏信任、自卑,甚至身體疾病等。
軟件開發(fā)中的所有問題都不是新問題,甚至,有些人在其軟件開發(fā)的整個職業(yè)生涯中都沒有經(jīng)歷過一次正確的軟件開發(fā)過程。這使他們相信這根本不可能做到,他們對任何試圖解決這些問題的嘗試都不屑一顧,因為事情就是這樣的。他們甚至可能會與那些試圖改進軟件開發(fā)的人抗衡。他們已經(jīng)得出結(jié)論,這個目標是不可能實現(xiàn)的,所以任何嘗試取得更好結(jié)果的人,都是在試圖做不可能的事,這侮辱了他們的智商。
我自己的過往經(jīng)歷是一個反例,表明開發(fā)人員可以成功地開發(fā)軟件系統(tǒng)。我負責的每個項目均按時、按預算、零缺陷地交付。在創(chuàng)建IDesign之后,我繼續(xù)保持了這一紀錄,我們在該領(lǐng)域一次又一次地幫助客戶兌現(xiàn)了他們的承諾。
這種持續(xù)、可重復的成功紀錄絕非偶然。我在系統(tǒng)工程領(lǐng)域(包含物理系統(tǒng)和軟件系統(tǒng))接受了培訓和教育,這使我很容易地認識到這兩個系統(tǒng)的相似之處。將實踐原則應用到軟件設計中,其他工程領(lǐng)域的常識在軟件系統(tǒng)中也是有意義的。我從來沒有想過不把軟件開發(fā)當作工程來對待,或者不經(jīng)過設計或計劃就開發(fā)一個系統(tǒng)。我認為沒有必要在我的信念上妥協(xié),也沒有必要屈服于權(quán)宜之計,因為做正確的事情才行得通,而不這樣做的可怕后果是顯而易見的。我很幸運,能有出色的導師,在正確的時間、正確的地點看到哪些有效、哪些無效,并有機會在早期參與了一些重大而關(guān)鍵的項目,使之成為優(yōu)秀案例的一部分。
近年來,我注意到該行業(yè)的問題越來越嚴重。越來越多的軟件項目失敗了。在時間和金錢上失敗成本都變得越來越高,甚至已經(jīng)完成的項目也往往偏離了初的承諾。這場危機加劇不僅僅是因為系統(tǒng)越來越大或者云計算的發(fā)展,也可能是激進的后期限或者更高的變更率。但我懷疑真正的原因是,開發(fā)隊伍中越來越缺乏如何設計和開發(fā)軟件系統(tǒng)的知識。之前大多數(shù)團隊中都有一位資深人士,他指導年輕人并傳授知識。如今,這些導師已經(jīng)或即將退休。在他們?nèi)毕那闆r下,普通人只能獲得無限的信息,卻得不到有用的知識。
我多希望有一個你做了就能解決軟件危機的方法,比如使用過程、開發(fā)方法、工具或技術(shù)。不幸的是,要解決多維問題,就需要多維解決方案。在這本書中,我提供了一個統(tǒng)一的補救方法:軟件架構(gòu)之道(righting software)。
總之,我所建議的是使用工程原理來設計和開發(fā)軟件系統(tǒng)。好消息是沒有必要重新發(fā)明輪子,其他的工程學科是相當成功的,因此軟件行業(yè)可以借用它們的關(guān)鍵通用設計思想并使其適用于軟件。你將在本書中看到一套軟件工程的基本原理,以及一套完整應用于軟件系統(tǒng)和項目的工具與技術(shù)。要獲得成功,我們必須從工程的角度出發(fā),基于時間和風險方面的考慮,確保軟件系統(tǒng)是可維護的、可擴展的、可重用的、可負擔的和可行的,這些都是工程方面的問題,而不是技術(shù)方面的問題,而且可以直接追溯到系統(tǒng)和項目的設計環(huán)節(jié)。由于軟件工程師通常指軟件開發(fā)人員,所以出現(xiàn)了術(shù)語軟件架構(gòu)師來描述團隊中負責項目所有設計方面的人。因此,我假定本書的讀者是軟件架構(gòu)師。
本書中的一些想法并不是你要正確認識的事情,但它們肯定是一個良好的開端,因為它們觸及了前面提到的問題的根源。根本原因是設計不當,無論是軟件系統(tǒng)本身還是用于構(gòu)建該系統(tǒng)的項目。你將看到,按計劃、按預算交付軟件以及設計滿足所有可能需求的系統(tǒng)是完全可能的,開發(fā)出來的系統(tǒng)也是易維護、易擴展和易重用的。希望通過實踐這些想法,你不僅能夠?qū)W會軟件系統(tǒng)構(gòu)建之道,還能助力自己的職業(yè)生涯,并重新點燃對軟件開發(fā)的熱情。
【本書的組織結(jié)構(gòu)】
本書展示了系統(tǒng)設計和項目設計的結(jié)構(gòu)化工程方法。本書的結(jié)構(gòu)反映了方法論的兩個部分:系統(tǒng)設計(通常稱為架構(gòu))和項目設計。這兩部分相輔相成,是成功的必要條件。附錄提供了一些補充內(nèi)容。
在大多數(shù)技術(shù)書籍中,每一章只針對一個主題并深入探討,這樣更容易編寫,但這通常不是人們學習的方式。相比之下,在這本書中,講解是螺旋式的。本書的兩大部分中的每一
章都重申了前幾章的觀點,通過多方面的洞察來進行更深入的研究或觀點的演進。這模仿了自然的學習過程,每一章都依賴于前面的章節(jié),所以你應該按順序閱讀這些章節(jié)。本書的兩大部分均包含了詳細的案例研究,以展示這些觀點以及其他方面。同時,為了保持迭代的簡潔性,作為一般規(guī)則,我通常避免內(nèi)容重復,因此即使是關(guān)鍵知識點,也只討論一次。
以下是對各章和附錄的簡單介紹:
第1章 元設計方法
本章介紹了下列關(guān)鍵思想:要想成功,必須同時設計系統(tǒng)和用來構(gòu)建系統(tǒng)的項目。這兩種設計對于終成功都是不可或缺的。沒有架構(gòu)就無法設計項目,設計一個無法構(gòu)建的系統(tǒng)是毫無意義的。
第2章 分解
本章致力于將系統(tǒng)分解為組成其架構(gòu)的組件。大多數(shù)人以壞的方式來分解系統(tǒng),所以本章首先解釋了不該做什么。一旦這個觀念建立起來,你將學會如何正確地分解系統(tǒng),在該過程中掌握一組有用的、簡單的分析工具并獲得觀察結(jié)果。
第3章 結(jié)構(gòu)
本章提升了第2章的思想,引入了結(jié)構(gòu)。你將看到如何捕獲需求、如何對架構(gòu)分層、架構(gòu)組件的分類及相互關(guān)系、特定的分類指導原則以及一些相關(guān)的問題,如子系統(tǒng)設計。
第4章 組合
本章說明如何將系統(tǒng)組件組裝成滿足需求的有效組合。這簡短的一章包含了本書的幾個關(guān)鍵設計原則,并將前兩章的內(nèi)容轉(zhuǎn)化為將在每個系統(tǒng)中使用的強大的思維工具。
第5章 系統(tǒng)設計示例
本章是一個廣泛的案例研究,展示了迄今為止所討論的系統(tǒng)設計思想。系統(tǒng)設計螺旋結(jié)構(gòu)的后迭代提供了一個實際的系統(tǒng),使系統(tǒng)設計與業(yè)務保持一致,并展示了如何生成架構(gòu)并對其進行驗證。
第6章 動機
由于大多數(shù)人從來沒有聽說過項目設計(更不用說實踐了),本章介紹了項目設計的概念和參與項目設計的動機。這是項目設計螺旋的第0次迭代。
第7章 項目設計綜述
本章概述了如何設計一個項目,首先定義了軟件研發(fā)的成功,然后介紹了明智的決定、項目人員配備、項目網(wǎng)絡圖、關(guān)鍵路徑、安排活動和項目費用等關(guān)鍵概念。本章涵蓋了隨后各章中使用的大多數(shù)思想和技術(shù),后重點討論了角色和責任。
第8章 網(wǎng)絡和浮動時間
本章介紹了項目網(wǎng)絡及其作為設計工具的使用。你將看到如何將項目建模為一個網(wǎng)絡圖,學習浮動時間的關(guān)鍵概念,了解如何在人員配備和調(diào)度中使用浮動時間,并了解浮動時間與風險的關(guān)系。
第9章 時間和成本
本章定義了在所有項目中時間和成本之間可能的權(quán)衡,并討論了通過正確工作來加速所有項目的方法。除此之外,你還將學習壓縮的關(guān)鍵概念、時間-成本曲線和成本要素。
第10章 風險
本章介紹了大多數(shù)項目中缺少的要素:量化風險。你將看到如何度量風險并將其映射到上一章的時間和成本概念中,以及如何基于網(wǎng)絡計算風險。風險通常是評估選項的方式,也是一流的規(guī)劃工具。
第11章 實踐中的項目設計
本章通過對設計一個項目所涉及的步驟進行系統(tǒng)的演練,將前幾章的所有概念付諸使用。其目標是演示設計項目時使用的思維過程,以及如何為業(yè)務決策者審查做準備。
第12章 高級技巧
遵循螺旋式學習模型,本章介紹了高級技巧和概念。這些技巧在各種復雜程度(從簡單到挑戰(zhàn)性)的項目中都很有用,是對前幾章的補充,而且經(jīng)常會結(jié)合起來使用。
第13章 項目設計示例
本章是與第5章的系統(tǒng)設計示例相對應的項目設計示例。它也是一個案例研究,展示了設計項目端到端的過程。本章的重點是案例研究,而不是技巧。
第14章 總結(jié)
后一章從設計的技術(shù)方面進行了回顧,提供了一系列的指導、技巧、視角和開發(fā)過程思想。它從回答何時設計項目這個重要問題開始,以項目設計對質(zhì)量的影響結(jié)束。
附錄A 項目跟蹤
附錄A展示了如何在計劃方面跟蹤項目的進度,以及如何在需要時采取糾正措施。項目跟蹤更多的是關(guān)于項目管理,而不是項目設計,但它對于確保你在工作開始后履行承諾至關(guān)重要。
附錄B 服務契約設計
架構(gòu)本身是粗略的,你必須設計其每個組件的細節(jié),而這些細節(jié)中重要的是服務契約。附錄B指出了設計服務契約的正確方法。此外,關(guān)于模塊化、規(guī)模和成本的討論也很好地契合了本書大多數(shù)章節(jié)的內(nèi)容。
附錄C 設計標準
附錄C匯總了本書中提到的關(guān)鍵原則、指南和禁忌事項。該標準是簡潔的,是關(guān)于什么,而不是為什么。這個標準背后的原理可以在本書的其余部分找到。
【關(guān)于讀者的假設】
雖然本書是面向軟件架構(gòu)師的,但讀者范圍更廣泛。讀者可以是架構(gòu)師、高級軟件專業(yè)人員、項目經(jīng)理或多重角色的人,也就是說,有志于提高自己技能的開發(fā)人員都將從本書中受益。無論你目前處于什么職位,本書都將為你的職業(yè)生涯打開一扇大門。當你初次閱讀本書時,可能不是一個經(jīng)驗豐富的架構(gòu)師,但是一旦你閱讀并掌握了方法論,就將躋身世界之巔。
本書的技術(shù)和思想適用于各種編程語言(如C 、Java、C#和Python)、各種平臺(如Windows、Linux、移動設備、本地環(huán)境和云)和各種項目規(guī)模(從小到的項目),還跨越所有行業(yè)(從醫(yī)療保健到國防)及所有商業(yè)模式和公司規(guī)模(從初創(chuàng)企業(yè)到大型公司)。
我對讀者做出的重要假設是,你在深層次上關(guān)心自己的工作,而當前的失敗和浪費使你感到苦惱。你想做得更好,但是缺乏指導,或者為不良的做法所困擾。
使用本書的要訣
閱讀本書的先決條件是開放的心態(tài),過去的失敗經(jīng)歷和挫折是加分項。
其他在線資源
本書的網(wǎng)頁提供了示例文件、附錄和勘誤表?梢酝ㄟ^以下網(wǎng)址訪問此頁:
http://www.rightingsoftware.org
你可以在本書的下載支持文件鏈接下找到示例文件和相關(guān)的支持材料。
有關(guān)本書的其他信息,請訪問informit.com/title/9780136524038。
作者簡介:
居瓦-洛瑞(Juval Lowy) IDesign的創(chuàng)始人,專業(yè)的軟件架構(gòu)師,專門研究系統(tǒng)和項目設計。他幫助過全球多家公司在預算內(nèi)按時交付高質(zhì)量的軟件。他被微軟公司認定為世界知名專家和行業(yè)領(lǐng)導者之一,參與了有關(guān)C#、WCF和相關(guān)技術(shù)的內(nèi)部戰(zhàn)略設計審查,并被授予軟件傳奇的稱號。 在現(xiàn)代軟件開發(fā)的主要領(lǐng)域,他出版了幾本暢銷書并發(fā)表了多篇文章。他還經(jīng)常在主要的國際軟件開發(fā)會議上進行演講,并在全球進行大師班授課。
譯者簡介:
朱少民 同濟大學特聘教授、國內(nèi)知名測試專家、軟件綠色聯(lián)盟標準評測組組長、QECon大會發(fā)起人。近30年來一直從事軟件測試、質(zhì)量管理等工作,先后獲得多項省部級科技進步獎。已出版了20多部著作和2部譯作,代表作主要有《全程軟件測試》《軟件測試方法和技術(shù)》等。經(jīng)常在國內(nèi)外學術(shù)會議或技術(shù)大會上發(fā)表演講,曾任思科(中國)軟件有限公司QA高級總監(jiān)、IEEE ICST 2019工業(yè)論壇主席等。
張元 知名外企研發(fā)總監(jiān),國內(nèi)項目管理、新產(chǎn)品開發(fā)資深專家,國家外國專家局認證講師,PMP、ACP、PBA、 NPDP、信息系統(tǒng)項目管理師。有十多年的敏捷項目管理和系統(tǒng)架構(gòu)的經(jīng)驗,對于敏捷項目實施、流程優(yōu)化、跨國團隊管理有豐富的實踐經(jīng)驗。擅長在IT領(lǐng)域為企業(yè)提供項目管理/新產(chǎn)品開發(fā)的戰(zhàn)略規(guī)劃、實施與優(yōu)化的解決方案。
丁慧 世界五百強公司研發(fā)高級經(jīng)理,負責產(chǎn)品開發(fā)及組織戰(zhàn)略與發(fā)展工作。兼任精益六西格瑪黑帶教練、問題解決教練和研發(fā)敏捷教練, 南京大學和東南大學客座講師。ISO9001標準主任審核員,ISO27001、ISO14001、CMMI 審核員。15年以上軟件開發(fā)、項目管理、過程改進、質(zhì)量管理和團隊管理經(jīng)驗。
周倩嫣 PerfMa市場運營總監(jiān),負責公司市場運營模式、競爭戰(zhàn)略、實施規(guī)劃等方面的管理工作。曾擔任國內(nèi)某面向全球的信息技術(shù)服務企業(yè)的軟件質(zhì)量負責人,負責Adobe、TrendMicro、Citrix、Sage等產(chǎn)品的離岸測試中心項目管理,組建團隊并不斷提升團隊的測試遞交能力,同時協(xié)調(diào)美國、印度、荷蘭、澳大利亞等多國項目干系人,保證產(chǎn)品質(zhì)量的穩(wěn)步提升。
金澤鋒 中興通訊首席研發(fā)教練,無線研究院軟件過程總工,20多年研發(fā)領(lǐng)域一線開發(fā)管理經(jīng)驗,持續(xù)關(guān)注敏捷精益和嵌入式開發(fā)領(lǐng)域的實踐,擁有多個大規(guī)模項目的轉(zhuǎn)型變革經(jīng)驗。
第1章 元設計方法 / 1
1.1 什么是元設計方法 / 2
1.1.1 設計驗證 / 3
1.1.2 緊迫的時間 / 3
1.1.3 消除分析癱瘓 / 4
1.1.4 溝通 / 5
1.2 元設計方法不是什么 / 6
|部分| 系統(tǒng)設計
第2章 分解 / 8
2.1 避免功能分解 / 9
2.1.1 功能分解帶來的問題 / 9
2.1.2 關(guān)于功能分解的思考 / 13
2.1.3 避免領(lǐng)域分解 / 15
2.1.4 錯誤的動機 / 17
2.1.5 可測試性和設計 / 17
2.1.6 示例:功能型交易系統(tǒng) / 19
2.2 基于易變性的分解 / 21
2.2.1 分解、維護和開發(fā) / 22
2.2.2 普遍性原則 / 23
2.2.3 基于易變性的分解與測試 / 24
2.2.4 易變性的挑戰(zhàn) / 24
2.3 識別易變性 / 26
2.3.1 易變性與可變性 / 26
2.3.2 易變軸 / 27
2.3.3 偽裝成需求的解決方案 / 29
2.3.4 易變列表 / 30
2.3.5 示例:基于易變性的交易系統(tǒng) / 30
2.3.6 抵制塞壬之歌 / 34
2.3.7 易變性與業(yè)務 / 35
2.3.8 為競爭對手設計 / 37
2.3.9 易變性和壽命 / 38
2.3.10 實踐的重要性 / 38
第3章 結(jié)構(gòu) / 40
3.1 用例和需求 / 41
3.2 分層方法 / 43
3.3 典型分層 / 44
3.3.1 客戶端層 / 44
3.3.2 業(yè)務邏輯層 / 45
3.3.3 資源訪問層 / 46
3.3.4 資源層 / 47
3.3.5 實用工具庫欄 / 48
3.4 分類指南 / 48
3.4.1 命名的玄機 / 48
3.4.2 四個問題 / 49
3.4.3 管理器與引擎比 / 50
3.4.4 關(guān)鍵觀察 / 51
3.5 子系統(tǒng)和服務 / 52
3.5.1 增量構(gòu)造 / 52
3.5.2 關(guān)于微服務 / 54
3.6 開放和封閉式架構(gòu) / 56
3.6.1 開放式架構(gòu) / 56
3.6.2 封閉式架構(gòu) / 56
3.6.3 半封閉/半開放架構(gòu) / 57
3.6.4 放寬規(guī)則 / 57
3.6.5 設計禁忌 / 59
3.6.6 力求對稱 / 61
第4章 組合 / 62
4.1 需求與變更 / 62
4.1.1 憎恨變更 / 63
4.1.2 設計基本準則 / 63
4.2 可組合設計 / 64
4.2.1 核心用例 / 64
4.2.2 架構(gòu)師的使命 / 65
4.3 這里沒有功能 / 68
4.4 處理變更 / 69
第5章 系統(tǒng)設計示例 / 71
5.1 系統(tǒng)概述 / 72
5.1.1 遺留系統(tǒng) / 73
5.1.2 新系統(tǒng) / 74
5.1.3 公司 / 74
5.1.4 用例 / 74
5.2 反設計工作 / 80
5.2.1 巨型系統(tǒng) / 80
5.2.2 顆粒化構(gòu)建塊 / 80
5.2.3 域分解 / 81
5.3 業(yè)務對齊 / 82
5.3.1 愿景 / 82
5.3.2 業(yè)務目標 / 83
5.3.3 使命陳述 / 84
5.4 架構(gòu) / 84
5.4.1 TradeMe詞匯表 / 84
5.4.2 TradeMe易變區(qū)域 / 85
5.4.3 靜態(tài)架構(gòu) / 88
5.4.4 操作概念 / 90
5.4.5 工作流管理器 / 92
5.5 設計驗證 / 93
5.5.1 添加技工/承包商用例 / 94
5.5.2 請求技工用例 / 95
5.5.3 匹配技工用例 / 96
5.5.4 分配技工用例 / 98
5.5.5 終止技工用例 / 100
5.5.6 支付技工用例 / 101
5.5.7 創(chuàng)建項目用例 / 101
5.5.8 結(jié)束項目用例 / 102
5.6 接下來會是什么 / 103
|第二部分| 項目設計
第6章 動機 / 106
6.1 項目設計的背景和基本動機 / 106
6.1.1 項目設計和項目穩(wěn)健 / 107
6.1.2 組裝說明 / 108
6.2 軟件項目的需求層級 / 108
第7章 項目設計綜述 / 111
7.1 定義成功 / 111
7.2 項目初始人員配備 / 113
7.2.1 一個架構(gòu)師,非一群架構(gòu)師 / 113
7.2.2 核心團隊 / 114
7.3 明智的決定 / 116
7.3.1 計劃,不計劃 / 116
7.3.2 軟件開發(fā)計劃評審 / 117
7.4 服務和開發(fā)人員 / 117
7.4.1 設計和團隊效率 / 119
7.4.2 任務連續(xù)性 / 120
7.5 工作量的估算 / 120
7.5.1 經(jīng)典錯誤 / 121
7.5.2 估算技術(shù) / 123
7.5.3 總體項目估算 / 124
7.5.4 活動估算 / 126
7.6 關(guān)鍵路徑分析 / 127
7.6.1 項目網(wǎng)絡圖 / 127
7.6.2 關(guān)鍵路徑 / 130
7.6.3 分配資源 / 131
7.7 安排活動 / 134
7.8 項目費用 / 140
7.9 掙值計劃 / 143
7.9.1 經(jīng)典錯誤 / 144
7.9.2 淺S曲線 / 145
7.10 角色和責任 / 148
第8章 網(wǎng)絡和浮動時間 / 149
8.1 網(wǎng)絡圖 / 149
8.1.1 節(jié)點圖 / 150
8.1.2 箭頭圖 / 150
8.1.3 箭頭圖與節(jié)點圖 / 151
8.2 浮動時間 / 152
8.2.1 總浮動時間 / 153
8.2.2 自由浮動時間 / 153
8.2.3 計算浮動時間 / 154
8.2.4 可視化浮動時間 / 155
8.3 基于浮動時間的進度安排 / 157
第9章 時間和成本 / 159
9.1 加速軟件項目 / 159
9.2 進度壓縮 / 162
9.2.1 利用更好的資源 / 162
9.2.2 并行工作 / 162
9.2.3 并行工作和成本 / 164
9.3 時間-成本曲線 / 164
9.3.1 時間-成本曲線上的要點 / 165
9.3.2 離散建模 / 167
9.3.3 避免經(jīng)典錯誤 / 168
9.3.4 項目可行性 / 168
9.3.5 找到常規(guī)方案 / 169
9.4 項目成本要素 / 171
9.4.1 直接成本 / 171
9.4.2 間接成本 / 172
9.4.3 會計與價值 / 172
9.4.4 總成本、直接成本和間接成本 / 172
9.4.5 壓縮和成本要素 / 173
9.4.6 人員配備和成本要素 / 176
9.4.7 固定成本 / 178
9.5 網(wǎng)絡壓縮 / 178
第10章 風險 / 181
10.1 選擇選項 / 181
10.2 時間-風險曲線 / 182
10.3 風險建模 / 184
10.3.1 標準化風險 / 185
10.3.2 風險和浮動 / 185
10.3.3 風險和直接成本 / 186
10.3.4 臨界風險 / 186
10.3.5 斐波那契風險 / 188
10.3.6 活動風險 / 189
10.3.7 臨界風險與活動風險 / 191
10.4 壓縮和風險 / 191
10.5 風險緩解 / 192
10.5.1 如何緩解 / 192
10.5.2 緩解目標 / 193
10.6 風險指標 / 194
第11章 實踐中的項目設計 / 196
11.1 使命 / 196
11.1.1 靜態(tài)架構(gòu) / 197
11.1.2 調(diào)用鏈 / 197
11.1.3 活動清單 / 199
11.1.4 網(wǎng)絡圖 / 200
11.1.5 計劃假設 / 201
11.2 尋找常規(guī)的解決方案 / 203
11.2.1 無限的資源(迭代1) / 203
11.2.2 網(wǎng)絡和資源問題 / 204
11.2.3 基礎(chǔ)設施優(yōu)先(迭代2) / 204
11.2.4 有限的資源 / 205
11.2.5 亞臨界化(迭代7) / 208
11.2.6 選擇常規(guī)的解決方案 / 211
11.3 網(wǎng)絡壓縮 / 211
11.3.1 使用更好的資源進行壓縮 / 211
11.3.2 引入并行工作 / 213
11.3.3 壓縮迭代結(jié)束 / 219
11.3.4 產(chǎn)出分析 / 219
11.4 效率分析 / 221
11.5 時間-成本曲線 / 221
11.5.1 時間-成本相關(guān)模型 / 222
11.5.2 死亡區(qū)域 / 224
11.6 規(guī)劃與風險 / 225
11.6.1 風險緩解 / 226
11.6.2 重建時間-成本曲線 / 228
11.6.3 風險模型化 / 230
11.6.4 風險包含與排除 / 232
11.7 SDP評審 / 232
第12章 高級技巧 / 234
12.1 上帝活動 / 234
12.2 風險交叉點 / 235
12.3 找到緩解目標 / 238
12.4 幾何風險 / 240
12.4.1 幾何臨界風險 / 241
12.4.2 幾何斐波那契風險 / 241
12.4.3 幾何活動風險 / 242
12.4.4 幾何風險行為 / 243
12.5 執(zhí)行復雜度 / 244
12.5.1 圈復雜度 / 244
12.5.2 項目類型與復雜度 / 245
12.5.3 項目壓縮與復雜度 / 246
12.6 超大型項目 / 247
12.6.1 復雜系統(tǒng)與脆弱性 / 248
12.6.2 網(wǎng)絡群 / 250
12.6.3 設計網(wǎng)絡群 / 250
12.7 小項目 / 253
12.8 基于層次設計 / 253
12.8.1 基于層次設計的利弊 / 254
12.8.2 層次與構(gòu)造 / 255
第13章 項目設計示例 / 256
13.1 估算 / 257
13.1.1 單個活動估算 / 257
13.1.2 總體項目估算 / 258
13.2 依賴關(guān)系和項目網(wǎng)絡 / 259
13.2.1 行為依賴 / 259
13.2.2 非行為依賴 / 259
13.2.3 覆蓋某些依賴 / 260
13.2.4 完整性檢查 / 260
13.3 常規(guī)方案 / 261
13.3.1 網(wǎng)絡圖 / 261
13.3.2 計劃進度 / 263
13.3.3 計劃的人員配備分布 / 263
13.3.4 成本和效率 / 264
13.3.5 結(jié)果總結(jié) / 264
13.4 壓縮方案 / 264
13.4.1 添加啟用活動 / 264
13.4.2 分配資源 / 265
13.4.3 計劃進度 / 266
13.4.4 計劃的人員配備分布 / 266
13.4.5 成本和效率 / 266
13.4.6 結(jié)果總結(jié) / 267
13.5 分層設計 / 268
13.5.1 分層設計和風險 / 268
13.5.2 人員配備分布 / 269
13.5.3 結(jié)果總結(jié) / 269
13.6 亞臨界方案 / 269
13.6.1 持續(xù)時間、計劃進度和風險 / 270
13.6.2 成本和效率 / 270
13.6.3 結(jié)果總結(jié) / 270
13.7 比較選項 / 271
13.8 計劃與風險 / 271
13.8.1 風險緩解 / 271
13.8.2 重新計算成本 / 274
13.9 為SDP評審做準備 / 274
第14章 總結(jié) / 276
14.1 項目設計時間 / 276
14.1.1 真實的答案 / 277
14.1.2 邁向未來 / 278
14.2 一般性指導 / 279
14.2.1 架構(gòu)與估算 / 279
14.2.2 設計立場 / 280
14.2.3 可選性 / 280
14.2.4 壓縮 / 281
14.2.5 計劃與風險 / 283
14.3 項目設計的設計 / 283
14.4 不同的視角 / 285
14.5 交接 / 287
14.5.1 初級交接 / 287
14.5.2 高級交接 / 287
14.5.3 資深開發(fā)人員作為初級架構(gòu)師 / 288
14.6 實踐 / 289
14.7 項目設計的口頭匯報 / 290
14.8 關(guān)于質(zhì)量 / 291
14.8.1 質(zhì)量控制活動 / 291
14.8.2 質(zhì)量保證活動 / 292
14.8.3 質(zhì)量與文化 / 293
|附錄|
附錄A 項目跟蹤 / 296
附錄B 服務契約設計 / 310
附錄C 設計標準 / 323