從Java談軟體開發前期規劃的重要性
從Java談軟體開發前期規劃的重要性[@more@]經過近十年的發展,說Java是地球上最受歡迎的程式開發語言一點也不為過。Java賦予開發人員高度的選擇自由,展現「Java Everywhere」的魅力與成效
你我的生活周遭已處處可見Java;到火星上走走、eBay大采購、網路銀行轉帳、拿著健保卡到醫院看病、無聊時把玩手機上的Java遊戲…。
在生活中,你通常只知道「喔!原來這網站是用Java寫的」、「喔!原來這是手機的Java Game」。若自技術層次拆解,Java Technology可簡單區分為Java 程式語言(language)與Java 平臺(platform)。
Java 程式語言所指是撰寫程式所需的語法與詞彙,像學習中、英文,有一套基本的單字與語法,只要利用單字組出符合語法的句子,這就是Java程式的基礎。
至於Java 平臺,如大家熟知的,Java共分三大平臺:J2ME、J2SE和J2EE,分別專精於嵌入式行動平臺、標準平臺和企業應用平臺,除了共同的類別函式庫(API)之外,每個平臺也有其特定的API,供程式設計師們開發使用。
隨著開發工具陸續推出,降低了Java開發技術門坎,要寫出正確無誤的Java程式不是太難的事情,但論及系統性的Java軟體開發,那可就不是一件輕鬆事。
開發大型專案有三項非常重要的因素,將會影響整個專案的進度與質量,分別是人(people)、流程(process)與技術(technology)。
這三個要素是環環相扣的,任何一項要素的成敗都會影響另外兩個要素,而每個要素也都足以影響一個專案的成敗。
如何取得這三者的平衡,並將每個要素充份的發揮,取決於管理者的經驗,與相關開發人員的素質,這不是一項簡單容易的任務,但有好的方法可以完成。
Java彈性多選擇資源豐富任君挑選
「技術」應該是最容易掌握的部份,因為你選擇了Java。如前所述,全世界已有許多Java資源可以選擇。某些人可能會認為Java技術門坎高,考慮訓練成本而決定匯入較為簡易的程式語言,如VB.Net,或是不敢轉換到Java平臺。
事實上,真正困難的不是Java程式語言或是API的使用,而是整個物件導向程式設計的概念。C#也標榜與Java有著類似的物件導向架構,除執行平臺不同、API的名稱不同,本質與Java可以算是孿生兄妹,怎麼沒聽有人抱怨C#很難學?
既然Java、.Net門坎是一樣的,那該如何選擇?答案是,你喜歡誰就選誰。只是當你決定投靠其中一個陣營時,不妨想想一件事:「在這個平臺上,我是不是有選擇的空間與自由?」
Java是一開放的技術、平臺,可執行於各類作業平臺,還有各式各樣的開發工具、API套件與執行環境,包括商業、免費、開放原始碼等豐富資源任君挑選。
流程關乎專案預算與時間控制
「程式」指的是軟體開發流程或是專案流程,定義流程的目的是要掌控所有的情況。專案的最大敵人是時間及預算,這兩者都是有限的,如何在有限預算內準時完成專案,可說是一項藝術。
幸運的是,時間和預算都是可控制的,並不是指我們可以控制時間快慢或長短,而是如何明確知道哪一個時間點,需要何種產出物,而我們有多少的預算可以完成。為有效控制,我們需要一個標準的流程,只要照著規矩走,一切都好辦。
RUP(Rational Unified Process)就是一種業界常用的不成文規矩,在多數軟體專案中幾乎都會使用的一項語言、方法與工具。 RUP的精神在於反覆(iterative)與漸近的(incremental)。
在漸進式的開發過程中,透過不斷的提煉(refine),可趁早發現問題且找出解決方法,也確保每一工作專案的進度。不過,在架構(Architecture)方面,RUP確實著墨較少,而架構優劣也是足以影響軟體系統成敗的關鍵因素。
QoS(Quality of Service)或是SLR(Service Level Requirement),我想是每個系統最基本的要求,它包含可用性(Availability)、可管理(Manageability)、可信賴(Reliability)、可擴充(Scalability)和安全性(Security)等條件。
當系統架構進行規劃時,就應同步考慮這幾項條件。舉例而言,先前某家外商銀行因系統設計不良而導致外人可輕易猜出引數設定的方式,直接入侵系統竊取消費者隱私資料;也有某家電信業者為沒考慮系統的負載量,而導致在耶誕、跨年等重要節日時,湧入大量簡訊的尖峰時期造成服務塞車、系統當機。
在電視新聞中,我們常常可見類似的新聞報導,而背後隱藏的意義是,「當初沒做好系統架構規劃」,看得不夠遠、想得不夠深,等系統開發到一半,或是系統上線後才發現問題,此時再東補西補,為時已晚。
雖說不同的程式技術皆有其滿足QoS的方法,相較之下,Java對上述五大項功能的支援應該算是最為豐富。如在J2EE的設計模式(Design Pattern)中,幾乎都是為解決此幾項問題而設計,之後再配合程式語言本身的強固性,開發而成的企業級應用系統,我想應可滿足客戶對於QoS的嚴格要求。
話說回頭,企業一旦使用Java開發一套系統,就一定會是百分百穩定且滿足QoS嗎?我想,設計模式跟程式語言無關,將J2EE 設計模式作為C#實作的架構,也未嘗不可,只要能建構出相同安全穩定的環境執行該系統,都是可行的。就像會說國語,未必可寫出漂亮的文章一樣,訓練、經驗再加上一點天份才是最重要的。
專業技術認證可供參考
「人」是專案中最難預料與掌控的一項要素。人可分成兩部份,一是客戶,二是研發人員。客戶是最難掌握的,不同的客戶有不同的個性,沒有任何人能教導你,如何應付不同的客戶,除了靠運氣,還要靠經驗。
暫不談客戶,先看研發人員這部分。我想,要滿足技術與流程兩項因素,關鍵都是人。如何選擇對且合適的技術,要有專業人才;如何有效管理流程?如何規劃滿足AMRSS五項需求的系統架構?這都是需要有經驗的管理人才及架構師(architect)。當然,能不能寫出漂亮且可完善運作的程式程式碼,也是需要有一定水平的研發人員。
開發程式人員的水平是較容易被認證。Java有幾項專業認證,如SCJP、SCJD、SCWCD,都可用以鑑定開發人員基本的功力。另有SCEA、 SCBCD等認證可評鑑程式架構人員的素質。除專業訓練之外,經驗也是一位優秀的架構師所應具備的條件,而程式部份其實也有認證,如PMP。
也許你會覺得Java很八股,寫程式為什麼需要一大堆檔案、設計模式、程式與方法論(methodology),邊寫邊設計,且戰且走不行嗎?對於小型系統,或是沒有營運壓力系統而言,是可以的。如果是人力不足、預算有限、結案期限已在眼前,當然也該直接動工。
但依我接觸過案子經驗的深刻體驗,寧願花費較長時間與心力,在專案初期就先詳細規劃,才可節省後期開發的時間,系統上線後也更容易維護與擴充。雖然耕耘過程會較辛苦,但所得好處也會是倍增的。
你我的生活周遭已處處可見Java;到火星上走走、eBay大采購、網路銀行轉帳、拿著健保卡到醫院看病、無聊時把玩手機上的Java遊戲…。
在生活中,你通常只知道「喔!原來這網站是用Java寫的」、「喔!原來這是手機的Java Game」。若自技術層次拆解,Java Technology可簡單區分為Java 程式語言(language)與Java 平臺(platform)。
Java 程式語言所指是撰寫程式所需的語法與詞彙,像學習中、英文,有一套基本的單字與語法,只要利用單字組出符合語法的句子,這就是Java程式的基礎。
至於Java 平臺,如大家熟知的,Java共分三大平臺:J2ME、J2SE和J2EE,分別專精於嵌入式行動平臺、標準平臺和企業應用平臺,除了共同的類別函式庫(API)之外,每個平臺也有其特定的API,供程式設計師們開發使用。
隨著開發工具陸續推出,降低了Java開發技術門坎,要寫出正確無誤的Java程式不是太難的事情,但論及系統性的Java軟體開發,那可就不是一件輕鬆事。
開發大型專案有三項非常重要的因素,將會影響整個專案的進度與質量,分別是人(people)、流程(process)與技術(technology)。
這三個要素是環環相扣的,任何一項要素的成敗都會影響另外兩個要素,而每個要素也都足以影響一個專案的成敗。
如何取得這三者的平衡,並將每個要素充份的發揮,取決於管理者的經驗,與相關開發人員的素質,這不是一項簡單容易的任務,但有好的方法可以完成。
Java彈性多選擇資源豐富任君挑選
「技術」應該是最容易掌握的部份,因為你選擇了Java。如前所述,全世界已有許多Java資源可以選擇。某些人可能會認為Java技術門坎高,考慮訓練成本而決定匯入較為簡易的程式語言,如VB.Net,或是不敢轉換到Java平臺。
事實上,真正困難的不是Java程式語言或是API的使用,而是整個物件導向程式設計的概念。C#也標榜與Java有著類似的物件導向架構,除執行平臺不同、API的名稱不同,本質與Java可以算是孿生兄妹,怎麼沒聽有人抱怨C#很難學?
既然Java、.Net門坎是一樣的,那該如何選擇?答案是,你喜歡誰就選誰。只是當你決定投靠其中一個陣營時,不妨想想一件事:「在這個平臺上,我是不是有選擇的空間與自由?」
Java是一開放的技術、平臺,可執行於各類作業平臺,還有各式各樣的開發工具、API套件與執行環境,包括商業、免費、開放原始碼等豐富資源任君挑選。
流程關乎專案預算與時間控制
「程式」指的是軟體開發流程或是專案流程,定義流程的目的是要掌控所有的情況。專案的最大敵人是時間及預算,這兩者都是有限的,如何在有限預算內準時完成專案,可說是一項藝術。
幸運的是,時間和預算都是可控制的,並不是指我們可以控制時間快慢或長短,而是如何明確知道哪一個時間點,需要何種產出物,而我們有多少的預算可以完成。為有效控制,我們需要一個標準的流程,只要照著規矩走,一切都好辦。
RUP(Rational Unified Process)就是一種業界常用的不成文規矩,在多數軟體專案中幾乎都會使用的一項語言、方法與工具。 RUP的精神在於反覆(iterative)與漸近的(incremental)。
在漸進式的開發過程中,透過不斷的提煉(refine),可趁早發現問題且找出解決方法,也確保每一工作專案的進度。不過,在架構(Architecture)方面,RUP確實著墨較少,而架構優劣也是足以影響軟體系統成敗的關鍵因素。
QoS(Quality of Service)或是SLR(Service Level Requirement),我想是每個系統最基本的要求,它包含可用性(Availability)、可管理(Manageability)、可信賴(Reliability)、可擴充(Scalability)和安全性(Security)等條件。
當系統架構進行規劃時,就應同步考慮這幾項條件。舉例而言,先前某家外商銀行因系統設計不良而導致外人可輕易猜出引數設定的方式,直接入侵系統竊取消費者隱私資料;也有某家電信業者為沒考慮系統的負載量,而導致在耶誕、跨年等重要節日時,湧入大量簡訊的尖峰時期造成服務塞車、系統當機。
在電視新聞中,我們常常可見類似的新聞報導,而背後隱藏的意義是,「當初沒做好系統架構規劃」,看得不夠遠、想得不夠深,等系統開發到一半,或是系統上線後才發現問題,此時再東補西補,為時已晚。
雖說不同的程式技術皆有其滿足QoS的方法,相較之下,Java對上述五大項功能的支援應該算是最為豐富。如在J2EE的設計模式(Design Pattern)中,幾乎都是為解決此幾項問題而設計,之後再配合程式語言本身的強固性,開發而成的企業級應用系統,我想應可滿足客戶對於QoS的嚴格要求。
話說回頭,企業一旦使用Java開發一套系統,就一定會是百分百穩定且滿足QoS嗎?我想,設計模式跟程式語言無關,將J2EE 設計模式作為C#實作的架構,也未嘗不可,只要能建構出相同安全穩定的環境執行該系統,都是可行的。就像會說國語,未必可寫出漂亮的文章一樣,訓練、經驗再加上一點天份才是最重要的。
專業技術認證可供參考
「人」是專案中最難預料與掌控的一項要素。人可分成兩部份,一是客戶,二是研發人員。客戶是最難掌握的,不同的客戶有不同的個性,沒有任何人能教導你,如何應付不同的客戶,除了靠運氣,還要靠經驗。
暫不談客戶,先看研發人員這部分。我想,要滿足技術與流程兩項因素,關鍵都是人。如何選擇對且合適的技術,要有專業人才;如何有效管理流程?如何規劃滿足AMRSS五項需求的系統架構?這都是需要有經驗的管理人才及架構師(architect)。當然,能不能寫出漂亮且可完善運作的程式程式碼,也是需要有一定水平的研發人員。
開發程式人員的水平是較容易被認證。Java有幾項專業認證,如SCJP、SCJD、SCWCD,都可用以鑑定開發人員基本的功力。另有SCEA、 SCBCD等認證可評鑑程式架構人員的素質。除專業訓練之外,經驗也是一位優秀的架構師所應具備的條件,而程式部份其實也有認證,如PMP。
也許你會覺得Java很八股,寫程式為什麼需要一大堆檔案、設計模式、程式與方法論(methodology),邊寫邊設計,且戰且走不行嗎?對於小型系統,或是沒有營運壓力系統而言,是可以的。如果是人力不足、預算有限、結案期限已在眼前,當然也該直接動工。
但依我接觸過案子經驗的深刻體驗,寧願花費較長時間與心力,在專案初期就先詳細規劃,才可節省後期開發的時間,系統上線後也更容易維護與擴充。雖然耕耘過程會較辛苦,但所得好處也會是倍增的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-972599/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 淺析軟體開發專案的前期溝通工作
- 從 DevOps 到平臺工程:軟體開發的新正規化dev
- 軟體資源規劃
- 從一個簡單的Delete刪資料場景談TiDB資料庫開發規範的重要性deleteTiDB資料庫
- 軟體功能測試在軟體開發中的重要性。在哪裡做軟體測試?
- 談選擇、選擇對應的結果與玩家規劃能力的重要性
- 軟體開發的21條規律
- app開發的規劃與籌劃APP
- 我是如何從通訊轉到Java軟體開發工程師的?Java工程師
- 淺談軟體開發模型之瀑布開發和敏捷開發模型敏捷
- 軟體測試工程師的職業規劃工程師
- 開發者談如何通過有效的規劃讓遊戲核心更好玩遊戲
- 從“股票問題”談動態規劃問題的解決思路動態規劃
- java培訓分享:java軟體開發可以用哪些軟體?Java
- 淺談動態規劃動態規劃
- Java開發分析軟體:JProfiler for MacJavaMac
- 談一談動態規劃和dfs動態規劃
- 開發者“請回答”!HN 熱帖“當你對軟體開發感到失望,該如何規劃職業道路?”
- 路徑規劃: 淺談路徑規劃演算法演算法
- 軟體實施工程師職業規劃工程師
- 從軟體哲學角度談 Amazon SageMaker
- 深度解讀十四五軟體規劃中的“軟體定義”和SDS
- 從前端介面開發談微信小程式體驗前端微信小程式
- 淺談軟體開發中的防禦式程式設計程式設計
- 自動化運維專案前期規劃五大難點運維
- 【大型軟體開發】淺談大型Qt軟體開發(一)開發前的準備——在著手開發之前,我們要做些什麼?QT
- 從點線面體談開發到架構師的轉型架構
- Mac財產規劃軟體——Quicken WillMaker 2020 for macMacUI
- 動態規劃法(一)從斐波那契數列談起動態規劃
- 為什麼你學不過動態規劃?告別動態規劃,談談我的經驗動態規劃
- 軟體開發:app軟體開發,pc端軟體開發,微商城/小程式開發APP
- 軟體開發流變史:從瀑布開發到敏捷開發再到DevOps敏捷dev
- 開發十年經驗之談:如何構建自己的Java開發體系Java
- 談談資料戰略的重要性
- 從一個軟體故障出發,談談企業管理軟體領域內那些很難穩定重現故障的處理技巧
- 敏捷規劃,讓你做一個有計劃的開發人敏捷
- 如何從零開發一個NuGet軟體包?
- 軟體研發安全規範
- 淺談短影片軟體開發是如何搭上時代發展“快車”的