2010年5月17日 星期一

[轉貼] SA, SD 與 SE


這不是3種可以吃的東西XD,轉錄自這裡,寫的很好!台灣地小人稠,有時也受限於公司環境,分工沒這種細膩,不過正如專家說的,SA 給了系統靈魂和神經系統,SD則是給了系統軀體和外觀,兩者的結合,才能產生出正確,美觀又好用的系統。

就算是無法實施如此專業的分工,在專案的開發過程中,自己的角色在其中的轉變間是否可以恰如其份的完成任務?廢話完了,正文開始。


做軟體開發專案規劃時,常會碰到助理問我一個問題,SASDSE的差別在那裡 ?

這個問題我以前也有過,還頗為困擾,系統分析和系統設計及系統工程到底有什麼差別 ? SA和SD的工作又有何不同 ? 這兩者的養成教育又有何差異 ?在過去,SA,SD及SE的確很難區分,甚至這些角色常常會透過軟體工程師來混合發展。

隨著IT領域的發展,SA,SD及SE漸漸的成為了大型專案必需要的專業分工,這三者間是有相當的差異的,不管是養成過程,甚或是未來的發展,都大相徑庭,而要成為一名稱職的PM,是要能區分出這三者的差異,才能妥善的安排工作的。

[SA,System Analyst 系統分析師]

SA是 System Analyst 的縮寫,一般稱為系統分析,主要的工作就是透過一系列的分析工作,把客戶想要的結果產生方式,以各種文件表達出來,讓開發團隊可以根據這些文件實作出這個結果。

這樣的解釋比較文縐縐一點,用個通俗一點的方式比喻,就像是要做出一道宮保雞丁時,就會有食譜一樣,裡面會介紹需要的材料及做菜的順序,然後裡面也會強調要以怎樣手法才能產生出某種效果,以促進色香味。

這樣的過程裡,SA是較為偏重於在工作流程和處理邏輯的,透過SA,開發團隊才可以理出整個系統的架構,一種做事的脈絡,以及系統和工作間的關連性,最重要的,是這些結果都會被SA呈現在文件中,而非放在少數人的腦袋裡。

SA不僅止是要針對電腦裡的東西去運作及規劃,還包括了現實世界裡的實體流程及組織。在很多的情況下,配合新系統的組織及流程,是要由SA來執行的。總結起來,在一個開發案裡,SA執行以下的工作:

· 藉由系統需求書,使用者的現有標準作業流程來建立出符合期望的新作業流程及搭配流程的系統功能及模組規劃
· 依據功能及模組規劃案,定出初步的資料庫內容及系統與使用者間的權限搭配規範
· 定出各個軟體零件的規範,如物件,函數庫,...等等
· 設計新的標準作業流程,並把系統功能或模組綁入這些流程中
· S.A依據客戶的環境及需求,尋找合適的SD來搭配

而SA也有以下的特色:

· 對於系統在怎樣的環境及用什麼開發工具,並不十分在意,良好的S.A產生出來的文件,使用不同的開發工具都應該可以完成,產生相同的結果,但那一種最合適,由SD決定
· SA偏重於流程及執行邏輯的表達
· SA著重於軟體邏輯,對開發工具的學習並不是十分重要,所以會一種語言即可,主要是以該語言工具來實踐邏輯觀。
· SA一定要有全局觀,也就是不能拘泥於一個角度或是一個局部去思考問題,這一點是尋找優秀SA時最困難的。因為在規劃模組及功能時,一定要同時考量到所有直接相關及間接相關的程序及邏輯問題,因此要有全局觀。

相較於SD,SA更側重在邏輯及工作順序搭配的表達,SA並不需要去關切使用什麼作業系統或是什麼開發工具,如前特色所述,好的SA文件,可以用任何一種開發工具來實現。當然,SA不受限於IT技術,但卻會有專業領域的限制。

很少有SA同時專精於數個領域的,熟悉汽車業運作規範的SA,在金融業的開發案裡,就很難討好,反之亦然。但SD沒有這種限制,基本上SD可以和任何行業的專案開發團隊配合運作。

會如此的原因是SA是偏重於流程及管理分析及重新再造工作的。而作業流程,除了少數領域裡共通性高,在核心流程上,是需要長期鑽研的。前面提及的汽車及金融業就是一例。

所以,一個SA必需具備以下的能力,資歷及專業訓練:

1. 至少熟悉一種程式開發語言
2. 熟悉軟體工程,對於開發工具的元素及特色熟悉
3. 對管理制度或作業流程設計熟悉
4. 熟悉UML或類似的系統描述工具
5. 邏輯能力良好
6. 良好的溝通能力,主要作為瞭解需求之用
7. 相關的業界熟悉度

在三者之中,SA是最接近PM的,所以SA在做生涯規劃時,不妨以PM做為下一個發展的專業目標。

[SD ,System Designer系統設計師]

