畢業生的商業軟件開發之路 ---- 商業軟件開發基礎
畢業生的商業軟件開發之路 ---- 商業軟件開發基礎
課程簡介
本系列教程是面向有志于從事于計算機軟件開發行業的畢業生的,因此只討論軟件開發相關的問題,不討論其他的行業的情況。在本次課程中筆者將對比畢業生在學校中的學習性軟件開發,介紹商業軟件開發的基本知識。
學習型軟件開發和商業軟件開發
畢業生在學校中也開發過一些計算機軟件,但這是學習或研究性質的軟件開發,實際上更偏向是單純的寫代碼;而畢業工作了,在軟件公司里進行軟件開發,此時進行的是商業軟件開發。學習性軟件開發和商業軟件開發具有比較大的差別。畢業生必須搞清楚這兩者之間的差別,否則工作時會吃力不討好。
以下是學習型軟件開發和商業軟件開發的比較表[袁永福版權所有]
|
比較項目 |
學習型軟件開發 |
商業軟件開發 |
|
最終目的 |
學習和探索軟件開發技能。 |
做出能賣出去的軟件產品。 |
|
成本 |
不計成本。 |
需要斤斤計較。 |
|
過程 |
沒多少控制,想到什么就做什么。 |
需求調研,計劃,審核,開發,測試,部署。一個都不能少。 |
|
代碼,文檔規范 |
沒有要求。 |
必須控制。 |
|
軟件質量 |
沒有要求。 |
必須控制,需要經過測試來達到合適的軟件質量,但不追求過高的質量。 |
|
兼容性 |
沒有要求。 |
需要控制,能適應特定的軟件運行環境。 |
|
性能 |
沒什么控制,有兩個極端。 1. 完成功能即可,不管性能。 2. 無限的追求高性能 |
必須要性能,不能低也不能高。 |
|
用戶界面 |
粗制濫造,不講美觀。 |
重視,需要依賴專業的美工人員。 |
|
時間進度 |
沒有要求。 |
存在明確的時間節點。 |
|
產品化 |
沒有要求。 |
可能需要用戶手冊,學習資料,宣傳資料,產品包裝,產品網站等。 |
現針對這些比較項目深入的探討下去。
項目軟件和產品軟件
首先說明一下商業軟件的分類,大多分為合同軟件和產品軟件。
合同軟件
某個行業的客戶委托軟件廠商開發一套該客戶自己使用的的定制軟件。這種軟件功能是定制的,只有這個客戶能直接使用,其他單位,即使是同行業的也不能直接使用。這種定制軟件充分的只針對這個客戶自身的特點。由于這種軟件開發都需要簽訂開發合同,所以稱為合同軟件開發。比如中國移動的繳費系統就是項目軟件,只能中國移動使用,其他電信運營商用不了。項目軟件具有以下幾個特點。
1. 由客戶發起軟件開發工作,可能會搞項目招標。
2. 客戶和軟件開發商簽訂開發合同。指明軟件功能、開發時間和金額。
3. 開發出來的軟件只能用于該客戶使用,一般不得給其他客戶使用,實際上其他客戶也用不了。
4. 軟件的知識產權有可能歸客戶擁有。
5. 軟件廠商負責軟件的研發,此外一般還負責軟件的部署、客戶培訓、運行維護等工作。
6. 軟件開發商還可能順帶負責客戶的信息化基礎建設,比如采購硬件和系統軟件等。
7. 軟件部署后大多修改不大,若客戶出現大的需求變化則可能會購買新的合同軟件。
產品軟件
軟件廠商針對特定的用戶群開發一個通用的軟件產品,特定用戶群中的每個客戶都能直接使用這個軟件而無需定制,這就是產品軟件。比如Windows操作系統,金山毒霸等就是產品軟件。產品軟件的特點有。
1. 由軟件廠商自發的進行,不會簽訂項目軟件開發合同。
2. 軟件功能需求需軟件廠商自己想法搜集。
3. 開發出來的軟件針對某個用戶群,而不僅針對單個客戶。
4. 軟件產品需要長期規劃,可能需要升級換代。
5. 軟件知識產權歸軟件廠商擁有。[袁永福版權所有]
6. 有軟件商業包裝,提供完備的用戶手冊,各種學習資料及產品網站等。
以下是合同軟件和產品軟件的對比表。
|
比較項目 |
合同軟件 |
產品軟件 |
|
發起者 |
客戶 |
軟件廠商 |
|
簽訂合同 |
簽訂 |
一般不簽訂 |
|
知識產權 |
可能歸客戶擁有 |
軟件廠商擁有 |
|
軟件應用范圍 |
單個客戶 |
用戶群體 |
|
軟件功能 |
定制 |
通用 |
|
軟件包裝 |
一般,僅包括用戶手冊。 |
好,用戶手冊、各種學習資料、產品網站等。 |
|
軟件技術 |
夠用就行 |
要求高 |
|
軟件發展 |
部署后修改不大 |
需要升級換代 |
在本教程中的商業軟件開發只包括合同軟件開發,不考慮產品軟件開發。
商業軟件開發基本概念
學習性軟件開發是以軟件開發人員為中心的,而商業軟件開發是以客戶為中心的。這是兩者的本質區別。
學習性軟件開發是完全由開發人員隨心所欲的控制的,只是自發的學習和實踐一些軟件開發技巧,沒有經濟目的。畢業生以前的學習性軟件開發一般就是編寫一些程序代碼,算是花拳繡腿,練練腿腳。
商業軟件開發是有客戶發起的,由客戶付費雇傭軟件開發商開發軟件。顧客是上帝,這個普遍存在的規律使得開發人員不能隨心所欲的開發軟件。
商業軟件開發的主要目標是經濟目標,開發出能賣出去賺取利潤的軟件。利潤等于收入減去成本。軟件開發公司是雖然是以客戶為上帝,但卻是以追求自身利潤最大化的終極目標的,而軟件開發過程只有成本沒有收入,為了追求利潤,軟件公司自然會千方百計的降低軟件開發過程中的成本。
商業軟件開發的平衡點
在商業軟件開發中存在一個根本矛盾,一個是客戶希望用最便宜的價格購買質量最好、功能最多的軟件,一個是軟件廠商以最貴的價格出售成本最低、功能最少的軟件。這對矛盾之間形成一個平衡點,

