走在架構(gòu)師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
                                                                        做自己的系統(tǒng)分析師
          原文:http://www.98exe.net/Article/d/2006-06-19/1759.html
          這幾天我在看軟考的《系統(tǒng)分析師教程》,六百多頁(yè)的書看了兩百多頁(yè),現(xiàn)在感覺心里很復(fù)雜。再加上前幾天和以前幾個(gè)要好同事聚會(huì),談到軟件系統(tǒng)的設(shè)計(jì)時(shí)有些爭(zhēng)論,讓我不得不寫些什么。希望此文能以此文同中國(guó)從事軟件開發(fā)的同行共勉。

          前言

          說來很不巧,我畢業(yè)于四川外語學(xué)院,沒有受到過大學(xué)里面正規(guī)計(jì)算機(jī)課程的教育,在軟件設(shè)計(jì)上的所有技能,基本上都是學(xué)習(xí)人家的代碼,和看微軟網(wǎng)站上的那些TechNotes。當(dāng)時(shí)之所以選擇英語院校,希望讀懂人家的技術(shù)文檔,是其中的一個(gè)原因。畢竟從現(xiàn)在很流行的Windows到Unix,他們的技術(shù)文檔大都是英文寫的。扯遠(yuǎn)了,其實(shí)開發(fā)一個(gè)好的系統(tǒng),看懂有價(jià)值的技術(shù)資料是一個(gè)因素,更重要的因素在于對(duì)系統(tǒng)的分析和設(shè)計(jì)。

          由于自己沒有受到過真正的計(jì)算機(jī)方面的理論教育,所以最初,在進(jìn)行軟件開發(fā)的時(shí)候心里面特別沒有底,在寫代碼的時(shí)候,我都特別小心,生怕寫出來的程序在結(jié)構(gòu)上不合理,執(zhí)行效率低下。工作了一段時(shí)間,開始自己設(shè)計(jì)軟件的系統(tǒng)的一部分,當(dāng)時(shí)又怕自己設(shè)計(jì)出來的系統(tǒng)在結(jié)構(gòu)上不合理,使后期開發(fā)無法進(jìn)行。所以,我一都在思考軟件的設(shè)計(jì)方法,不斷的總結(jié)。

          一直以來,我把系統(tǒng)設(shè)計(jì)、分析看成是一件很神圣的工作,雖然自己很早聽說過有這樣的考試認(rèn)證,但是還是沒有去報(bào)名,甚至沒有去買考試用書。其原因就是我認(rèn)為自己應(yīng)該先多寫代碼,多接觸工程實(shí)踐,多積累一些經(jīng)驗(yàn),然后再來接受系統(tǒng)分析的工程方法。而現(xiàn)在,我在這行干了五年,我想我的經(jīng)歷應(yīng)該可以讓我來接受正規(guī)的系統(tǒng)分析方法了吧! 所以,我要把我學(xué)習(xí)的過程和我以前在工作中對(duì)系統(tǒng)分析的一些經(jīng)驗(yàn)寫出來,希望大家批評(píng)、指教!

          第一篇 系統(tǒng)分析到底分析些什么

          一句話,系統(tǒng)分析就是“分析軟件系統(tǒng)在它的生存周期與生存環(huán)境中,各個(gè)對(duì)象與它的關(guān)系 ”,記住是關(guān)系,這是我這幾天看書,然后結(jié)合自己的開發(fā)經(jīng)歷所得出的結(jié)論。

          一個(gè)大型的軟件系統(tǒng),它所涉及的關(guān)系多,所以這個(gè)系統(tǒng)做起來就復(fù)雜;一個(gè)小的軟件,它所涉及的關(guān)系少,所以這個(gè)軟件做起來就簡(jiǎn)單。但是在通常的情況下,這些關(guān)系需要系統(tǒng)分析人員去發(fā)現(xiàn),通過各種手段:翻閱資料、采訪相關(guān)人員等等。如果越多的關(guān)系被系統(tǒng)分析人員發(fā)現(xiàn),那么系統(tǒng)分析員對(duì)系統(tǒng)的設(shè)計(jì)可能就越全面,系統(tǒng)結(jié)構(gòu)對(duì)未來的不確定因素的適應(yīng)能力可能會(huì)更強(qiáng)。

          在這里,我一直在強(qiáng)調(diào)“可能”。在我開始思考系統(tǒng)設(shè)計(jì)之前,我就覺得只要我掌握了正確的系統(tǒng)分析方法,那么我設(shè)計(jì)出來的系統(tǒng)在結(jié)構(gòu)上是最合理的,在性能上是最穩(wěn)定的,這個(gè)系統(tǒng)近乎是一個(gè)完美的系統(tǒng)。現(xiàn)在看來,這種想法很幼稚,作為對(duì)關(guān)系的分析,本身就和個(gè)人的經(jīng)驗(yàn)、價(jià)值觀有直接的、非常緊密的聯(lián)系。所以我們要正確的對(duì)待系統(tǒng)分析師這個(gè)職業(yè),他不是神,他只是一個(gè)將系統(tǒng)的開發(fā)風(fēng)險(xiǎn)盡可能降低到最低的人。

          第二篇 如何分析

          并不是每個(gè)公司都有自己專門的系統(tǒng)分析師,但是每個(gè)公司都有自己的系統(tǒng)分析工作,我想這是中國(guó)大多數(shù)軟件公司所面臨的現(xiàn)狀吧。我們不能夠因?yàn)闆]有系統(tǒng)分析師的存在,而把那些客觀存在,需要我們?nèi)シ治龅臇|西丟在一邊,最后只能是搬起石頭扎自己的腳。

          看了《系統(tǒng)分析教程》之后,讓我對(duì)如何做系統(tǒng)分析有了新的認(rèn)識(shí),但是里面提到的各種方法,動(dòng)不動(dòng)就要小組支持,安排會(huì)議,這些活動(dòng)檔次太高,咱們平時(shí)做的那些系統(tǒng)玩不起,那是不是因此我們就放棄系統(tǒng)分析呢?答案是否定的。我認(rèn)為,軟件系統(tǒng)的規(guī)模有大小,系統(tǒng)分析的規(guī)模也有大小,不同規(guī)模的系統(tǒng),它的分析方法也應(yīng)該不一樣,下面我把我分析的方法寫出來,希望大家批評(píng)指教。

          1. 接到一個(gè)工程后,腦子里對(duì)這個(gè)工程大致有個(gè)數(shù),然后就把開發(fā)工具打開,開始干了(這種方法很土,和軟件工程方法是背道而馳的)。 但是,當(dāng)代碼寫道一定程度的時(shí)候一定要停下來,你要對(duì)以做的開發(fā)做記錄。記錄什么呢?比如:重要的處理過程,窗體的名稱以及它的功能描述以及你當(dāng)時(shí)認(rèn)為有用的東西。然后繼續(xù)寫代碼。在后來的開發(fā)過程中,當(dāng)你回復(fù)前一段時(shí)間寫的代碼而不能馬上理解它的意思的時(shí)候,你就得馬上記錄。當(dāng)軟件快開發(fā)到一半的時(shí)候,這時(shí)你對(duì)軟件的整體構(gòu)架比較清晰了,你就得分析出軟件的基礎(chǔ)模塊,回顧以前的記錄文檔,看是否有其它模塊也擁有你分析出來的基礎(chǔ)模塊的功能,如果有,那么就得對(duì)程序進(jìn)行調(diào)整。調(diào)整完成之后,你就可以繼續(xù)后面的開發(fā)了,系統(tǒng)做到這個(gè)地步,一般成功的把握就有90%了。這種方法只適合于做規(guī)模比較小的系統(tǒng),例如一般的進(jìn)銷存系統(tǒng),功能比較單一的小軟件。
            后來我把這種分析方法命名為攀巖式分析,作為一個(gè)攀登者,需要的是力氣和勇氣來面對(duì)面前的大山,然后邁出第一步,攀登一截就打下一個(gè)釘子固定好,然后繼續(xù)攀登,就算不小心失足,由于有前面的釘子固定,也不至于掉下萬丈深淵。
            在沒有系統(tǒng)分析團(tuán)隊(duì)支持的情況下,這種方法可以在一定程度上降低軟件系統(tǒng)的開發(fā)和維護(hù)風(fēng)險(xiǎn)
          2. 當(dāng)拿到一個(gè)系統(tǒng)開發(fā)任務(wù)的時(shí)候,先整理出開發(fā)任務(wù)中的數(shù)據(jù)對(duì)象,然后然后分析他們之間的關(guān)系,通過關(guān)系的分析,找出隱藏的數(shù)據(jù)對(duì)象;確定軟件的功能框架,根據(jù)功能框架,畫出數(shù)據(jù)流圖和控制流圖;分析基本的功能框架,然后做出一個(gè)基本的系統(tǒng),然后拿給“領(lǐng)導(dǎo) ”看。
            以上的描述是我碰到的真是情況后的處理辦法,這個(gè)辦法結(jié)合了結(jié)構(gòu)化分析和原型開發(fā)中容易操作部分。
            在很多時(shí)候,我們可能接到一個(gè)比較大的開發(fā)任務(wù),而拿到手里的卻是一頁(yè)草草幾十字的“需求分析”,并且可能是有問題的需求分析。因?yàn)槟琼?yè)紙上寫的內(nèi)容實(shí)際上也是系統(tǒng)分析范疇中的資料,但是里面卻雜糅模塊功能描述、數(shù)據(jù)實(shí)體描述、數(shù)據(jù)存儲(chǔ)描述等等信息。而我們?cè)撛趺崔k,撒手不干了?
            這時(shí),首先要做的就是挑出里面的名詞,將其做成矩陣,對(duì)有關(guān)系的名詞打上標(biāo)記,并注明是什么關(guān)系。在這個(gè)分析中,肯定會(huì)遇到問題,而我們要做的就是先把這些問題記錄下來,這些問題最好不要立即去問“領(lǐng)導(dǎo)”們,因?yàn)樗麄兛赡芤膊磺宄?br /> 接下來要做的是根據(jù)那份“需求分析”,指定出系統(tǒng)的功能框架,分析出最基本的框架,然后從最基本的框架著手,對(duì)框架的功能作進(jìn)一步分解,然后再繪制的數(shù)據(jù)流圖和控制流圖,在繪制數(shù)據(jù)流圖的時(shí)候,提取數(shù)據(jù)實(shí)體,建立基本的數(shù)據(jù)庫(kù)(如果需要使用數(shù)據(jù)庫(kù)的話),當(dāng)然這個(gè)做法和《系統(tǒng)分析師教程》中的提到的方法也是大相徑庭的,但是沒有辦法,因?yàn)槲覀冞B對(duì)象之間的關(guān)系都沒有弄清楚,哪里來的邏輯分析嚴(yán)密的數(shù)據(jù)實(shí)體分析呀,為了工作,硬著頭皮也要上啊。
            接下來就是按照上面的設(shè)計(jì),把系統(tǒng)做出來,然后叫領(lǐng)導(dǎo)看,讓領(lǐng)導(dǎo)多提意見,稱領(lǐng)導(dǎo)在看程序的機(jī)會(huì),順便把押在手里面的問題拿出來,問題能解決多少算多少吧,然后繼續(xù)開發(fā),然后繼續(xù)讓領(lǐng)導(dǎo)審查,領(lǐng)導(dǎo)越高興,問題解決的周期就越短,反之則越長(zhǎng)。
            這些都是我的土方法,是沒有辦法的辦法呀,工作還要繼續(xù)干,并且還要干好呢!

          第三篇 是系統(tǒng)分析師還是程序員?

          我本來打算把這篇的標(biāo)題定為“系統(tǒng)分析師和程序員的關(guān)系”,在我看了兩個(gè)網(wǎng)友的留言后,我決定放棄這個(gè)標(biāo)題,一個(gè)網(wǎng)友評(píng)論說,系統(tǒng)分析師應(yīng)該消失,因?yàn)楝F(xiàn)在的原型化開發(fā)已經(jīng)讓系統(tǒng)分析師失去了價(jià)值;一位網(wǎng)友評(píng)論說,他在一個(gè)七八十人的小公司里面工作,認(rèn)為系統(tǒng)分析師存在的必要性很大,并且說如果沒有系統(tǒng)分析師的隊(duì)伍,可能會(huì)失去競(jìng)爭(zhēng)力。我認(rèn)為這兩種看法都過于偏激,因?yàn)樗麄兌紱]有考慮到,不論是系統(tǒng)分析師和程序員還是其它搞開發(fā)的人員,他們都是軟件公司的一部分。

          作為一個(gè)軟件公司,作為一個(gè)企業(yè),都有自己的生存法則,大公司有大公司的活法,小公司有小公司的活法。大公司實(shí)力大,人數(shù)多,能夠接到大的項(xiàng)目,那么他必然要有自己專門的系統(tǒng)分析師團(tuán)隊(duì)來維護(hù)公司正常的業(yè)務(wù)運(yùn)營(yíng);而小公司,通常接到的項(xiàng)目都比較小,人數(shù)又有限,要想支持一個(gè)專業(yè)的系統(tǒng)分析師團(tuán)隊(duì)是不可能的。我現(xiàn)在就在一個(gè)小公司里面工作,接到任務(wù)后,直接就和客戶打交道,直接從客戶那里獲取他的需求信息,然后自己整理資料,分析系統(tǒng)的結(jié)構(gòu),然后編碼,然后測(cè)試,這些事情是沒有人來為我完成的。

          所以我認(rèn)為,系統(tǒng)分析師可以有兩種定義:一種從職務(wù)的角度來定義:這個(gè)人是我們公司的系統(tǒng)分析師;一種是從專業(yè)的角度來定義:這個(gè)人具備系統(tǒng)分析的專業(yè)知識(shí)。但不管從哪種角度來定義,它們都具備同一個(gè)特點(diǎn):他們都要完成系統(tǒng)分析的工作。

          分析本身就是一項(xiàng)復(fù)雜的活動(dòng),它的復(fù)雜不僅體現(xiàn)在它所涉及對(duì)象本身,還涉及到指導(dǎo)分析的方法論。而這些都是通用的哲學(xué),他同樣可以知道我們?cè)谄渌I(lǐng)域更好的開展活動(dòng)。所以對(duì)于系統(tǒng)分析這項(xiàng)活動(dòng),作為一個(gè)程序員,也要去學(xué)習(xí)它,實(shí)踐它,這對(duì)我們是有好處的。

          所以,不管我們所處的環(huán)境如何,是大公司還是小公司,至少我們都應(yīng)該做自己的系統(tǒng)分析師。

           到此,有關(guān)我對(duì)系統(tǒng)分析師的感慨寫完了,這篇文章只是我個(gè)人對(duì)系統(tǒng)分析師的看法,局限性很大,還希望大家多多指教。





          本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見可給我留言,愿共同學(xué)習(xí)進(jìn)步。
          posted on 2008-04-23 22:05 Jack.Wang 閱讀(2480) 評(píng)論(5)  編輯  收藏 所屬分類: 架構(gòu)師篇

          Feedback

          # re: 做自己的系統(tǒng)分析師[未登錄] 2008-04-24 09:00 znp
          寫的不錯(cuò),其實(shí)系統(tǒng)開發(fā)就是這樣。很少能遇到真正書本上提到的那些樣例。說白了就是達(dá)到客戶的需求就可以了,沒必要非得按照書本來實(shí)施  回復(fù)  更多評(píng)論
            

          # re: 做自己的系統(tǒng)分析師 2008-04-24 09:59 fyun
          不靠譜啊  回復(fù)  更多評(píng)論
            

          # re: 做自己的系統(tǒng)分析師 2008-04-24 10:28 BeanSoft
          軟件開發(fā)靠一個(gè)成功的團(tuán)隊(duì),中國(guó)的系統(tǒng)分析師不可謂不多也。但是郁悶的是好游戲?yàn)楹味际菄?guó)外出的呢?甚至瑞典的DICE這樣的小公司也能從做賽車游戲開始,一直到開發(fā)戰(zhàn)地2,戰(zhàn)地2142這樣的知名大作。我想,我國(guó)軟件行業(yè)需要提高的,是全面的素質(zhì)。  回復(fù)  更多評(píng)論
            

          # re: 做自己的系統(tǒng)分析師 2008-04-24 16:49 一手的小窩窩
          川外,牛啊。。牛  回復(fù)  更多評(píng)論
            

          # re: 做自己的系統(tǒng)分析師 2008-05-02 11:23 天山茗客
          贊同博主的觀點(diǎn),系統(tǒng)分析師該不該消失不是爭(zhēng)論的焦點(diǎn)。關(guān)鍵是每個(gè)系統(tǒng)都必須系統(tǒng)分析,只有系統(tǒng)分析做好了才能做出好的系統(tǒng)來。我們都應(yīng)該做自己的系統(tǒng)分析師。
            回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 鄂托克旗| 定南县| 梅州市| 张家川| 德令哈市| 从江县| 新干县| 基隆市| 淮阳县| 肇州县| 来宾市| 体育| 三明市| 浦北县| 宣汉县| 肃北| 喀喇| 丰台区| 合水县| 时尚| 武山县| 双桥区| 卫辉市| 新巴尔虎左旗| 鲁甸县| 桓台县| 页游| 新龙县| 新巴尔虎右旗| 本溪| 璧山县| 扬州市| 蒲城县| 平邑县| 邮箱| 泸州市| 通道| 睢宁县| 林州市| 湟源县| 屏东市|