一般來說,SD在生涯規劃裡,並不是SA或是PM。當然,一定要硬來一次也沒有什麼不可以,但要走這條路,就要趁早轉職,因為SD畢竟是較為幕後的工作,在與客戶的溝通協調上,並不會有太高的要求,也較不需要公司管理層面的全局觀。

表面上看起來,SD沒有SA那麼多的工作要求,但實際上SD是最需要天賦的工作,不管是畫面的構成,操作的手順及調整,甚至於元件的定義及物件的規範,全都需要一些天賦。很多軟體,功能很強,但怎麼看怎麼不順眼,或者怎麼用就怎麼憋扭,功能帶來的效益,全都被這些毛病給遮蓋掉了,這就是SD的問題。

另外,SD也扮演了系統最佳化的推手。SA所規劃出來的要求及佈置,都只是邏輯上的構思,在不同的工具上,可能有更好的方法可以表現,也可能會難以展示,這都需要藉由SD對使用環境及開發工具的瞭解,來進行調整和規劃。

舉例來說,同樣是一套財務軟體,在WINDOWS XP,MAC,X WINDOWS下,就會有很不一樣的展現模式和技巧。如果再搭配上不同的開發工具,如C++,JAVA,.NET,PHP,...那差異更多。對SA而言,這些東西他都不用去考慮,但SD就不同了,這些不同的地方,並不僅僅只是如此而已,有時還會包括了開發成本及時間問題,SD的重要度,由此可知。

在一個客製化專案裡,SD的工作內容如下:


· 設計畫面元素規範
· 設計頁面結構及規則
· 設計系統操作畫面,並編定欄位規範及防呆處理
· 設計權限管理與系統操作機制
· 撰寫使用手冊
· 調整DB之各項定義,使其符合畫面欄位規範及操作搭配
· 配合SA撰寫系統開發文件,供程式師CODING之用
· 撰寫UI(使用者介面)測試計劃書


而做為一名稱職的SD,以下的條件,是必要的:

1. 至少對一個作業系統極為熟悉,對於這個作業系統的各個元件特性及API,有充分的瞭解
2. 熟悉2種以上的開發工具,而專案所需的工具,必需是其擅長的之一,其熟悉度包含了標準安裝裡的各個函數庫,系統常數,物件定義,語法,主要的輔助工具開發廠商,及重要的工具使用方法
3. 具一定的美學感
4. 至少能使用一種繪圖工具軟體
5. 曾經擔任職業軟體工程師三年以上

可以這樣說,SA給了系統靈魂和神經系統,SD則是給了系統軀體和外觀,兩者的結合,才能產生出正確,美觀又好用的系統。如果你覺得自己是個不太愛和太多人打交道的IT人,又對使用者介面有那麼點執著及天賦,那麼,SD絕對是適合你的好選擇。

[SE,System Engineer 系統工程師]

就某種角度來看,SE對PM而言,算是萬金油,只要做IT專案,那就一定用得上,差別只是要選那一個專業的SE而已。系統建置安裝要SE,使用者環境要SE,甚至到硬體選擇及佈建,都要用到SE,有什麼IT專案跟這個沒有關係呢 ?

當然,雖然SE是到處都吃得開,但相對的也是專案裡面最沈默及少有聲音的一群。他們的工作基本上就是建構出一個可以執行系統的環境,系統要如何展現,SE可以給SA和SD一些建議,但建議時機通常都是在系統運行出了些非系統可以掌握的問題後。

系統工程師基本條件上,和SD最為接近,但有一點不同,就是不需要有很好的軟體開發經驗,也就是不太需要會寫程式。但要對作業系統,服務器系統,網路運用環境有相當程度的瞭解。

SE通常是三者中最為博學一員,好的SE雖然不一定要程式寫的呱呱叫,但卻不能對編程一無所知,對作業系統及開發工具也要有一定的熟悉度,甚至部份網管有關的工作也要有所涉獵,所以算得上是專案裡的萬金油。

在專案裡,SE所要執行的工作如下:


· 規劃及建置系統執行環境
· 安裝及設定使用者端環境
· SERVER安裝及設定
· 提供環境設置竟見給SA及PM
· 最佳化系統可靠度及效度
· 撰寫可靠度及效能測試計劃書
· 對電腦及相關週邊設備有一定熟悉度


而一名SE則有下列基本要求:

1. 至少熟悉一種作業系統,尤其是讓系統的設定及微調等相關技術
2. 至少熟悉一種網路伺服器作業系統,對如何設定及最佳化熟悉
3. 曾任軟體工程師職務一年以上或熟悉一種開發工具
4. 對網路環境有一定的認識,尤其是一些通訊設置
5. 熟悉可靠度及效能的評估方法,並瞭解與系統環境相關之設定