而商業軟件開發就應當準確的命中這個平衡點,一切圍繞著滿足客戶需求并降低開發成本而開展工作。如下圖所示,該平衡點有軟件開發時間、軟件質量和軟件功能三塊內容。

軟件開發時間
商業軟件開發時間大多是有明確限制的,在客戶和軟件公司簽訂的項目軟件的開發合同中肯定會明確規定軟件的開發完成時間,若開發延期了軟件公司是會賠償的,因此軟件開發時間是固定的,而且大多數是很緊張的。軟件開發時間越短,工作強大越大,則軟件開發整體成本會很高,但由于合同的存在,軟件開發時間方面軟件開發廠商沒什么好說的。
軟件質量
客戶希望軟件的質量越高越好,軟件穩定不出錯。但開發高質量的運行穩定可靠的軟件的成本是很高的,因此軟件廠商并會開發很高質量的軟件,而且根據客戶所實際需要的軟件質量而定的,開發出來的商業軟件質量會比客戶所實際需要的高一些,但不會高很多。商業軟件開發人員對軟件質量的追求是適可而止的。
即便如此,商業軟件的質量是比學習性軟件的質量高的多。因為商業軟件可能在客戶處長期運行好幾年,其中不能出現重要業務數據丟失的情況,因此很多商業軟件是第一要求是安全穩定。一般情況下,商業軟件開發要求是穩定壓倒一切,其次才是軟件功能。
軟件功能
客戶提出客戶需求后,商業軟件應當能實現客戶提出的需求,若可能的話可以略有增加,商業軟件的功能不能大大超出客戶提出的需求。商業軟件開發人員對軟件功能的追求也是適可而止的,夠用就行。
有些商業軟件可能存在明確的后續開發需求,比如軟件項目分為一期,二期等。此時軟件廠商決定軟件功能需要進行額外的考慮。
以商業軟件開發平衡點出發,筆者就說一些商業軟件開發的其他方面。
過程和質量控制
有好的過程不一定有好的結果,但沒有好的過程就不可能有好的結果。學習性軟件開發是隨心所欲的,但商業軟件開發需要過程控制。商業軟件開發大體經過以下幾個步驟[袁永福版權所有]
|
步驟 |
工作內容 |
產生結果 |
|
需求調研 |
調研人員去客戶去詢問、記錄、整理用戶需求。并將客戶原始需求轉化為軟件功能需求。 |
需求說明書。 |
|
軟件系統設計 |
軟件開發人員針對軟件功能需求進行系統整體設計。包括模塊技術,預計采用的技術和開發環境等。 |
系統設計說明書。 |
|
軟件設計 |
深入進行軟件各個模塊的詳細設計。 |
系統詳細設計說明書。 |
|
軟件開發 |
若干個軟件開發人員一起完成軟件功能的開發。 |
程序文件等。 |
|
軟件測試 |
測試人員對照需求說明書進行軟件的功能測試。 |
|
|
產品化 |
編寫用戶手冊,學習資料等。 |
用戶手冊等。 |
|
部署 |
軟件在客戶現場的部署。 |
|
|
維護 |
軟件系統的維護,一些錯誤的修改。 |
|
學習性軟件開發的需求調研和軟件設計是草草而過的,軟件開發后就結束了。而商業軟件開發則是嚴謹有步驟的。這幾個步驟都是業界經過長期商業軟件開發的實踐而制定出來的。而一些軟件開發認證體系,比如CMMI等更是將這些步驟制度化,系統化。
商業軟件開發的過程需要進行質量控制。
新舊技術的權衡
現在軟件業界的新技術越來越多,商業軟件開發可以采用一些新技術來與時俱進,但需要經過權衡,利弊分析。
拒絕一切新技術是沒有前途的,因為用戶需求是越來越復雜,舊技術可能很難或無法實現新的用戶需求。此時軟件廠商由于其產品老化,功能不足,成本越來越高而被市場淘汰。
而盲目采用新技術則是很冒險的。采用新技術可能會帶來以下幾個問題
1. 新技術自身沒有經過長期的實踐檢驗,可能存在問題,這會影響到商業軟件的安全和穩定。
2. 新技術可能會帶來兼容性問題。開發人員以前的掌握的開發技巧,舊的正在運行的軟件模塊都可能和新技術沖突。
3. 新技術帶來學習成本。開發人員需要花時間花精力學習新技術,這會影響商業軟件開發的時間進度。
4. 新技術可能不實用。新技術在投入使用后可能毫無作用或者起負面作用。此前對新技術的投入毫無效果,加大商業軟件的開發成本。
采用新技術在短期內必然會導致軟件開發成本上升,而且長期也不一定會降低開發成本。因此需要軟件開發廠商在使用新技術前需要進行過權衡,利弊分析。新技術是為了有效的降低長期成本,而不是軟件開發人員個人的技術鍍金。
商業包裝
春晚曾經演過鞏漢林和趙麗蓉合作的名為《如此包裝》關于評劇的商業包裝的小品,里面就涉及到了商業產品的概念、名稱、美觀度和系統化。下圖是該小品的一個截屏。

