◆為了與時俱進,持續系統化優化先傑電腦軟體工程組織智能,每一季都會安排【軟體工程(系統管理資安研發設計)融入日常工作】系列研討會,第四季研討內容中,蘇組長整理論述從「人腦」到「電腦」軟體開發是一場複雜的溝通遊戲,軟體開發是一場團隊合作的遊戲,其中有人扮演需求提供者,有人扮演需求解譯者,有人扮演需求執行(或完成)者,軟體專案從最初的提出者(如顧客),到最後專案的執行者(如程式師),中間產生了極大的落差,尤其是訊息經過層層傳遞,每一次的溝通都帶進了新的解釋,扭曲了原始需求的樣貌;多數時候用戶既不確定自己的需求,也說不清楚,這會導致兩個現象:
– IKIWISI(I Know It When I See It):指用戶只有當看到可操作的軟體時,才知道自己的真正需求。
– 需求蔓延(creeping feature):指用戶的需求隨著對問題的瞭解而不斷擴大。
上述二者都是軟體開發過程中常遇到的挑戰,若未能妥善因應,往往會導致專案的失敗。
從「問題」到「答案」
軟體工程是研究如何「以工程化的方法,從一個抽象的『問題』,推導(或創造)出具體的軟體『解答』」。因此,軟體開發的困難也可以從這個角度去探討。
軟體開發的困難可分為兩類:
本質性(essence):軟體本身在概念(conceptual)建構上存先天的困難;亦即如何從抽象性問題,發展出具體概念上的解決方案。
附加性(accident):將概念上的構思施行於電腦上,所遭遇到的困難。
造成本質性困難的原因有以下幾項:
複雜性(complexity):軟體的目的是要解決問題,其中牽涉到計算(computation)步驟。這是一種人為、抽象化的智能活動,通常是複雜的。
不可見性(invisibility):尚未完成的軟體是看不見的,即使利用圖示說明,也常無法充分呈現其結構,使得人們在溝通上面臨極大的困難。
協同性(conformity):在大型軟體環境中,各子系統間的介面必須協同一致。
變異性(changeability):軟體所應用的環境,常是由人群、法規、硬體設備、應用領域等各項因素匯集而成,而這些因素皆會快速變化。