在軟件開發(fā)中,需求工作致力于解決提升銷售的問題,設計工作致力于解決降低成本的問題,二者不能相互取代。能低成本生產(chǎn)某個系統(tǒng),不一定能保證它好賣。系統(tǒng)好賣,如果生產(chǎn)成本太高,*終還是賺不了多少錢。
如果需求和設計不分,利潤就會縮水。從需求直接映射設計,會得到大量重復代碼;如果從設計出發(fā)來定義需求,會得到一堆假的需求。
《軟件方法(上):業(yè)務建模和需求(第2版)》在主要思想不變的前提下,結(jié)合*近幾年的發(fā)展,從文字到圖形進行更新,每一章的內(nèi)容更加細致,道理講得更加嚴謹,例子和練習也更加豐富,希望能給讀者提供幫助。
截至2013年7月,潘加宇老師已經(jīng)上門為超過190家軟件組織提供需求和設計技能的訓練和咨詢服務(2017年10月的數(shù)字已超過260家)。為了更好的理解軟件方法和軟件組織,潘加宇老師推薦大家閱讀的需求和設計書籍和資料:見書XVI-XIX頁。《軟件方法(上):業(yè)務建模和需求(第2版)》不提供練習題答案,請掃碼(二維碼見書中習題)完成在線測試,做到全對,自然就知道答案了。
每當變幻時,便知時光去。
《每當變幻時》;詞:盧國沾,曲:古賀政男,唱:薰妮;1985
前 言
2013年寫的第一版前言,現(xiàn)在看來依然可以用,所以除了修改一些隨年份變化的數(shù)字之外,我把第一版前言附在后面,本次版本的前言就盡量寫得簡短一些。
在主要思想不變的前提下,我結(jié)合最近幾年的進展,幾乎把整《軟件方法(上):業(yè)務建模和需求(第2版)》重新寫了一遍,從文字到圖形基本上都換了。每一章的內(nèi)容更細致,道理講得更嚴謹,例子和練習也更豐富?傊,希望能給讀者帶來一本更有用的書!盾浖椒ǎㄉ希簶I(yè)務建模和需求(第2版)》出版之后,將繼續(xù)投入未寫完的《軟件方法(下):分析和設計》。
18年過去,彈指一揮間。我已經(jīng)在這一個狹窄的領域泡了十八年了,也許累計的時間已經(jīng)超過了一些前輩。希望還能再研究十八年,和大家分享更多有價值的東西。
潘加宇
2017年10月
光陰匆匆似流水,它一去不再回。
《浪子歸》;詞:黃小茂,曲:崔健,唱:崔健;1985
前言(2013版)
1999年還是一名程序員時,我創(chuàng)建了UMLChina,從那時開始關注軟件工程各方面的進展。2001年12月,阿里巴巴的吳泳銘來email詢問是否有UML方面的訓練,我開始準備訓練材料。2002年3月,我去杭州給阿里巴巴做了這個訓練。雖然與后來我給阿里集團各公司做的許多次訓練相比,這第一次講課從內(nèi)容到形式都算是糟透了,但是我現(xiàn)在還記得當時的心情邁出自己事業(yè)第一步的心情。
截至2013年7月,我已經(jīng)上門為超過190家軟件組織提供需求和設計技能的訓練和咨詢服務(2017年注:2017年10月的數(shù)字為超過260家)。訓練結(jié)束后,學員們常會問:潘老師,上完課后我們應該看什么書?我總是回答:先不用看雜七雜八的書,還是要復習我們留下的資料,那些幻燈片、練習題、模型就已經(jīng)是最好的書了,按照改進指南先用一點點在具體項目上,帶著出現(xiàn)的具體困惑和我討論。雖然一再這樣強調(diào),有的學員還是情不自禁地拿著一本《***UML***》之類的書來問我問題,不管書上說得對不對。看來寫在正式出版物上的效果就是不一樣。
其實現(xiàn)在出書也不難,UMLChina一直在和出版社合作推介國外優(yōu)秀的軟件工程書籍,目前UMLChina的標記已經(jīng)出現(xiàn)在三十多本軟件工程書籍上。不過我一直沒有自己寫一《軟件方法(上):業(yè)務建模和需求(第2版)》,主要原因還是覺得積累不夠,思考的深度也不夠,對軟件開發(fā)的認識還在不斷變化。如果沒有自己成形的東西,不能站在別人的肩膀上看得更遠,只是摘抄別人的觀點,這樣的書有什么意義呢?
另外一個原因是,UMLChina后來采取了隱形、關門的策略,秉持內(nèi)外有別的原則。我關閉了已經(jīng)有4萬多人的Smiling電子小組(也是為了降低某些風險),網(wǎng)站不再有公開的社區(qū),在網(wǎng)站上也找不到客戶名單,所有更細致的服務以非公開的方式對會員提供。在這種情況下,出一《軟件方法(上):業(yè)務建模和需求(第2版)》也不是那么迫切。
現(xiàn)在距離第一次提供服務已經(jīng)超過10年(2017年注:已經(jīng)超過15年了),也有了一些積累,所以硬著頭皮也要開始寫書了。在這些年的服務過程中,和開發(fā)團隊談到改進時,我發(fā)現(xiàn)一個有趣的現(xiàn)象:很多開發(fā)團隊(不是每個團隊)或多或少都會有人(不是每個人)或明或暗地表達出這樣的觀點自己團隊的難處與眾不同,奇特的困難降臨在他們身上,偏偏別人得以幸免。
盡管UMLChina一直強調(diào)自己的服務是聚焦最后一公里,堅信每一個開發(fā)團隊都會在細節(jié)上和其他團隊有所不同,而且也應該有所不同,但很多時候,我還是感覺到,開發(fā)團隊高估了自己的個性,低估了共性!盾浖椒ǎㄉ希簶I(yè)務建模和需求(第2版)》就是歸納這樣一些共性,作為我的一家之言,供大家參考。感謝曾經(jīng)選擇我的服務的伙伴們。他們一次次地給我機會來實踐、發(fā)展和錘煉技藝,才有了這《軟件方法(上):業(yè)務建模和需求(第2版)》。
《軟件方法(上):業(yè)務建模和需求(第2版)》中所講述的技能集合也是我本人身體力行的。例如,您可能已經(jīng)注意到,為《軟件方法(上):業(yè)務建模和需求(第2版)》寫推薦序的正是《軟件方法(上):業(yè)務建模和需求(第2版)》的老大,他不是什么大師專家名人,而是一名經(jīng)歷了入職、升職和創(chuàng)業(yè),不斷成長的軟件開發(fā)人員。
一些書籍作者喜歡在書中每一章的開頭放上和該章內(nèi)容相關的一幅畫或一句名人名言,我也效仿一下,不過沒那么高雅每章的開頭放上和該章內(nèi)容相關的一句歌詞。
書中的模型圖,如果是我為了講解知識而畫的,用的建模工具是Enterprise Architect 9(2017年注:改為Enterprise
Architect 13);如果是截取真實模型的圖片,可能會涉及各種工具。我不像Robert C. Martin那樣,女兒已經(jīng)長大到可以幫畫插圖,所以書中的手繪插圖,我都自己用Wacom 筆來畫,可能丑了一些,請見諒。
潘加宇
2013年10月
潘加宇UMLChina首席專家從1999年起潛心研究需求和設計技能。2002年開始對外提供UML需求和設計的技術指導和訓練服務。到2017年為止,已經(jīng)上門為超過260家的組織提供服務,覆蓋國內(nèi)各個領域的領袖企業(yè),包括通信、企業(yè)管理、電子商務、房地產(chǎn)、網(wǎng)絡游戲、地理信息、物流、數(shù)碼設備、醫(yī)療設備、工業(yè)控制等。潘加宇聯(lián)系方式:見書第XIV頁。
目 錄
第1章 建模和UML 1
1.1 粗放經(jīng)營的時代已經(jīng)遠去 1
1.2 利潤=需求-設計 2
1.3 建模工作流 4
1.4 UML簡史 11
1.5 UML應用于建模工作流 14
1.6 基本共識上的溝通 16
1.7 建模和敏捷(Agile) 19
1.8 什么樣的系統(tǒng)不需要建模 21
1.8.1 市場沒有小系統(tǒng) 21
1.8.2 你的系統(tǒng)不特別 23
1.9 案例介紹 24
1.10 模型的組織 25
1.11 工具操作 28
第2章 業(yè)務建模之愿景 33
2.1 什么是愿景(Vision) 33
2.2 【步驟】定位目標組織和老大 35
2.2.1 目標組織和老大的含義 35
2.2.2 定位情況1:定位目標人群和老大 37
2.2.3 定位情況2:定位機構范圍和老大 42
2.2.4 定位情況3:定位目標機構 46
2.2.5 其他一些要點 47
2.3 【步驟】提煉改進目標 53
2.3.1 改進目標不是系統(tǒng)功能需求 53
2.3.2 改進目標不是系統(tǒng)的質(zhì)量需求 56
2.3.3 改進是系統(tǒng)帶來的 57
2.3.4 改進目標應來自老大的視角 58
2.3.5 多個目標之間的權衡 59
2.4 【案例和工具操作】愿景 61
第3章業(yè)務建模之業(yè)務用例圖 65
3.1 軟件是組織的零件 65
3.2 【步驟】識別業(yè)務執(zhí)行者 68
3.2.1 業(yè)務執(zhí)行者(Business Actor) 68
3.2.2 業(yè)務工人和業(yè)務實體 68
3.2.3 識別業(yè)務執(zhí)行者 71
3.3 【步驟】識別業(yè)務用例 75
3.3.1 正確理解價值 77
3.3.2 識別業(yè)務用例的思路和常犯錯誤 80
3.4 【案例和工具操作】業(yè)務用例圖 88
第4章業(yè)務建模之業(yè)務序列圖 95
4.1 描述業(yè)務流程的手段 95
4.1.1 文本 95
4.1.2 活動圖 96
4.1.3 序列圖 97
4.1.4 序列圖和活動圖比較 98
4.2 業(yè)務序列圖要點 101
4.2.1 消息代表責任分配而不是數(shù)據(jù)流動 101
4.2.2 抽象級別是系統(tǒng)之間的協(xié)作 102
4.2.3 只畫核心域相關的系統(tǒng) 106
4.2.4 把時間看作特殊的業(yè)務實體 107
4.2.5 為業(yè)務對象分配合適的責任 107
4.3 【步驟】現(xiàn)狀業(yè)務序列圖 109
4.3.1 錯誤:把想象中的改進當成現(xiàn)狀 110
4.3.2 錯誤:把現(xiàn)狀誤解為純手工 110
4.3.3 錯誤:把現(xiàn)狀誤解為本開發(fā)團隊未參與之前
111
4.3.4 錯誤:把現(xiàn)狀誤解為規(guī)范 112
4.3.5 錯誤:我是創(chuàng)新,沒有現(xiàn)狀 112
4.3.6 錯誤:我做產(chǎn)品,沒有現(xiàn)狀 112
4.4 【案例和工具操作】現(xiàn)狀業(yè)務序列圖 115
4.5 【步驟】改進業(yè)務序列圖 124
4.5.1 改進模式一:物流變成信息流 125
4.5.2 改進模式二:改善信息流轉(zhuǎn) 126
4.5.3 改進模式三:封裝領域邏輯 129
4.5.4 阿布思考法 131
4.6 【案例和工具操作】改進業(yè)務序列圖 137
第5章需求之系統(tǒng)用例圖 145
5.1 系統(tǒng)執(zhí)行者要點 145
5.1.1 系統(tǒng)是能獨立對外提供服務的整體 146
5.1.2 系統(tǒng)邊界是責任的邊界 147
5.1.3 系統(tǒng)執(zhí)行者和系統(tǒng)有交互 149
5.1.4 交互是功能性交互 151
5.1.5 系統(tǒng)執(zhí)行者可以是人或非人系統(tǒng) 152
5.2 【步驟】識別系統(tǒng)執(zhí)行者 154
5.3 系統(tǒng)用例要點 158
5.3.1 價值是買賣的平衡點 158
5.3.2 價值不等于可以這樣做 160
5.3.3 增刪改查用例的根源是從設計映射需求 163
5.3.4 從設計映射需求錯誤二:復用用例 165
5.3.5 系統(tǒng)用例不存在層次問題 170
5.3.6 用例的命名是動賓結(jié)構 173
5.4 【步驟】識別系統(tǒng)用例 178
5.5 【案例和工具操作】系統(tǒng)用例圖 181
第6章需求之系統(tǒng)用例規(guī)約 187
6.1 用例規(guī)約的內(nèi)容 187
6.1.1 前置條件和后置條件 188
6.1.2 涉眾利益 193
6.1.3 基本路徑 200
6.1.4 擴展路徑 211
6.1.5 補充約束 217
6.2 【案例和工具操作】系統(tǒng)用例規(guī)約 227
第7章需求啟發(fā) 245
7.1 需求啟發(fā)要點 245
7.2 需求啟發(fā)手段 249
7.2.1 研究資料 249
7.2.2 問卷調(diào)查 250
7.2.3 訪談 251
7.2.4 觀察 253
7.2.5 研究競爭對手 254
7.3 需求人員的素質(zhì)培養(yǎng) 255
7.3.1 好奇心 256
7.3.2 探索力 257
7.3.3 溝通力 257
7.3.4 表達力 258
7.3.5 熱情 258
書評 263