在該小品中,趙麗蓉換一個英文名,用英文打招呼,那是進行產品的概念、名稱的包裝。著名的“嗨,嗯哼”就源于這個小品。
趙麗蓉換服裝,換背景音樂,那是改善產品美觀度,使得符合大眾口味。
趙麗蓉不是一個人在唱評劇,后面還跟著一群美女伴舞,那是進行產品的系統化。
學習性軟件研發沒有商業包裝,開發人員寫代碼編譯生成一個程序文件就算完事了。
而商業軟件需要商業包裝。軟件名稱大多是在合同中定的,比如“XX公司辦公管理系統”之類的,這個軟件廠商沒法改,那就制造概念,比如聲稱軟件采用了XX軟件巨頭的先進的OO工作流技術,并自主實現了YY技術等等。
商業軟件的用戶界面需要經過專業美工的美化,使得符合大眾口味。
商業軟件不是一個單獨的程序文件,后面還跟著用戶手冊、學習視頻、客戶培訓等配套東西,以便進行產品的系統化。
用戶界面需要美化,用戶體驗要求不差,需要配備完整詳細的用戶手冊。此外產品類軟件的商業包裝就更多了。
商業軟件開發人員的工作環境
這里說一下商業軟件開發人員的工作環境,畢業生需要了解商業軟件開發者在軟件公司中的位置,埋頭苦干是要發揚的,認清工作環境也有利于更好的工作,這里的工作環境不僅僅指工作的場所,還包括公司的組織架構,人員的分工等情況。[袁永福版權所有]
如下圖所示,在一個軟件公司中,大致分為管理層、軟件開發人員和市場營銷人員。

