1.4 該怎么做
學習軟件開發,首先要了解軟件產業本身。2007 年,我國軟件產業的銷售收入達到了5800億元,這是一個很有前途的行業。下面介紹這個產業的運作過程。
1.4.1 軟件產業的一般過程
圖1.4說明了軟件產業的一般過程,圖1.4中描述的不僅是軟件開發單位開發軟件的基本過程,也描述了軟件應用單位中對軟件的大致應用過程,其中涉及的兩個主要單位分別是軟件開發單位和軟件應用單位。

圖1.4 軟件產業的一般過程
軟件開發單位:開發軟件的企業的內部一般有開發設計人員,有的公司沒有銷售人員,僅僅負責開發,自己并不進行軟件銷售,而是交給代理商進行銷售。
有些軟件開發單位表面上給人的感覺就是純軟件研發單位,但這類公司通常還從事系統集成,因為大部分的軟件應用單位要上馬一個項目時,一般將硬件(如計算機、網絡等設備)的采購和軟件產品的招標捆綁在一起,因此,這些做軟件研發的單位,一般都具有很強的系統集成能力。有的公司是以硬件聞名的,如聯想、華為等公司;還有的公司是以運營聞名的,如Google、盛大(游戲公司)等公司,這些公司聞名于世的是它的某個產品的運營,而不是軟件開發本身。
典型的以軟件開發和系統集成為主的公司有東軟集團股份有限公司(主要業務是電信、電力、保險、醫療等行業管理軟件,http://www.neusoft.com/),杭州信雅達系統工程股份有限公司
(主要業務是金融管理系統,http://www.sunyard.com/)等。
典型的以硬件開發和銷售為外在形象的公司有華為集團(目前是世界上前三大網絡產品提供商,http://www.huawei.com/cn/)等。
典型的以運營聞名的軟件企業有盛大(http://www.snda.com.cn/cs/index.jsp)公司等。盛大公司是一家游戲企業,雖然也開發游戲軟件,但是該公司更知名的是其運營能力。
軟件應用單位:首先要區分軟件應用單位和最終用戶,軟件應用單位是軟件使用的公司或者企業,并不一定是最終用戶,如移動通信系統的計費系統,中國移動公司是軟件應用單位,而最終用戶可能是一個移動手機的用戶。
軟件開發單位開發的軟件分為兩種:一種是通用軟件,另一種是專用軟件。不論哪種軟件,都需要通過銷售渠道銷售給客戶才有機會盈利。軟件開發單位銷售軟件的渠道有兩種:一種是自行銷售,就是通過自己的銷售團隊去銷售;另一種是通過代理銷售,就是將軟件以一定的折扣價格給代理商,由代理商負責銷售,簽訂合同,或者負責部分維護和實施工作。當然,很多企業都會開展兩種營銷體系。還有一種軟件開發企業,沒有自己的獨立營銷體系,成為軟件外包企業,專門為其他公司做軟件的研發,甚至只進行研發的一部分(如編碼),這類企業在沿海地區(如大連、蘇州、杭州等地)蓬勃發展。
銷售通用軟件一般不需要經歷過多的軟件研發過程,因為軟件已經由軟件開發商開發成型,不需要過多的修改,因此,通用軟件大多會通過代理商進行銷售。比如,聯邦軟件等軟件銷售公司,銷售的通常是通用軟件,網上(如天空軟件等)下載的軟件,基本上都是通用軟件。圖1.5是兩種典型的通用軟件。

圖1.5 通用軟件
專用軟件一般僅用于一個或者數個單位。如計費系統,每個省份的情況可能差別較大,通常,一個開發單位承接一個省份的計費系統后,都作為一個專門項目開發。不過,通用項目和專用項目之間,并沒有一個完全的界限。比如ERP系統,在ERP開發公司來看,本身是通用項目,但由于每個單位都有實際不同的情況,因此需要進行定制,這部分工作就是開發專用軟件的工作。因此,專用軟件可能會以通用軟件為基礎進行定制研發。圖 1.6 是典型的專用軟件,由于每個省的政策不同,因此軟件公司在承接浙江省行業社會保險服務網這類軟件時,肯定需要定制。

圖1.6 典型的專用軟件
軟件項目開發應首先區別是專用軟件還是通用軟件。如果是通用軟件,則直接由開發單位或者代理商銷售給客戶,不需要經過定制過程。通用軟件在第一次研發階段,需要經歷軟件開發的整個生命周期,在軟件成熟后,就不需要每次應用都要經歷需求、開發等過程。如瑞星殺病毒系統,每位客戶只需要花費100元左右購買一個系列號,瑞星公司不可能為某個客戶做定制開發。如果是 ,則每個應用單位在實施的過程中,都需要經歷需求、設專用軟件計、開發、測試、實施等過程,這是軟件典型的生命周期。
通用軟件和專用專用軟件之間沒有明顯的鴻溝,有些軟件已由開發單位做成通用軟件了,但是,每個單位實施的時候,都需要經過軟件的二次開發和定制,就不能說這個軟件就是通用軟件或者就是專用軟件。但是,很明顯,專用軟件和通用軟件的開發過程有較明顯的差異,通用軟件要適應各個企業的應用環境,一般來說,其系統更穩定,開發代價更高。
在一般的軟件工程中,討論的主要是軟件的需求、設計、開發、測試、實施等各個過程。本書也將圍繞具體的案例,就這個過程展開。
1.4.2 軟件的開發過程
上面描述了軟件產業的一般過程。軟件項目開發與實施這個課程,主要關注軟件的開發過程,也就是圖1.4描述的專用軟件開發中帶有斜線的部分,圖1.4描述的是大致的應用過程。如果按照總體步驟劃分,又可以分為計劃階段、開發階段、維護階段,如圖1.7所示。圖1.7描述的是具體的從項目角度考慮的過程,而圖1.4主要是從產業角度考慮的過程,圖1.4涵蓋了開發單位中與軟件開發有關的過程,而圖1.7描述了軟件開發單位所經歷的詳細的過程。
1.計劃階段
計劃階段可分兩步:制定計劃和需求分析。
(1)因為軟件是計算機系統中的一個子系統,所以要從確定的軟件子系統出發,確定工作域,即確定軟件總的目標、功能等,開發這樣的軟件系統需要哪些資源(人力和設備);作出成本估算,而且還要求作出可行性分析,即在現有資源條件下能否實現這樣的目標;最后要提出進度安排,并寫出軟件計劃文檔。對上述問題都要進行管理評審。
(2)在管理評審通過以后,要確定系統定義和有效性標準(軟件驗收標準),寫出軟件需求說明書,還要開發一個初步用戶手冊,這里要進行技術評審。技術評審通過以后,再進行一次對軟件計劃的評審,因為這時對問題有了進一步的了解。因為在制定計劃時,數據較少且經驗不足,所以對制定的計劃需要進行多次修改,以盡量滿足各種要求,然后再進入開發階段。
2.開發階段
開發階段分為三個步驟:軟件設計、程序編寫和軟件測試。
(1)對軟件進行結構設計,定義接口,建立數據結構,規定標記。
(2)對每個模塊進行過程設計、編碼和單元測試。
(3)進行集成測試和系統測試,對每一個測試用例和結果都要進行評審。
3.維護階段
首先要做的工作就是配置評審,檢查軟件文檔和代碼是否齊全,兩者是否一致,是否可以維護等;然后確定維護組織和職責,并定義表明系統錯誤和修改報告的格式。維護可分為改正性維護、完善性維護和適應性維護等。維護內容廣泛,有人把維護看成是第二次開發,不只是糾錯。要適應環境的變化,就要擴充和改進,但不是建立新系統。維護的內容應該先通知用戶,要得到用戶的認可;然后再進入修改,修改不只是代碼修改,必須有齊全的修改計劃、詳細過程以及測試等文檔。

圖1.7 軟件開發的基本過程