成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

軟件分析與設(shè)計:分析什么?如何設(shè)計?

開發(fā) 開發(fā)工具
分析與設(shè)計這兩個詞我們平時經(jīng)常聽到,也經(jīng)常講,那么分析與設(shè)計的本質(zhì)究竟是什么呢?到底要分析什么?又到底要怎樣去設(shè)計?這3個問題如果平時沒有一些積累,突然被問到這些,一時也會顯得不知所措。

[[441670]]

分析與設(shè)計這兩個詞我們平時經(jīng)常聽到,也經(jīng)常講,那么分析與設(shè)計的本質(zhì)究竟是什么呢?到底要分析什么?又到底要怎樣去設(shè)計?這3個問題如果平時沒有一些積累,突然被問到這些,一時也會顯得不知所措。接下面在第一部分中回答分析與設(shè)計的本質(zhì),只有清楚了本質(zhì),那就知道要怎么分析與設(shè)計,因此在第二、第三部分具體講軟件的分析與設(shè)計方法,最后一部分講述個人的一些思考。

一 .分析與設(shè)計的本質(zhì)

1. 分析的本質(zhì)

"分析",由"分"和"析"兩個字組成,"分"是分開的意思,這個比較好理解;"析",左"木"又"斤","斤"通"金",即把木劈開。延伸來講,分析的本質(zhì)即是洞察出事物的內(nèi)部要素,包含組成結(jié)構(gòu)、運(yùn)行機(jī)制等。平時開發(fā)同學(xué)經(jīng)常看到"需求分析"、"軟件分析"、"架構(gòu)分析"這些詞,以"需求分析"為例,分析階段要了解的內(nèi)容有:需求背景、需求目的、需求目標(biāo)、利益相關(guān)方、業(yè)務(wù)流程、業(yè)務(wù)依賴方、業(yè)務(wù)指標(biāo)。分析的目的是為了找出隱藏在現(xiàn)象背后的本質(zhì),考察的是否對事物打散認(rèn)識,深入到事物內(nèi)部去看問題,就像我們高中學(xué)習(xí)化學(xué)一樣,分子結(jié)構(gòu)決定表現(xiàn)現(xiàn)象。在實(shí)際軟件開發(fā)中,產(chǎn)品同學(xué)提的一個需求,有時它就包含了技術(shù)解決方案,只有深入分析之后,開發(fā)同學(xué)有可能提出更為合理的技術(shù)解決方案,否則只是就事論事的解決問題,在新的場景下,現(xiàn)有的解決方案又有問題。

有一個段子說一個人去做美容,剛來的一個醫(yī)生不懂人體結(jié)構(gòu),結(jié)果一刀下去,把大動脈劃破了,結(jié)果人失血過多死了,"美死你了"這個詞就是這么來的。段子歸段子,這也說明如果分析沒有做得相當(dāng)充分,也即缺乏對事物的了解,往往做事會出錯。

2. 設(shè)計的本質(zhì)

"設(shè)"和"計"兩個字都有"言"字旁,并且右邊有"多"的意思,如"十"、"又",即集多家之言。延伸來講,設(shè)計的本質(zhì)即是對方案優(yōu)中選優(yōu),包含了對方案設(shè)計的思考、取舍和權(quán)衡。只有了解了當(dāng)時的設(shè)計思想才會比較快掌握是怎樣實(shí)現(xiàn)的,在軟件編碼實(shí)現(xiàn)層面上,我們有時看到一些比較難理解的邏輯,這些邏輯就是當(dāng)時設(shè)計的產(chǎn)物,在當(dāng)時是為了解決特定的問題產(chǎn)生的。