管理層包括企業老板、各級經理等,它對軟件開發人員和市場營銷人員下達工作指令。是一個軟件公司中最優勢的人群,同時也是責任最大的人群,所有的重大責任都可歸根到管理層。
市場營銷人員負責市場營銷工作,跑客戶,拿合同。是軟件公司直接的創收人群。
軟件開發人員負責軟件項目開發、部署和維護。是軟件公司的根本驅動力。
在公司之外的就是客戶,客戶接受公司提供的服務,并為這些服務向公司支付費用。
先說明一下軟件開發人員對這些工作環境進行一些說明。
對于客戶
軟件公司的一切活動本身都不產生價值,但為客戶因為軟件公司的一些活動而向公司支付費用時,軟件公司的這些活動才產生價值。因此軟件公司的一切工作都直接或間接的圍繞著客戶來展開的。畢業生需要時刻記著要開發精確符合客戶需求的軟件。
軟件開發人員服務客戶有兩種,一種是在公司內部替客戶開發軟件,另外一種就是在客戶現場幫助客戶進行軟件項目的實施和維護。
在公司內部替客戶開發軟件時需要充分理解客戶需求。商業軟件是軟件開發人員對于客戶需求的一種描述,不理解客戶需求,技術再好也是南轅北轍。因此商業軟件開發第一步就是準確的獲得和理解客戶需求。
在客戶現場幫助客戶進行軟件項目的實施和維護。請注意,這是幫助客戶而不是代替客戶。因為軟件最終是為客戶所用的,軟件開發人員不可能替客戶使用這個軟件,但客戶不懂技術,因此軟件開發人員需要幫助客戶部署和維護軟件,還需要提醒和幫助客戶建立運行軟件的各種必備條件。
對于市場營銷人員
可以說,市場營銷人員是沖鋒陷陣的士兵,那軟件開發人員就是兵工廠和農民,兩者都是不可缺少的。不過在大多數情況下,市場營銷人員對比軟件開發人員是優勢的,這是中國的基本國情所決定的。
中國的市場經濟體制還不夠成熟,商業交易規則很復雜,交易成本高,難于控制;但中國人力資源豐富,軟件技術人員比較多,而且軟件技術開發規則相對于商業交易規則是簡單的,比較好控制。這就迫使管理層將更多的精力放置在市場營銷工作上,因此市場營銷人員在公司中是占有優勢的,這點在小型公司是更突出的。
不過對于有志于軟件開發工作的畢業生也無需多慮,因為優勢和劣勢是對立統一的。市場營銷工作也是很復雜的,國內的交易規則很復雜,做好市場工作不容易,是需要付出不小的代價。但軟件開發工作由于規則簡單,認真做還是能做好的,而且隨著國內軟件行業的不斷進步,軟件開發人員的重要性是會日益突出的。
認清楚軟件開發人員在軟件公司中的位置,則能更有針對性的開展工作了。
軟件開發人員性格內向率比較高,人際交往能力不強,以自我為中心,并不能了解市場人員的處境,反而覺得市場人員成天吃吃喝喝,到處忽悠,有點瞧不起。其實筆者建議軟件開發人員要放下所謂的清高,多和市場人員交流交流,掌握客戶的更多的信息,這有助于開發更符合客戶需求的軟件,而且能降低公司管理的復雜性。市場交易規則已經很復雜了,若一個軟件公司內部的管理規則也很復雜,那就很容易淹沒在幾千家軟件公司組成的汪洋大海了。
軟件開發人員對于市場人員還需要灌輸一些基本的技術概念,以避免市場人員為了爭奪合同而對客戶做出不切實際的技術承諾。這些不切實際的技術承諾是個苦差事,對大家都沒有好處,但市場人員不精于技術,當初可能不自知,對此軟件開發人員需要利用自己的優勢主動預防這種事。
對于管理層
軟件開發人員對于公司管理層,也就是各級領導,也要尊重領導,服從領導和利用領導。領導很多是軟件行業的老人,尊老是中國的老傳統,領導是上級,服從上級也是應該的。利用領導分為一下兩種,一種是利用領導的經驗和智慧,第二是利用領導的權力。
畢業生需要能利用領導的經驗和智慧。畢業生作為新手,經驗尚未積累,能力有限,因此在工作時會遇到各種困難和難題,獨立思考和解決固然很好,但那是要花時間的,在學校中有充分的思考時間,但在企業中時間就是金錢,是沒有那么多時間獨立思考的,此時需要撿現成的,向領導和同事請教,利用領導的經驗和智慧。
畢業生不需要顧慮所問的問題很簡單很可笑,顯得很白癡,其實大家都了解畢業生的狀態,是不會這么看的。但是問問題是應當找直接領導,一般不要越級上訪。
畢業生需要能利用領導的權力,在工作中遇到一些不能自己決定的時候,尤其是在客戶處。此時需要及時的請示領導,留給領導做出決定,這種事不能拖,若找不到直接領導,那就找間接領導。[袁永福版權所有]
posted on 2011-07-04 09:59 袁永福 電子病歷,醫療信息化 閱讀(1678) 評論(0) 收藏 舉報
浙公網安備 33010602011771號