在軟件開(kāi)發(fā)中,需求工作致力于解決提升銷售的問(wèn)題,設(shè)計(jì)工作致力于解決降低成本的問(wèn)題,二者不能相互取代。能低成本生產(chǎn)某個(gè)系統(tǒng),不一定能保證它好賣。系統(tǒng)好賣,如果生產(chǎn)成本太高,*終還是賺不了多少錢。
如果需求和設(shè)計(jì)不分,利潤(rùn)就會(huì)縮水。從需求直接映射設(shè)計(jì),會(huì)得到大量重復(fù)代碼;如果從設(shè)計(jì)出發(fā)來(lái)定義需求,會(huì)得到一堆假的需求。
《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》在主要思想不變的前提下,結(jié)合*近幾年的發(fā)展,從文字到圖形進(jìn)行更新,每一章的內(nèi)容更加細(xì)致,道理講得更加嚴(yán)謹(jǐn),例子和練習(xí)也更加豐富,希望能給讀者提供幫助。
截至2013年7月,潘加宇老師已經(jīng)上門(mén)為超過(guò)190家軟件組織提供需求和設(shè)計(jì)技能的訓(xùn)練和咨詢服務(wù)(2017年10月的數(shù)字已超過(guò)260家)。為了更好的理解軟件方法和軟件組織,潘加宇老師推薦大家閱讀的需求和設(shè)計(jì)書(shū)籍和資料:見(jiàn)書(shū)XVI-XIX頁(yè)!盾浖椒ǎㄉ希簶I(yè)務(wù)建模和需求(第2版)》不提供練習(xí)題答案,請(qǐng)掃碼(二維碼見(jiàn)書(shū)中習(xí)題)完成在線測(cè)試,做到全對(duì),自然就知道答案了。
每當(dāng)變幻時(shí),便知時(shí)光去。
《每當(dāng)變幻時(shí)》;詞:盧國(guó)沾,曲:古賀政男,唱:薰妮;1985
前 言
2013年寫(xiě)的第一版前言,現(xiàn)在看來(lái)依然可以用,所以除了修改一些隨年份變化的數(shù)字之外,我把第一版前言附在后面,本次版本的前言就盡量寫(xiě)得簡(jiǎn)短一些。
在主要思想不變的前提下,我結(jié)合最近幾年的進(jìn)展,幾乎把整《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》重新寫(xiě)了一遍,從文字到圖形基本上都換了。每一章的內(nèi)容更細(xì)致,道理講得更嚴(yán)謹(jǐn),例子和練習(xí)也更豐富?傊,希望能給讀者帶來(lái)一本更有用的書(shū)!盾浖椒ǎㄉ希簶I(yè)務(wù)建模和需求(第2版)》出版之后,將繼續(xù)投入未寫(xiě)完的《軟件方法(下):分析和設(shè)計(jì)》。
18年過(guò)去,彈指一揮間。我已經(jīng)在這一個(gè)狹窄的領(lǐng)域泡了十八年了,也許累計(jì)的時(shí)間已經(jīng)超過(guò)了一些前輩。希望還能再研究十八年,和大家分享更多有價(jià)值的東西。
潘加宇
2017年10月
光陰匆匆似流水,它一去不再回。
《浪子歸》;詞:黃小茂,曲:崔健,唱:崔。1985
前言(2013版)
1999年還是一名程序員時(shí),我創(chuàng)建了UMLChina,從那時(shí)開(kāi)始關(guān)注軟件工程各方面的進(jìn)展。2001年12月,阿里巴巴的吳泳銘來(lái)email詢問(wèn)是否有UML方面的訓(xùn)練,我開(kāi)始準(zhǔn)備訓(xùn)練材料。2002年3月,我去杭州給阿里巴巴做了這個(gè)訓(xùn)練。雖然與后來(lái)我給阿里集團(tuán)各公司做的許多次訓(xùn)練相比,這第一次講課從內(nèi)容到形式都算是糟透了,但是我現(xiàn)在還記得當(dāng)時(shí)的心情邁出自己事業(yè)第一步的心情。
截至2013年7月,我已經(jīng)上門(mén)為超過(guò)190家軟件組織提供需求和設(shè)計(jì)技能的訓(xùn)練和咨詢服務(wù)(2017年注:2017年10月的數(shù)字為超過(guò)260家)。訓(xùn)練結(jié)束后,學(xué)員們常會(huì)問(wèn):潘老師,上完課后我們應(yīng)該看什么書(shū)?我總是回答:先不用看雜七雜八的書(shū),還是要復(fù)習(xí)我們留下的資料,那些幻燈片、練習(xí)題、模型就已經(jīng)是最好的書(shū)了,按照改進(jìn)指南先用一點(diǎn)點(diǎn)在具體項(xiàng)目上,帶著出現(xiàn)的具體困惑和我討論。雖然一再這樣強(qiáng)調(diào),有的學(xué)員還是情不自禁地拿著一本《***UML***》之類的書(shū)來(lái)問(wèn)我問(wèn)題,不管書(shū)上說(shuō)得對(duì)不對(duì)。看來(lái)寫(xiě)在正式出版物上的效果就是不一樣。
其實(shí)現(xiàn)在出書(shū)也不難,UMLChina一直在和出版社合作推介國(guó)外優(yōu)秀的軟件工程書(shū)籍,目前UMLChina的標(biāo)記已經(jīng)出現(xiàn)在三十多本軟件工程書(shū)籍上。不過(guò)我一直沒(méi)有自己寫(xiě)一《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》,主要原因還是覺(jué)得積累不夠,思考的深度也不夠,對(duì)軟件開(kāi)發(fā)的認(rèn)識(shí)還在不斷變化。如果沒(méi)有自己成形的東西,不能站在別人的肩膀上看得更遠(yuǎn),只是摘抄別人的觀點(diǎn),這樣的書(shū)有什么意義呢?
另外一個(gè)原因是,UMLChina后來(lái)采取了隱形、關(guān)門(mén)的策略,秉持內(nèi)外有別的原則。我關(guān)閉了已經(jīng)有4萬(wàn)多人的Smiling電子小組(也是為了降低某些風(fēng)險(xiǎn)),網(wǎng)站不再有公開(kāi)的社區(qū),在網(wǎng)站上也找不到客戶名單,所有更細(xì)致的服務(wù)以非公開(kāi)的方式對(duì)會(huì)員提供。在這種情況下,出一《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》也不是那么迫切。
現(xiàn)在距離第一次提供服務(wù)已經(jīng)超過(guò)10年(2017年注:已經(jīng)超過(guò)15年了),也有了一些積累,所以硬著頭皮也要開(kāi)始寫(xiě)書(shū)了。在這些年的服務(wù)過(guò)程中,和開(kāi)發(fā)團(tuán)隊(duì)談到改進(jìn)時(shí),我發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象:很多開(kāi)發(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è)開(kāi)發(fā)團(tuán)隊(duì)都會(huì)在細(xì)節(jié)上和其他團(tuán)隊(duì)有所不同,而且也應(yīng)該有所不同,但很多時(shí)候,我還是感覺(jué)到,開(kāi)發(fā)團(tuán)隊(duì)高估了自己的個(gè)性,低估了共性!盾浖椒ǎㄉ希簶I(yè)務(wù)建模和需求(第2版)》就是歸納這樣一些共性,作為我的一家之言,供大家參考。感謝曾經(jīng)選擇我的服務(wù)的伙伴們。他們一次次地給我機(jī)會(huì)來(lái)實(shí)踐、發(fā)展和錘煉技藝,才有了這《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》。
《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》中所講述的技能集合也是我本人身體力行的。例如,您可能已經(jīng)注意到,為《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》寫(xiě)推薦序的正是《軟件方法(上):業(yè)務(wù)建模和需求(第2版)》的老大,他不是什么大師專家名人,而是一名經(jīng)歷了入職、升職和創(chuàng)業(yè),不斷成長(zhǎng)的軟件開(kāi)發(fā)人員。
一些書(shū)籍作者喜歡在書(shū)中每一章的開(kāi)頭放上和該章內(nèi)容相關(guān)的一幅畫(huà)或一句名人名言,我也效仿一下,不過(guò)沒(méi)那么高雅每章的開(kāi)頭放上和該章內(nèi)容相關(guān)的一句歌詞。
書(shū)中的模型圖,如果是我為了講解知識(shí)而畫(huà)的,用的建模工具是Enterprise Architect 9(2017年注:改為Enterprise
Architect 13);如果是截取真實(shí)模型的圖片,可能會(huì)涉及各種工具。我不像Robert C. Martin那樣,女兒已經(jīng)長(zhǎng)大到可以幫畫(huà)插圖,所以書(shū)中的手繪插圖,我都自己用Wacom 筆來(lái)畫(huà),可能丑了一些,請(qǐng)見(jiàn)諒。
潘加宇
2013年10月
潘加宇UMLChina首席專家從1999年起潛心研究需求和設(shè)計(jì)技能。2002年開(kāi)始對(duì)外提供UML需求和設(shè)計(jì)的技術(shù)指導(dǎo)和訓(xùn)練服務(wù)。到2017年為止,已經(jīng)上門(mén)為超過(guò)260家的組織提供服務(wù),覆蓋國(guó)內(nèi)各個(gè)領(lǐng)域的領(lǐng)袖企業(yè),包括通信、企業(yè)管理、電子商務(wù)、房地產(chǎn)、網(wǎng)絡(luò)游戲、地理信息、物流、數(shù)碼設(shè)備、醫(yī)療設(shè)備、工業(yè)控制等。潘加宇聯(lián)系方式:見(jiàn)書(shū)第XIV頁(yè)。
目 錄
第1章 建模和UML 1
1.1 粗放經(jīng)營(yíng)的時(shí)代已經(jīng)遠(yuǎn)去 1
1.2 利潤(rùn)=需求-設(shè)計(jì) 2
1.3 建模工作流 4
1.4 UML簡(jiǎn)史 11
1.5 UML應(yīng)用于建模工作流 14
1.6 基本共識(shí)上的溝通 16
1.7 建模和敏捷(Agile) 19
1.8 什么樣的系統(tǒng)不需要建模 21
1.8.1 市場(chǎng)沒(méi)有小系統(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)帶來(lái)的 57
2.3.4 改進(jìn)目標(biāo)應(yīng)來(lái)自老大的視角 58
2.3.5 多個(gè)目標(biāo)之間的權(quán)衡 59
2.4 【案例和工具操作】愿景 61
第3章業(yè)務(wù)建模之業(yè)務(wù)用例圖 65
3.1 軟件是組織的零件 65
3.2 【步驟】識(shí)別業(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 識(shí)別業(yè)務(wù)執(zhí)行者 71
3.3 【步驟】識(shí)別業(yè)務(wù)用例 75
3.3.1 正確理解價(jià)值 77
3.3.2 識(shí)別業(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 抽象級(jí)別是系統(tǒng)之間的協(xié)作 102
4.2.3 只畫(huà)核心域相關(guān)的系統(tǒng) 106
4.2.4 把時(shí)間看作特殊的業(yè)務(wù)實(shí)體 107
4.2.5 為業(yè)務(wù)對(duì)象分配合適的責(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)狀誤解為本開(kāi)發(fā)團(tuán)隊(duì)未參與之前
111
4.3.4 錯(cuò)誤:把現(xiàn)狀誤解為規(guī)范 112
4.3.5 錯(cuò)誤:我是創(chuàng)新,沒(méi)有現(xiàn)狀 112
4.3.6 錯(cuò)誤:我做產(chǎn)品,沒(méi)有現(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ú)立對(duì)外提供服務(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 【步驟】識(shí)別系統(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)用例不存在層次問(wèn)題 170
5.3.6 用例的命名是動(dòng)賓結(jié)構(gòu) 173
5.4 【步驟】識(shí)別系統(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 問(wèn)卷調(diào)查 250
7.2.3 訪談 251
7.2.4 觀察 253
7.2.5 研究競(jìng)爭(zhēng)對(duì)手 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
書(shū)評(píng) 263