一個好的設(shè)計凝集了設(shè)計者的思想和心血,比如經(jīng)典的文學(xué)著作,里面有優(yōu)秀的寫作手法;比如經(jīng)典的影視橋段,里有精彩的故事情節(jié);比如巧奪天工的建筑設(shè)計,里面有豐富的寓意。相反一個糟糕的設(shè)計,輕則讓人迷惑,看不懂為什么要這么設(shè)計,影響美觀、使用,重則產(chǎn)生事故,在《復(fù)雜系統(tǒng)的產(chǎn)品設(shè)計與開發(fā)》一書中,作者舉了一個輪船的例子,當(dāng)時建造輪船提了很多要求,在面對這么復(fù)雜的系統(tǒng)時,設(shè)計沒有考慮周全,結(jié)果設(shè)計出來的輪船下水就沉了。

拉曼《UML和模式應(yīng)用》一書中,對分析與設(shè)計概括成:分析是做正確的事;設(shè)計是正確地做事,之前看到這2句話挺迷糊,并沒有領(lǐng)會到這兩句的精髓,后面經(jīng)歷了一些系統(tǒng)的設(shè)計之后,重新去看發(fā)現(xiàn)這2句話高度概括出了分析與設(shè)計的本質(zhì)內(nèi)涵。

二 .到底要分析什么

1 .分析全景圖

分析的起點(diǎn)是問題本身,比如現(xiàn)象、痛點(diǎn)、挑戰(zhàn)、價值等,從這些基礎(chǔ)點(diǎn)去分析,如分析一個業(yè)務(wù)時,我喜歡從業(yè)務(wù)愿景和業(yè)務(wù)目標(biāo)去看這個業(yè)務(wù)有哪些利益相關(guān)者,也即有哪些角色在使用這個業(yè)務(wù),從這些利益相關(guān)者的角度去思考他們的本質(zhì)訴求,正是他們的訴求構(gòu)成了我們要做什么的輸入,不管外部怎么變化,他們的本質(zhì)訴求是不變的,如對于消費(fèi)者來講,他們的訴求是花最短的時間、最少的錢、更好的體驗(yàn)買到心儀的商品;對于商家來講,他們的訴求是怎么賣出更多的貨、怎樣獲得更大的利潤。反而如果我們不去關(guān)注利益關(guān)注點(diǎn)的本質(zhì)訴求,而只是自己憑空想出來的,自以為有價值,結(jié)果一落地就出現(xiàn)了問題。

當(dāng)明確了要做什么(What)之后,接下來就要思考業(yè)務(wù)流程以及業(yè)務(wù)中包含的要素(業(yè)務(wù)對象)、業(yè)務(wù)模型以及業(yè)務(wù)能力(How),實(shí)際上這部分就是提供一個解決方案去實(shí)現(xiàn)前面提到的訴求。分析的階段,一定要非常細(xì),在軟件分析中,有一些分析的工具幫助我們更好地理解事物本身,具體地在下一節(jié)中講到。分析的產(chǎn)物是業(yè)務(wù)模型和業(yè)務(wù)能力地圖,通過業(yè)務(wù)模型可以看出業(yè)務(wù)是什么、有什么,通過業(yè)務(wù)能力地圖可以看出具體的業(yè)務(wù)能力有哪些,可以支撐哪些業(yè)務(wù)場景。

分析往上看一層,就是要分析商業(yè)價值鏈和商業(yè)模式,雖然這一塊并不是開發(fā)同學(xué)負(fù)責(zé)的范疇,了解一些還比較好,能讓我們對業(yè)務(wù)有更深刻的認(rèn)識,商業(yè)模式?jīng)Q定商業(yè)結(jié)構(gòu),商業(yè)結(jié)構(gòu)決定交易結(jié)構(gòu),交易結(jié)構(gòu)決定業(yè)務(wù)組成結(jié)構(gòu)。利益相關(guān)者也是從業(yè)務(wù)組成結(jié)構(gòu)中推導(dǎo)出來的,這一部分是最頂層的分析,分析業(yè)務(wù)的可行性,也即我們常說的Why。

2. 具體分析方法

