註冊 | 登入 | RSS Feeds
ZDNet | Taiwan.CNET.com |

廣告:
軟體開發者不應該自廢武功

友善列印 | 轉寄朋友 | 加入HEMiDEMi網路書籤 | 加入funP | 加入Google書籤 | 加入Yahoo!奇摩分享書籤 | 4則回應
    
2007/10/25 05:00:00 眾所週知,軟體開發專案具有高度不確定的特質。因此,為了降低需求變動的風險,在專案初期,軟體開發者往往會花費許多的心思,設計出具有彈性的軟體架構以適應未來可能的需求變化。大部分的開發者都了解軟體需求是不可能不改變的,但他們希望不管軟體需求如何變化,軟體開發的設計概念都不會因此受到影響或改變,如果可以做到這一點,軟體開發就會變得比較有效率,同時也能確保所開發之軟體的品質。

然而,現實總是和理想存在著一些落差,專案的演變往往會超乎開發者事先預期。尤其是當專案的驗收日期愈來愈接近時,專案可運用的資源也會愈來愈少,專案或許已不如剛開始時充滿了未知與不確定性,但相對地,專案的可變動性也愈來愈小。因此,在專案後期出現專案問題,或是需求的變動,相較於相同專案問題或需求變動在專案初期出現而言,會顯露出更為嚴重的危機與壓力的。

每個人都希望寧願事前多做一些風險管理,勝過事後的危機處理,而且後者的壓力是很容易讓做錯事的。然而,軟體易變的特質及專案環境的不確定性讓人難以捉摸,更不用說預測變化了,卻只能在事後才徒然留下「千金難買早知道,萬金難買後悔藥」的感嘆。但問題還是要解決的,到底軟體開發者在遇到這種危機時該如何處理呢?

軟體品質的問題

我們是否能拒絕變動?或許凍結需求,拒絕變動可以讓軟體開發成功,但卻不會讓專案成功。因為軟體專案如果無法符合軟體需求者的需求,專案並不能算成功,以軟體需求者的立場而言,客戶永遠是對的,他們並不在意技術有何難處,但卻會很關心軟體能否幫他們解決問題。所以,如果開發者所開發出來的軟體不能符合他們的需要、為他們創造出價值,軟體需求者會認為軟體品質並未達到目標,未符合品質目標,專案當然不能算是成功的。

如果變動無法拒絕,那麼只好接受它了,但這對軟體開發者而言,往往是重大挑戰。根據筆者參與軟體專案開發的實務經驗顯示,因為需求變更的原因,要向客戶去爭取專案合理的時程及增加開發成本其實並不容易。所以在專案時程與成本無法變動的情況下,想要解決專案的問題與滿足使用者的需求,很容易因此影響到產出軟體的品質。

其實從專案管理的三重限制(triple constraints)的觀念應不難瞭解到軟體品質與專案時程、成本及軟體需求之間常會相互影響,因此,當專案時程及成本無法變動時,我們很容易可以理解軟體需求的變動將會影響到軟體品質。

而在實務上,軟體開發專案常會時程壓力、專案得到的支援與資源不足等原因,使開發者沒有足夠的動機、時間、與精力來分析問題以設計合理的解決方案,取而代之則是直接修改程式,以符合軟體需求者所提出的功能,就算發現了因此將會破壞了設計上的結構也在所不惜。就短期而言,在設計的結構上做一些犧牲,雖然如此可以換取增加軟體需求者所提出功能的空間。但長期下來,缺少對問題分析與完整設計的系統,自然而然會衍生出許多軟體品質的問題。

解決問題的動見觀瞻

如此看來,軟體專案的需求變更,常會造成開發者的左右為難。計劃趕不上變化,現實就是變化無常的,所以藉由預測與控制要變動不發生是不切實際的。但擁抱改變似乎沒有想像中那麼單純,需求變化無常,程式碼也愈來愈複雜,造成更高的軟體出錯的機率,增添程式碼維護的困難度。

情況真的無法改變嗎?那也不見得,筆者認為想要脫離這種兩難的困境,開發者應先具有洞見(insight),認清軟體開發者應該面對的現實,但應該避免因為捨本逐末的行為模式而形成自廢武功的後果。

如下圖所示,表面上,忽略設計雖然可以省下時間來修改程式解決眼前的專案壓力,但因為環境仍舊不斷在變化,所以開發者忽略設計的狀況會一直持續發生。然而,長久的忽略設計,卻會影響軟體設計的概念完整性,結果將會產生軟體設計結構不良的後遺症,專案壓力最後當然會不減反增了。

當開發者長期忽略設計,他就不會花心思在軟體的概念性設計上,更不用說提昇軟體設計的抽象化思維的能力了。換句話說,開發者只能憑藉軟體實作的技巧來解決問題。但這是很危險的,因為程式碼只會愈改愈複雜,變得難以令人理解,同時溝通起來也會變得格外困難,出錯機會也就增加了,造成更多的專案壓力。

另一方面,長期忽略設計,設計的概念不夠完整,也就是設計會遺漏一些重要資料,因此設計無法重覆運用,而實作上又充斥了許多的特例,存在許多的資料細節,因此要重覆使用也會有困難。也就是說,軟體的設計缺乏完整及一致性,其實作又與業務邏輯之間產生複雜的相依性,因而軟體各元件缺乏再用性與彈性。用軟體開發領域中常聽到的話來說,就是開發者要不斷地重覆「造輪子」,軟體沒有足夠的彈性以適應需求的變化,專案壓力當然會一直居高不下。

