論壇文章
漫談系統分析師的工作技能

上一期筆者談了系統設計師的工作技能,這一期我們來談系統分析師。任何的軟體開發專案,不論規模大小,都一定要有人扮演需求分析的角色,這些人的正式職銜可能不是系統分析師,也不是產品經理,但他們的職責都是要跟專案的各個利益相關者(stake holders)溝通,蒐集他們的需求,進行歸納分析,將其轉化成系統需求的規格書,作為系統開發的依據。最後,還要負責驗證產出的系統(產品)的確符合需求。

客戶與開發人員間的橋樑:系統分析師在軟體開發過程中,專案經理負責聯繫溝通整個專案的各種相關資訊,系統分析師則是客戶與開發人員之間關於產品資訊的主要溝通管道,兩者的角色都非常重要,但一個能力好的分析師往往是整個專案成敗的主要關鍵。

 "經驗老到的分析師比起經驗不足 的分析師,有可能將專案的工作 量減少達三分之一之多"

著名的軟體工程學教授巴里貝姆在他的「軟體成本估算」一書(COCOMOⅡ,Prentice Hall 出版社,2000) 中指出,經驗老到的分析師比起經驗不足的分析師,有可能將專案的工作量減少達三分之一之多;而技能嫻熟的分析師比起技能不足的分析師,更有可能將整個專案的工作量減少整整一半之多。這中間的一個重要的關鍵可能就是:優秀的分析師可以協助客戶分辨哪些是他們真正需要 的,而哪些只是他們說他們需要的。

但這件事說起來容易做起來難。基本上,分析師得將客戶關於產品的模糊想法轉換成明確的系統
規格書,要完成此一艱鉅的任務,分析師不僅要有豐富的專業知識(硬功夫),也要嫻熟一些「軟性技能」。以下我們就來談談這些知識與技能。

魔鬼就在細節裡 「11力真功夫」

1.專業知識

分析師需要的專業知識可概分為三類:軟體工程、專案管理與業務領域。首先,由於需求分析的重要性,軟體工程學中針對需求分析已發展出很多重要技術與方法,例如:使用案例(use case)與資料建模(data modeling),分析師應該要學習這些知識並靈活運用於專案中。此外,分析師也必須嫻熟所謂需求工 程與管理的技能,了解需求除了建立外,也需要管理,不能放任需求無限制擴散,而且必須將需求建立和管理活動平衡地貫穿整個產品的生命週期。過程中分析師也必須具備健全的專案管理、風險管理和品質要求的專業知識,以及如何在軟體開發生命週期的不同階段運用這些知識來確保專案的成功。

最後,業務領域的基本知識更是分析師在工作上不可少的資產。有了與業務相關的基本知識,分析師才得以與客戶進行有效的溝通、減少因溝通不良而造成的對系統需求的偏差;並進而得以從交談或字裡行間發掘出客戶未說明的假設與隱含的要求。甚至也可以提出客戶沒想到的寶貴功能或可以改善客戶業務流程效率的具體建議。最後,如果沒有適當的業務領域知識,分析師往往就無法分辨出客戶提出的一些過度的或沒必要的功能。

這裡筆者也要提醒讀者:領域知識固然是建構資訊系統時不可或缺的基礎,但僅僅有深厚的領域知識也不足以完成一個複雜的資訊系統,過度的強調領域知識其實只是一個迷思。身為一個系統分析師,我們首要任務是(創造性的)轉化使用者的業務需求成系統的功能與非功能需求,而不是學習可能無窮盡的領域知識。我們是系統分析師而不是所謂的領域專家,我們的專業是去理解使用者的需求,進行歸納分析與轉化的工作,如何把這件事做好才是我們自己的領域知識。

"身為一個系統分析師,我們首要任務是(創造性的)轉化使用者的業務需求成系統的功能與非功能需求,而不是學習可能無窮盡的領域知識。"

業務領域的基本知識是協助我們了解客戶需求的工具與手段,而非目的,除非我們工作生涯中僅僅需要浸淫於一個單純的領域,否則我們勢必要接觸不同的領域,那怎麼有可能每個領域我們都是專家。客戶才是我們關於領域知識的最佳教師,我們要的是如何從客戶身上快速學習與吸收領域知識的能力。這方面,軟性技能就顯得額外重要。

2.軟性技能

一個好的分析師除了要具備扎實的專業知識外,也必須有較強的溝通力、促成力(facilitation),與人際關係能力。此外,性格上願意耐心和真誠地與人互動合作也是分析師工作成功的關鍵因素之一,以下我們就來談談一些可以幫助分析師做好工作的軟性技能。

3.聆聽

無庸置疑,聆聽的技能是有效溝通的第一步。聆聽的過程首重專注,不僅要禀除雜念,保持積極的姿勢和眼神接觸,並要適時重申關鍵點,以確認您的理解是正確的。你需要掌握訪談對象說的話,也要從字裡行間發現他們猶豫不決而未說出的重點。此外,要盡可能的以訪談對象偏好的溝通方式進行交談,客觀的記錄他們的話語,極力避免在其中參入你個人的解讀。同時注意 訪談對象話語中的任何潛在的假設以及自己在解讀時所依賴的基礎假設。