在實(shí)際中,我們會看到各種各樣的分析方法,這些方法本身并不重要,重要的是它能給我們帶來什么的幫助,為什么需要它,個人的觀點(diǎn)是分析方法不要貪多,真正融匯到實(shí)際中,有那么1、2個方法就足已,不要迷失在各種各樣的分析方法中,真正還是要了解分析的本質(zhì)是什么,在第一部分中,已經(jīng)提到分析的本質(zhì)是要洞察出事物的組成,包含組成結(jié)構(gòu)和運(yùn)行機(jī)制,你再去看各種各樣的分析方法,它們都是為了找出事物的組成結(jié)構(gòu)和運(yùn)行機(jī)制。如黃金圈分析方法,它就包含了三層(Why、What、How),分析事物不斷從宏觀到微觀、從目的到實(shí)現(xiàn);再比如5W2H,真正的把一件事分析得非常仔細(xì),什么人在什么時間什么地點(diǎn)因?yàn)槭裁醋隽耸裁词隆?/p>

再回到軟件分析本身,之前在大學(xué)里我們我們學(xué)習(xí)軟件工程、UML等課程,由于當(dāng)時并沒有多少實(shí)際的研發(fā)、設(shè)計的經(jīng)驗(yàn),學(xué)習(xí)的時候覺得這些內(nèi)容比較空洞,反正老師讓我們這樣做就這樣做,缺乏對這些UML圖的理解。

  • 用例圖:用戶對系統(tǒng)最直接的交互,要表達(dá)出用戶需要怎樣的能力去滿足他們的訴求,它的關(guān)鍵是用戶、目的、價值。
  • 活動圖:用戶在某一類場景中,要表達(dá)出業(yè)務(wù)流程是怎樣的,它的關(guān)鍵是業(yè)務(wù)活動、流程交互(僅是業(yè)務(wù)層面,不是系統(tǒng)流程)。
  • 模型圖:屏蔽業(yè)務(wù)細(xì)節(jié),抽象出業(yè)務(wù)關(guān)鍵要素以及它們之間的聯(lián)系,它的關(guān)鍵是業(yè)務(wù)抽象出來的實(shí)體以有實(shí)體之間的關(guān)聯(lián)。

我們現(xiàn)在反過來去想想當(dāng)時學(xué)習(xí)的UML課程,里面各種圖都是為了幫助我們更好去認(rèn)識、理解項(xiàng)目需求,畫這些圖并非是做做樣子,而是真正地挖掘出業(yè)務(wù)能力有哪些、系統(tǒng)能力有哪些、業(yè)務(wù)模型是怎樣的、要有哪些對象、對象之間的關(guān)系是怎樣的。在實(shí)際工作中,有些人在分析階段在這一塊落實(shí)得并不那么好,其實(shí)問幾個問題很容易暴露出來,比如設(shè)計的類圖的出發(fā)點(diǎn)是什么、這個類的職責(zé)為什么有這些、這個職責(zé)為什么在這個類而不是在另外一個類中。如果我們分析階段做得不扎實(shí),設(shè)計階段的輸入就會比較少,或者是淺層次的輸入,設(shè)計的質(zhì)量也不會高,因?yàn)椴]有真正洞察出問題。

3. 1個分析案例

用2.1節(jié)中提到的分析方法,我當(dāng)時分析一個分銷業(yè)務(wù)也是用了上面的方法,從下面這張圖中可以看出業(yè)務(wù)發(fā)展思路是怎樣,用了幾個關(guān)鍵詞進(jìn)行概括:打基礎(chǔ)、拓渠道、夯能力、搭體系、數(shù)據(jù)化。當(dāng)有了這些認(rèn)識之后,再去推導(dǎo)技術(shù)側(cè)要做哪些就比較容易,以拓展渠道為例,當(dāng)多個渠道接入進(jìn)來時就暴露了一些問題,比如答疑成本比較高,因此就有一個重要的方面就是渠道接入保障,怎么減少渠道接入成本、答疑成本就是技術(shù)側(cè)要思考的問題。

