分享會在台北市電腦公會舉行,看到現場互動氣氛的熱絡,以及會後學員們給予不少正面的評價,感覺大家收穫都不少。其實包括我自己在分享會結束之後也產生了一些想法,倒是想藉由此文章分享我的分享會後心得。
這篇文章是投稿 ZDNet Taiwan 的文章原稿,由 ZDNet Taiwan 以〈如何在系統異常前發現錯誤?〉、〈如何在系統異常前發現錯誤?(下)〉兩篇文章刊登。文章原稿未經 ZDNet Taiwan 編輯,內容可能與 ZDNet Taiwan 約略有所不同。 前一陣子有兩個與資訊系統失常有關,而且眾所矚目的新聞事件,也就是戴爾電腦網路購物系統與台北捷運內湖線的系統異常。相信很多人都認為這兩個系統會發生系統異常相當離譜,在系統上線之後才發現系統無法正常運作,造成系統使用者的困擾,同時也會讓人對系統可靠度與穩定度失去信心,而增加系統的失敗成本。 雖然平心而論,想要事前預料系統可能發生的問題,並加以預防或因應其實並不容易,因為開發系統,尤其是軟體開發常會碰到事先難以預料的問題。但如果能在錯誤造成危害之前,就能夠發現問題並採取適當的行動來解決它,應該就能減少系統的失敗成本。因此,看到戴爾與台北捷運內湖線的重大系統異常,讓筆者想探討如何在系統失敗前發現錯誤,以避免系統失敗的巨大損失。
同人看 Kenming Wang 這篇文章覺得怪怪的,倒不是不贊同他對寫好使用案例好處的觀點,而是覺得強迫新手去做我們認為有價值的東西是很危險的。
如果穩定的程式真的是偶然的,程式的穩定似乎只能依賴運氣而不是人為努力,事情真的是這樣嗎?其實這位噗友太過強調環境變化的隨機性,卻忽略了適應環境變化,程式開發必然會經歷複雜演化的過程。穩定的程式是演化而來的,雖然演化的過程是偶然、但其最後結果卻是必然。換句話說,穩定的程式是偶然下的必然。
專案經理利用軟體缺陷的創造信用來進行短期信用的流通,把 bug fixing 變成 feature request 的好處就等同於創造增加軟體開發修改 bug 代價的貨幣。然而,把 feature request 變成信用商品的後遺症,正是讓信用生產結構的迂迴,使信用崩潰延遲發生。
本篇文章是投稿 ZDNet 的文章原稿,並以〈專案不確定導致焦慮與迷失〉與〈專案不確定性導致焦慮與迷失(下)〉兩篇文章刊出。原稿未經 ZDNet 編輯,其內容可能會與刊登的文章內容有約略的不同。 專案經理常會面臨天人交戰的情境。當專案「計劃總是趕不上變化,變化總是比不上老闆的一句話」之時,許多專案經理總是會擔心專案無法如期完成或害怕資源不足,而拒絕或延後專案變更的要求。但這樣的行為,卻往往造成工作成果無法符合專案實際需要的結構性因素,而使得專案的失敗機會大為增加。這對於具備智慧及膽識的專案經理而言,當然並不會樂見專案發生這樣的事情。 筆者前一陣子看到喲哪桑在〈換了屁股,我也換了腦袋〉的分享,提到他在時間緊迫的情形下,接受了專案的功能變更要求。那個變更要求原來是由他所提出,當時前任專案經理以時程緊迫為由而答應延後處理,而一直到他接任專案經理仍然還留在原處。但他認為他不能任由「行為造成結構」的情形發生,於是決定不要再讓這個專案變更要求再次拖延下去,並在當下對專案進行變更。 筆者認為喲哪桑的作為令人激賞,並且覺得那篇文章值得推薦。其原因並不是因為他針對專案變更做了什麼樣的決定,而是欣賞他在決策過程中,展現出面對自己的勇氣與解決問題的思考。不過,卻有其他讀者對那篇文章抱持相反的意見。 某位網友對喲哪桑的分享,批評他是靠感情衝動來管理專案,甚至用了「發瘋了你」、「不適任該離開的時候」等情緒性的字眼來指責喲哪桑的不是。他指出喲哪桑的文章所傳達的意念,實在有不可思議的謬誤,並且擔心那篇文章會透過 ZDNet 的報導,將不正確的知識與觀念誤導一般社會大眾。 然而,他對這篇文章的批評卻使人感到困惑,那位網友認為喲哪桑文章傳達的意念有不可思議的謬誤,但看在專業人士眼裡,這樣的觀點又何嘗不是相當嚴重的偏頗呢?筆者認為他的觀點傳達的意念本質上是一種面對不確定性的焦慮感,進而對改變的抗拒而產生無知的迷惘。 專案變更的基本原則 身為專案經理固然不應該因為個人一時的感情因素而使專案陷入危險之中,但在對專案缺乏可供客觀評論資訊的情況下,只憑專案經理接受專案變更的決定,就加以批判其決策感情衝動是否真的恰當?專案管理並不是神學或是玄學,而是屬於管理科學的範疇。因此,如果有人要批評某個專案經理是用感情衝動來管理專案,必須提出具體的事實根據,否則那只是無憑無據的推論而已,而這樣的推論多半只是源自於自我的偏見與扭曲。
在專案時間不夠的情況下,要達成不可能的任務必須要提昇軟開發的產能,必須讓開發的產出與產能可以相互配合。但至於要如何增進良好設計架構的產能呢?
對於開發者而言,總是要到驗收前才發現程式有問題可真是可怕的夢魘呀。然而,這樣的現象為什麼老是一而再,再而三地發生,到底是什麼地方出了問題呢?
人們總是習慣高估了自己的能力,低估了風險。因此,在做出自認為臨機應變的取捨之前,不妨先想一想,我們憑什麼認為這次的變更是個好變更?
本文係投稿於 CNet / ZDNet Taiwan 的初稿,並分為上下兩篇文章刊出,未經 ZDNet Taiwan 編輯,其內容可能會略有差異。 如眾所週知的,軟體開發專案具有高度不確定的特質。因此,為了降低需求變動的風險,在專案初期,軟體開發者往往會花費許多的心思,設計出具有彈性的軟體架構以適應未來可能的需求變化。大部分的開發者都了解軟體需求是不可能不改變的,但他們希望不管軟體需求如何變化,軟體開發的設計概念都不會因此受到影響或改變,如果可以做到這一點,軟體開發就會變得比較有效率,同時也能確保所開發之軟體的品質。 然而,現實總是和理想存在著一些落差的,專案的演變往往會超乎開發者事先的預期。尤其是當專案的驗收日期愈來愈接近時,專案可運用的資源也會愈來愈少,專案或許已不如剛開始時充滿了未知與不確定性,但相對地,專案的可變動性也愈來愈小。因此,在專案後期出現專案問題,或是需求的變動,相較於相同專案問題或需求變動在專案初期出現而言,會顯露出更為嚴重的危機與壓力的。 每個人都希望寧願事前多做一些風險管理,勝過事後的危機處理,而且後者的壓力是很容易讓做錯事的。然而,軟體易變的特質及專案環境的不確定性讓人難以捉摸,更不用說預測變化了,卻只能在事後才徒然留下「千金難買早知道,萬金難買後悔藥」的感嘆。但問題還是要解決的,到底軟體開發者在遇到這種危機時該如何處理呢?




最新迴響