基本上,如果擁有了像SD一樣的技術背景及個性,但在美學上實在令人不敢恭維,那麼SE算是極佳的選擇了。一般而言,SE的下一個生涯規劃,會比較偏重於技術性兵種,像是DBA或是網管,對於IT產品比較有狂熱或愛好的人,SE是極佳的出路。

[在專案中的運用時機]

基本上SE是萬金油,只要是IT的案子裡就一定要塞一個SE進去,因為沒有IT專案不需要使用工程技術的,差別只在使用何種工程技術而已。在套裝軟體的導入專案裡,SE負責處理軟體使用環境,解決非系統性問題,安置及調整資料庫和網路環境,然後安裝啟動。所有系統運行所需要的條件,都要由SE來解決和處理,但這些工作全都不會出現在眾人的面前,但卻又重要無比,算得上是幕後的英雄。

會同時運用到SA,SD及SE的專案,還是以客製化開發為主的。

在開發型專案裡,SA團隊要負責初期的需求調查及整體架構的規劃,將所有的系統開發工作內容轉化成井井有條的文件,並且適度的分割及派送,並確保未來這些被分割的開發結果能夠在未來可以正確運作。

SD 則在SA的文件中去尋求系統呈現的一致性,易用性及保證開發工具可以正確無誤的展現SA的要求結果。所以SD要負責操作界面的外觀設計,訂定一致的展現規範,設計系統操作畫面及操作手順,同時配合SA完成系統開發文件。基本上,開發文件中,是包含系統使用手冊初稿的。

SD在設計時,必需與SA充分配合,以確保設計的系統符合需求及運作要求。

除了上述的工作內容外,這三者都要撰寫測試計劃,SA著重在於資料的流動符合原先規劃的順序及結果測試,SD則著重在操作畫面中的防呆測試及操作介面的正確性,而SE則在系統可靠度上進行規劃。

[軟體工程師何時轉職 ?]

每一個寫程式的人心裡都明白,這工作不可能做一輩子。不單單是體力及腦力問題,最重要的是寫程式,經濟價值實在有限。

我不會否認有很多的程式高手,但重點不在於你有多優秀,而是有多少老闆願意付出和你努力成正比的薪資來顧用你。不是沒有這種工作,而是如同鳳毛麟角,而且,這種工作通常你也做不久,因為壓力太大,消耗青春太劇烈了。

退一步來說,你也不值得付出這麼多,在良好的SA及SD的規劃下,工程師只要達成一般標準,就可以解決掉九成以上的軟體開發需求,除非是機緣巧合,或是你很有興趣,否則另外那一成的工作,你是很難有機會碰上,或者,就算碰上,也沒法子養活你一輩子。

軟體工程師總有一天要轉職的,這是他們的宿命。

當要轉職時,他們有幾個選擇,SA,SD,SE,出去當老闆及換一行等諸多選擇。看起來雖多,但其實晚景淒涼,因為寫程式都是關起來寫,長期自閉的結果,當他們想轉職時,很難擁有足夠的人脈來支撐他們換個前途光明的事業。一般人羨慕IT人的高薪,卻不曉得只是寅支卯糧,沒有妥善的規劃,後勢看跌的。

前面的五個選項,基本上最後兩項只是充場面,只有少數人才能選那兩個,大多數軟體工程師還是要在前三者中選一個來發展的。

SA看起來最風光,未來也是潛力最好的,但很遺憾的,軟體工程師裡,只有少數人適合這個職務。因為這個工作是很需要和別人打交道的,而好的軟體工程師通常這一點非常不擅長。

因此,如果你自認為擅於溝通,三姑六婆都是你的紅顏知己,邏輯能力不錯,又對管理有興趣,那麼SA是你很好的選擇,程式功力並不是你要考慮的重點。

相對的,你對使用者介面很有心得,而且在美感上也獲得了同事的一致讚賞,程式功力也有那麼一點自信,討厭和不是搞IT的人打屁聊天,那不要懷疑,SD是你最佳的歸宿。

最後,你覺得IT的世界對你充滿了吸引力,無論是作業系統,開發工具或是軟體及IT設備都是如此的吸引你,人與人的接觸對你來說並不是人生的首要需求,層出不窮的IT科技讓你陶醉其中,那麼,SE絕對是你的首選。

要如何轉職,每一個軟體工程師是要誠實面對自己的,而不是依前途來決定自己要選什麼職務,如果你依這種方式選,以我個人在職場生涯的經驗,這樣的人很難散發出光芒,也難以有他期望的成就。所以,現在在寫程式,正在想要轉職的工程師,請謹慎而且誠實的面對自己,做出恰當的選擇。

[結語]

以上是個人提供給對於SA,SD及SE或到困惑的朋友,做為參考及工作分配的依據。這三者的產生,其實也是源於目前IT技術的成長過於快速,所以必需針對軟體工程進行適切的分工,才能應付好日益複雜的IT環境。

沒有留言:

張貼留言