三 .到底要怎樣設(shè)計

1 .設(shè)計全景圖

如果說分析階段是把事物打散,那么設(shè)計就是把打散的事物更好地組合起來。設(shè)計最為核心的是從分析中提煉出問題,即定義技術(shù)問題,這個是非常難的,比如你覺得某個設(shè)計不好,但又講不出來為什么不好,說明對問題的理解程度還不高。常見的技術(shù)問題有:性能、擴(kuò)展性、穩(wěn)定性、安全、效能、體驗(yàn)、成本、數(shù)據(jù)一致性等。

當(dāng)定義好了技術(shù)問題,接下來就要調(diào)研業(yè)界對這個問題有哪些方案,每個方案的優(yōu)缺點(diǎn)是什么,比如數(shù)據(jù)一致性,有事務(wù)型解決方案,也有補(bǔ)償型解決方案,結(jié)合業(yè)務(wù)本身去做選擇,這個選擇就包含了決策,決策就意味著取舍和平衡,并不是隨意的決策,而是有決策的依據(jù)來支撐,比如經(jīng)驗(yàn)、原則、數(shù)據(jù)等。

設(shè)計是包含原則的,這些原則應(yīng)該是大家都去遵循的,比如分層原則,這個在軟件設(shè)計中非常常見,原則是平時大家開發(fā)過程經(jīng)驗(yàn)的結(jié)晶,以分層原則為例,可以深入思考,為什么要分層、分層解決了什么問題、要分多少層、如何去分層,只有深入思考了這些原則,在新的場景中再去做設(shè)計時,就會得心應(yīng)手,而不是僵硬地去套用分層原則。

2 .設(shè)計原則

設(shè)計原則,每個設(shè)計者有自己的理解,很難有統(tǒng)一的設(shè)計原則,只能在局部上達(dá)成一致,比如分層原則,這個大家比較容易達(dá)成的,設(shè)計原則應(yīng)該是一系列的原則組成集合,并非是單一。設(shè)計原則是在大量實(shí)踐過程中沉淀出來的,我更想說的是如果你對看到的某些原則能結(jié)合自己的經(jīng)歷講得出來,說明你是有過真正實(shí)踐和思考的,否則這些設(shè)計原則也僅僅是一些文字,轉(zhuǎn)化不了設(shè)計經(jīng)驗(yàn)和設(shè)計能力,這里列出一些常用的設(shè)計原則。

  • 系統(tǒng)性原則
  • 抽象分層原則
  • 領(lǐng)域原則
  • 復(fù)用原則
  • 簡易原則
  • 成本效率原則
  • 正交原則
  • 擴(kuò)展原則
  • 演進(jìn)原則

3 .兩個設(shè)計案例

對于上面提到的9個設(shè)計原則,這里主要聊的是系統(tǒng)性原則和正交原則,系統(tǒng)性原則是站在全局上思考系統(tǒng)之間的交互,這個是非常重要的,相當(dāng)于是指明燈,當(dāng)看懂了整個系統(tǒng)未來的樣子,在當(dāng)下每一步的執(zhí)行都清楚知道是為了什么。反之沒有這個系統(tǒng)性原則,所做的事都只是關(guān)注點(diǎn)狀事情,不成體系。以2.3節(jié)中的例子來講,當(dāng)分析出來要做的事情后,如下圖畫出系統(tǒng)架構(gòu)圖。從系統(tǒng)架構(gòu)圖中可以看出系統(tǒng)之間的交互是怎樣的、鏈路邏輯是怎樣的(注:逆向鏈路沒有表達(dá)出來)。