由上述分析不難發現,提昇設計上的概念完整性對於軟體開發者而言,是非常重要的能力,因此,軟體開發者在設計上選擇讓步,無異於自廢武功,這樣將犧牲了設計概念的完整性,最後終究是無法解決問題或滿足客戶期待呀。

自廢武功無疑是下下策,但軟體開發者在面臨專案的巨大壓力下,要如何不自廢武功呢?我們下期再說。(待續)

作者目前在某知名公司擔任架構設計工程師,擁有台科大MBA學位,曾參與國內大型專案,並具有專案管理專業證照 (PMP)。在此之前從事資訊科技工作20年,歷任不同IT領域,具有豐富軟體開發經驗。
加入我的圖書館 訂閱關鍵字
加入網路書籤> 加入HEMiDEMi網路書籤 | 加入funP | 加入Google書籤 | 加入Yahoo!奇摩分享書籤 |
友善列印 | 轉寄朋友


  • 4.老泰 於 2007/11/04 00:36 回應
    很奇怪這些人換工作薪水越來越高.

    閣下所言深感認同
    每當走了一批人,在下就得收尾,在下已經連收 5 年,最近公司又想要聘一批人
    在下前人所遺留的大洞還沒填平,又有一個洞正等著我,再來一次我恐怕就倒台了

    並不是我用的方法不對,而是這年頭年輕人太嫩,受不了太大壓力
    我只好用他們所能懂的方式請他們盡量按著手冊寫程式,但是這樣也能搞濫
    如閣下所言,搞濫了就編一大堆藉口什麼要再去讀書啦...
    到後頭應徵的公司還打電話來詢問這位員工的功力如何?

    真是讓我啞口無言難以形容,只能說貴公司用看看就知道

  • 3.亨利 於 2007/11/01 10:41 回應
    不愧是大師, 讚啦!!
  • 2.justin 於 2007/10/29 00:44 回應
    看過這篇文章之後其實感觸非常的深切,因為文中道出的便是每個專案中技術與輸需求很難達到平衡的點。
    身為一個架構師與開發者的身分,等於是介於客戶、老闆、PM、設計師與程式設計師的中間點。身處在這個交叉點下便會遇到很多技術與開發、需求與時程、成本與取捨的困難選擇。
    也想樓上的先進所提出的,使用者並不了解系統間的技術,但是又像作者說的[如果開發者所開發出來的軟體不能符合他們的需要、為他們創造出價值,軟體需求者會認為軟體品質並未達到目標,未符合品質目標,專案當然不能算是成功的],因此不斷的在衡量下去想辦法得到最佳的道路,我想如果用[在不斷的衡量與取捨下去捨去掉甚麼]會是更佳的貼近我的想法與做法。
    如何解決這個問題?
    不斷的在每個專案中都是不斷的重複的思考,但是有個比例很高的結果就是犧牲掉了系統的品質,
    因為對客戶來說專案時程對他們的績效很重要,對老闆來說成本控制很重要,
    這些種種因素對架構師的職責來說都是很重要挑戰(這裡我移除了需求管理的考量,單就客戶的CR與技術來作考量)。
    我很期待作者的後續,就像小時對武俠小說的閱讀一樣的期待。
    也期待著看到更多的前輩與同好的經驗分享。
  • 1.user 於 2007/10/25 08:59 回應
    這篇文章的問題,是我這些年來的一直存在的問題.
    現階段我有個結論,但不一定是對的.而且這的結論是假設在台灣目前的開發環境.
    現階段在台灣的開發環境說實在最終的User(也就是老闆),大多都屬於對程式開發不熟悉的人,在我現階段的環境,已比絕大多數非科技業老闆的認知好上許多,但是每當遇到開發時效與軟體品質的問題很難妥協,而且User不關心軟體的品質,況且他們也不懂,他們所要的只是能達成他們需求的軟體.
    在目前我從未遇到User或客戶在軟體專案一開始就考量未來維護或增加功能的問題,大多數的人都認為反正目前需求達成了,以後功能要加在加.
    在台灣我遇過一些技術人員(先不論他們的技術能力如何?)他們的做法是-初步達成使用者需求優先,未來的能加在加,如果真的無法處理就丟給後面的人,不然就走人吧.但走的時機點要選好,不能等到被臭罵了才離開.而且很奇怪這些人換工作薪水越來越高.
    因為
    1.換工作時工作經驗夠多,而且一個軟體案子通常都不是短時間,所以履歷上非常好看
    2.軟體剛開始時,對於上級而言時效比品質重要,能夠在時效內達成工作的人,當然會比較被看重.

    但可想而知,這些軟體後來的情況,對於原來的人並不會有任何負面,因為後面軟體變爛,大可說是後面交接人員的問題,因為剛做好時是OK的.
    造成此問題我也認為不是這些人的過失,而是原來需求者的自食惡果.

    有時候在想這樣做也落得輕鬆,不用跟User溝通太多細節問題,每次只要跟User說到品質與需求上的爭議,通常都不了了之.


留下你的意見
會員 * 帳號:
* 密碼:
  1. 欄位可選填,若全不填,則顯示為「匿名」。
  2. 不支援html語法
非會員 姓名:
E-Mail:
Blog:
  重新載入驗證碼
* 驗證碼: 記住我




廣告

名家專欄

更多名家專欄
Sponsored

ZD放大鏡

企業IT專用的強效可靠平臺
  利用以Intel® Nehalem為基礎的平臺,應付要求嚴苛的工作量,進而達成更佳的事業成果。
  + 智慧型伺服器平臺
  + 能源效率自動化
  + 彈性資源分配

研討會中心

廣告


Sponsored

活動快訊