4.面談和提問

客戶需求的建立與確認少不了要面談與討論, 這個過程中,提問是最主要的手段,所以一個分析師必須能夠提出正確的問 題。這裡所謂的正確問題,不僅是能有效但被動地蒐集客戶的需求而已,還必須是主動且具有引導性的問題。例如,客戶在描述需求時通常只集中在系統的正常與預期的行為。然而,造成日後系統開發上的複雜或困難的地方,多半是異常狀況的處理。所以分析師就要主動提出有關非預期狀況的問題,像是有哪些例外可能會發生,一旦發生後,使用者如何因應之類的問題,這樣才可以決定該如何處理該系統應預期的異常壯況。時時揣摩,隨著經驗的積累,分析師就能熟練提問的技巧,關鍵性地提出一些正確的問題,有效的釐清客戶需求的不確定性或分歧的地方,挖掘出客戶未明言的假設和期望,進而達到所謂引導客戶需求(requirement elicitation)的境界。

5.分析力

顧名思義,系統分析師一定要具備相當的分析能力,能夠從繁瑣的業務程序與紊亂的事務中找出脈絡,這牽涉到的複雜的心智活動,一方面要能拆解(break down)並看出埋藏在眾多事務之間更基本的元素,另一方面還要能找出這些基本元素的結構相依性與因果關係。打個比方,好像是中學數學裡所學的因式分解的課題,既要分解也要重組。這中間的基礎就是抽象化的技能:您要能夠自在地遊走於各個抽象層級,有時候,你必須能從高層次的資訊演繹出繁瑣的細節。在其他情況下,你需要從個別客戶的特定需求推廣發展出一套可適用於一群客戶的需求。進而可以用嚴格的角度檢視從不同來源所收集到的資訊,加以整理調和,區分出哪些是客戶真正需要的,而哪些只是他們說他們需要的。

6.促成力

舉辦需求工作坊(workshop),邀請與系統有關的客戶代表討論系統需求是一個建立客戶需求常用的一個手段,但要讓這類工作坊有成效就需要一個中立的促成者(facilitator),透過強有力的提問和觀察技巧,一方面營造一個讓各方參與者可以信任的氣氛,暢所欲言,並降低業務與資訊科技人員之間不時有的緊張關係;一方面也要引導參與者聚焦在議題上, 避免進入發散、漫無目的的爭論中,在有限時間內獲致具體的結論,這也是分析師要扮演的角色。有興趣的讀者可以參考Ellen Gottesdiener所撰寫的 「Requirements by Collaboration: Workshops for Defining Needs 」(Addison - Wesley出版 社,2002)一書中對促成者角色扮演的具體建議。

7.觀察力

敏銳的觀察力也是分析師應該要積極 培養的技能之一。舉例而言,認真觀看客戶如何執行他的日常工作或是如何使用既有的應用系統後,分析師應該要能夠發現一些客戶可能沒有提到微妙之處,從而發掘出應該要提出來討論的新需求。

8.書寫

分析師的主要工作產出就是系統需求 的書面規範,客戶、專案(產品)經理和開發人員都依賴這份文件進行溝通。不用說,如果分析師的書寫能力差,交出來的文件語意不清而難以閱讀,對整個系統的開發勢必造成極為嚴重的負面影響。不過這裡所著重的不是文字的優美,而是如何清楚地描述出系統的各個面向,用語應力求精準,盡量避免模棱兩可的詞句。除了文字之外,也要搭配繪圖,畢竟圖形能夠傳遞比文字更高密度的資訊。

9.組織力

需求蒐集與整理的過程中免不了要面 對許多龐雜無序的資訊,分析師必須以耐心和恆心對這些資訊進行歸納整理,一方面以 分析力找出眾多資訊間的基本元素與關係,另一方 面也要對這些元素與衍生的事物加以組織,快速建構出一個邏輯清晰的整體性架構,來轉化使用者需求成系統需求。如果組織能力弱,一旦面對龐大複雜的資訊時,很容易就會挂一漏萬,或是不時發生不一致的矛盾,必須時時進行修正。

10.人際關係

分析師的工作對象就是人,而且是有著不同背景與不同利益關係的各路人馬。要順利完成系統分析的工作,分析師必須能讓這些人跟自己合作,朝共同的目標邁進。過程中,免不了要跟各種工作職能和各級組織的人員交涉,這時候一些必要的人際交際手腕是一定需要的。否則,人的問題將遠遠比技術性問題難解決。

11.創新力

分析師雖然不見得要能創造需求,但也絕對不能只當個需求訪談員,單純地抄錄使用者的需求談話而已。我們一再強調分 析師的工作是將使用者的需求「轉化」成系統的需求,這裡的轉化是一種創造性的轉化,而不是機械性的將使用者的需求逐條地「翻譯」成系統需求。 這個過程中分析師一定得發揮個人的創造力,去解讀、去詮釋使用者的需求,進而提出可符合使用者 需求的系統需求。