我們在數(shù)學(xué)中學(xué)習(xí)過正交,最簡單的理解是兩條線是垂直的,在軟件中我們看到一些邏輯中包含了很多的邏輯,每次修改的時候,改了這個邏輯結(jié)果影響了另外一個邏輯,說明我們的邏輯耦合度比較高。正交原則即是分離出不同的變化點(diǎn),讓變化自治,即每個變化只影響自身,不會影響到其它的變化點(diǎn)。平時我們寫代碼中有兩種場景影響正交:代碼重復(fù)和關(guān)系依賴,對于重復(fù)的代碼可以抽取出來,對于依賴的部分,可以抽象一層防腐層出來。

舉一個正交的例子,假如有一個需求是:查找員工名為John的員工,這個代碼可以很快寫出來,但細(xì)細(xì)想想的它的變化點(diǎn),至少可以想到下面3個變化點(diǎn):

查找的內(nèi)容會變,不一定按照名字來查,比如按照員工工號來查;

查找的對象會變,不一定查員工,還有可能查學(xué)生;

查找的規(guī)則會變,不一定是待值查找,還有可能是范圍查找,比如查找年齡在20至30的員工。

當(dāng)想到了這些變化,重新設(shè)計后的效果就會不一樣了,當(dāng)面臨業(yè)務(wù)場景變化的時候,可以做到最少的改動,這也即是設(shè)計能夠降本增效的原因。

四 .分析與設(shè)計的思考

1 .衡量標(biāo)準(zhǔn)

衡量分析與設(shè)計的標(biāo)準(zhǔn)是比較難的,一般是從一些大的原則去看,比如復(fù)雜性、開放性等,但又很難有一個量化的指標(biāo)去衡量,到底復(fù)雜度有多高、開放性有多底。真正衡量好壞只有通過比較才比較好判斷,比如多個方案之間的比較,這個是比較容易衡量誰好。因此我們需要多去看別人是怎么設(shè)計的,有哪些好的設(shè)計思想值得借鑒,多吸收好的設(shè)計思想、設(shè)計案例。

做設(shè)計最怕是閉門造車,結(jié)果設(shè)計出來的東西不能夠很好地解決實(shí)際問題。個人的經(jīng)驗(yàn)是去看業(yè)界的方案,看看它們是怎么設(shè)計的,各自的特點(diǎn),比如數(shù)據(jù)不一致性的問題,有很多種設(shè)計方案來解決,有的方案對業(yè)務(wù)入侵比較大,需要改造很大,能不能無入侵業(yè)務(wù)呢?阿里提出了TXC解決方案,這個設(shè)計就非常好,使用者只有打上一個注解就ok,對業(yè)務(wù)改造沒有什么成本,這也即是前面提到的簡易設(shè)計原則。

2. 虛實(shí)結(jié)合

提到分析與設(shè)計,很多人覺得很虛,的確,在我剛工作前3年,也覺得這個非常虛,這個不就是畫畫圖嘛,后面發(fā)現(xiàn)還真不是這么一回事。印象最深的一件事,當(dāng)時在滴滴,我的主管給我們展示了營銷系統(tǒng)未來我們要做的事,用了一張系統(tǒng)架構(gòu)圖非常體系地講出來,知道未來我們要做成什么樣子,當(dāng)前我們處在什么位置上,那段時間我們過得非常充實(shí),知道我們在做什么、要做什么,1年半以后我們把當(dāng)時那張系統(tǒng)架構(gòu)圖上的事情都完成了,回過來頭來看,如果沒有當(dāng)時的指引,每天還是做著需求,來一個需求做一個需求,這也即是最開始做事沒啥動力,沒看到目標(biāo)。

當(dāng)設(shè)計的內(nèi)容確定之后,最為重要的就是落實(shí),這個過程是經(jīng)驗(yàn)的積累,在實(shí)踐的過程中會遇到一些問題,比如發(fā)放優(yōu)惠券的過程中怎么扣庫存、怎么保持事務(wù)一致性,技術(shù)難度的問題,我聽一個人講過一句話:要么沒看到問題;要么回避問題,在實(shí)際中,我們會遇到各種各樣的問題,只是我們把它忽略掉了,到最后說這個事技術(shù)上沒復(fù)雜度。我經(jīng)常分享的一個觀點(diǎn)是往上抽象看2層,或許你的設(shè)計方案會變。架構(gòu)設(shè)計是需要大量的實(shí)實(shí)在在的經(jīng)驗(yàn),不是簡單地畫畫架構(gòu)圖就行了,需要在實(shí)踐中反復(fù)檢驗(yàn),再去指導(dǎo)下一次更好地設(shè)計,我欣賞的一句話是:將虛的事情做實(shí)。

