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