3 .將經(jīng)驗(yàn)轉(zhuǎn)化成能力

當(dāng)我們有一些分析設(shè)計經(jīng)驗(yàn)之后,更進(jìn)一步地要轉(zhuǎn)化成設(shè)計能力,設(shè)計能力是抽象的,需要在實(shí)際中得到檢驗(yàn)。就像在第三部分講到的設(shè)計,它不像分析那么很好地講出具體的方法出來,設(shè)計本身是凝聚了思想、心血在里面,同時設(shè)計是一種藝術(shù),具有高度的靈活性,因此很難講出具體的設(shè)計方法,也不會有統(tǒng)一的方法,有靈活性一定不是具體的,所以這部分需要在大量的實(shí)踐基礎(chǔ)上,提煉出設(shè)計原則,將其轉(zhuǎn)化成設(shè)計能力。

【本文為51CTO專欄作者“阿里巴巴官方技術(shù)”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

 

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2010-06-17 11:27:11

UML構(gòu)件

2010-06-30 09:07:09

UML建模分析

2021-11-08 06:57:35

Redis架構(gòu)設(shè)計

2025-06-06 09:46:57

2010-07-08 10:47:42

UML面向?qū)ο?/a>

2010-06-17 17:57:10

UML面向?qū)ο蠓治雠c設(shè)

2010-06-18 10:34:05

UML面向?qū)ο?/a>

2022-08-26 08:35:59

對象設(shè)計底層

2010-06-17 11:12:53

UML構(gòu)件

2015-09-14 09:08:32

設(shè)計設(shè)計師

2009-03-18 11:06:56

8020法則需求分析

2011-04-19 15:35:50

2011-09-01 13:51:52

JavaScript

2009-06-26 13:38:46

UML面向?qū)ο?/a>

2010-06-18 15:55:47

UML建模

2013-03-14 11:17:46

2010-06-09 16:23:28

圖書管理系統(tǒng)中UML圖

2015-08-24 13:56:10

數(shù)據(jù)分析

2010-01-26 11:01:35

網(wǎng)絡(luò)交換機(jī)

2024-05-31 12:56:06

.NET代碼方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成人亚洲| 欧美国产精品 | 午夜寂寞影院列表 | 久久久久久免费毛片精品 | 欧美午夜一区 | 狠狠综合久久av一区二区小说 | 日韩欧美一区二区在线播放 | 国产 日韩 欧美 在线 | 中国xxxx性xxxx产国 | 欧美a∨ | 亚洲精品无 | 欧美三级视频在线观看 | 国产91精品久久久久久久网曝门 | 国产成人a亚洲精品 | 国产精品伦一区二区三级视频 | 国产一级特黄aaa大片评分 | 国产一区二区影院 | 亚洲综合久久久 | 日韩欧美一区二区在线播放 | 国产精品影视在线观看 | 人人艹人人爽 | 国产91观看 | 亚洲欧美在线一区 | 97久久久| 日韩成人中文字幕 | 视频二区国产 | 国产精品网页 | 一区二区三区视频在线 | 久久久久久国产一区二区三区 | 黄免费在线| 日韩亚洲视频 | 超碰在线国产 | www精品美女久久久tv | 色视频在线播放 | 国产精品国产三级国产aⅴ中文 | 久久夜夜 | 一级欧美 | 久久成人综合 | 国产精品视频一二三区 | 国产精品一区二区久久久久 | 毛片av免费看 |