我們應該知道的軟件開發過程

一、軟件開發簡介
軟件(Software)簡單的說就是那些在計算機中能看的着,但摸不着的東西,概念性的說軟件也稱爲“軟設備”,廣義地說軟件是指系統中的程序以及開發、使用程序所需要的所有文檔的集合。軟件分爲系統軟件和應用軟件。
軟件並不只是包括可以在計算機上運行的程序,與這些程序相關的文件一般也被認爲是軟件的一部分
軟件被應用於世界的各個領域,對人們的生活和工作都產生了深遠的影響


二、 軟件開發的內容

1) 需求:不僅僅是用戶需求,應該是開發中遇到的所有的需求。比如,你首先要知道做這個項目是爲了解決什麼問題;測試案例中應該輸入什麼數據......爲了清楚地知道這些需求,你經常要和客戶、項目經理以及項目夥伴交流。

2) 設計:編碼前,肯定有個計劃告訴你要做什麼,結構是怎樣等等。你一定要按照這個來做,否則可能會一團糟。

3) 編程: 如果在項目截止日,你的程序不能跑起來或達不到客戶的要求,你就拿不到錢。

4) 測試 :目的是讓你知道,什麼時候算是完成了。如果你聰明,你就應該先寫測試,這樣可以及時知道你是否真地完成了。否則,你經常會不知道,到底有哪些功能是真正完成了,離預期目標還差多遠。


三、客戶和開發人員

客戶

1) 定義每個用戶需求的商業優先級;
2) 制訂總體計劃,包括用多少投資、經過多長時間、達到什麼目的;
3) 在項目開發過程中的每個工作周,都能讓投資獲得最大的收益;
4) 通過重複運行你所指定的功能測試,準確地掌握項目進展情況;
5) 能隨時改變需求、功能或優先級,同時避免昂貴的再投資;能夠根據各種變化及時調整項目計劃;
6) 能夠隨時取消項目;項目取消時,以前的開發工作不是一堆垃圾,已開發完的功能是合乎要求的,正在進行或未完成的的工作則應該是不難接手的。



開發人員

1 )知道要做什麼,以及要優先做什麼;
2 )工作有效率;
3 )有問題或困難時,能得到客戶、同事、上級的回答或幫助;
4 )對工作做評估,並根據周圍情況的變化及時重新評估;
5 )積極承擔工作,而不是消極接受分配;
6 )一週40小時工作制,不加班。


四、 軟件開發過程


分析
軟件需求分析就是回答做什麼的問題。它是一個對用戶的需求進行去粗取精、去僞存真、正確理解,然後把它用軟件工程開發語言(形式功能規約,即需求規格說明書)表達出來的過程。本階段的基本任務是和用戶一起確定要解決的問題,建立軟件的邏輯模型,編寫需求規格說明書文檔並最終得到用戶的認可。需求分析的主要方法有結構化分析方法、數據流程圖和數據字典等方法。本階段的工作是根據需求說明書的要求,設計建立相應的軟件系統的體系結構,並將整個系統分解成若干個子系統或模塊,定義子系統或模塊間的接口關係,對各子系統進行具體設計定義,編寫軟件概要設計和詳細設計說明書,數據庫或數據結構設計說明書,組裝測試計劃 。


設計
軟件設計可以分爲概要設計和詳細設計兩個階段。實際上軟件設計的主要任務就是將軟件分解成模塊是指能實現某個功能的數據和程序說明、可執行程序的程序單元。可以是一個函數、過程、子程序、一段帶有程序說明的獨立的程序和數據,也可以是可組合、可分解和可更換的功能單元。模塊,然後進行模塊設計。概要設計就是結構設計,其主要目標就是給出軟件的模塊結構,用軟件結構圖表示。詳細設計的首要任務就是設計模塊的程序流程、算法和數據結構,次要任務就是設計數據庫,常用方法還是結構化程序設計方法。

編碼
軟件編碼是指把軟件設計轉換成計算機可以接受的程序,即寫成以某一程序設計語言表示的"源程序清單"。充分了解軟件開發語言、工具的特性和編程風格,有助於開發工具的選擇以及保證軟件產品的開發質量。
當前軟件開發中除在專用場合,已經很少使用二十世紀80年代的高級語言了,取而代之的是面向對象的開發語言。而且面向對象的開發語言和開發環境大都合爲一體,大大提高了開發的速度。

測試
軟件測試的目的是以較小的代價發現儘可能多的錯誤。要實現這個目標的關鍵在於設計一套出色的測試用例(測試數據和預期的輸出結果組成了測試用例)。如何才能設計出一套出色的測試用例,關鍵在於理解測試方法。不同的測試方法有不同的測試用例設計方法。兩種常用的測試方法是白盒法測試對象是源程序,依據的是程序內部的的邏輯結構來發現軟件的編程錯誤、結構錯誤和數據錯誤。結構錯誤包括邏輯、數據流、初始化等錯誤。用例設計的關鍵是以較少的用例覆蓋儘可能多的內部程序邏輯結果。白盒法和黑盒法依據的是軟件的功能或軟件行爲描述,發現軟件的接口、功能和結構錯誤。其中接口錯誤包括內部/外部接口、資源管理、集成化以及系統錯誤。黑盒法用例設計的關鍵同樣也是以較少的用例覆蓋模塊輸出和輸入接口。黑盒法。

維護
維護是指在已完成對軟件的研製(分析、設計、編碼和測試)工作並交付使用以後,對軟件產品所進行的一些軟件工程的活動。即根據軟件運行的情況,對軟件進行適當修改,以適應新的要求,以及糾正運行中發現的錯誤。編寫軟件問題報告、軟件修改報告 。
一箇中等規模的軟件,如果研製階段需要一年至二年的時間,在它投入使用以後,其運行或工作時間可能持續五年至十年。那麼它的維護階段也是運行的這五年至十年期間。在這段時間,人們幾乎需要着手解決研製階段所遇到的各種問題,同時還要解決某些維護工作本身特有的問題。做好軟件維護工作,不僅能排除障礙,使軟件能正常工作,而且還可以使它擴展功能,提高性能,爲用戶帶來明顯的經濟效益。然而遺憾的是,對軟件維護工作的重視往往遠不如對軟件研製工作的重視。而事實上,和軟件研製工作相比,軟件維護的工作量和成本都要大得多。


在實際開發過程中,軟件開發並不是從第一步進行到最後一步,而是在任何階段,在進入下一階段前一般都有一步或幾步的回溯。在測試過程中的問題可能要求修改設計,用戶可能會提出一些需要來修改需求說明書等。



五、 軟件開發的注意事項


1、項目設計
項目設計的主導思想,我覺得可以理解爲兩種,一種是完全設計,一個是簡單設計。
完全設計是指在具體編寫代碼之前對軟件的各種方面都調查好,做好詳細的需求分析、編寫好全部的開發文檔,設計出程序全部流程後再開始寫代碼。 換句話說,就是全部的計劃好了,能看到最終的樣子,再開戰。這好像也是很多“軟件工程”書裏要求的那樣。開始的時候,我覺得這種方法不錯也。什麼都計劃好了,照着做就是了。不過這裏有個明顯的問題,就是誰來做這個完美的計劃?估計只有及其BT的人了,但是大部分人的想要完全設計,並且沒有錯誤,或者已經有幾種後備的容錯方案,並能準確無誤的推行。以達到最終目標。這樣的境界,沒有很多年的工作經歷是不可能的。我也沒有這樣的本事,所以我也就放棄了這種想法。
簡單設計:簡單設計一種概念,一種可以接受的簡單的設計,最起碼數據庫已經定下來,基本流程已經確定的方案,來作爲程序設計的開始,並隨時根據實際情況的進展來修正具體的功能設計,但這種功能修改不能是修改數據庫結構。也就是說數據庫結構是在編程之前經過反覆論證的。這種方法減少了前期設計的時間,把代碼編寫工作和部分設計工作放在了一起,實際縮短了項目開發的時間。如果說完全設計方法要求有很厲害的前期設計人員,那麼簡單設計要求有很有設計頭腦的編程人員。編程人員不僅僅是K代碼的人而且要負責程序架構的設計。所以對程序員的要求就很高了。 簡單設計的成功的一個基點是編程人員設計的邏輯結構簡單並能根據需要來調整其邏輯結構,就是代碼結構靈活,簡單設計帶來的另外一個變化就是會議會比較多,編程人員之間的交流就變的很重要。現在一般的中小型軟件公司基本上都是採用簡單設計的,除非那些很大型的軟件公司。
總結,簡單設計考驗的是開發人員的能力。完全設計考驗的是前期設計人員和整個項目組完整能力。(各種文檔的編寫,開發人員一定會要寫一部分的。)


2、設計變化和需求變化
開發人員最怕的是什麼呢?設計變化,還是需求變化?我覺得需求變化是最最致命的。當你的一個項目數據庫都定下來後,而且已經開發了若干個工作日,突然接到甲方公司提出,某個功能要改變,原先的需求分析要重新改,如果這個修改是涉及的數據庫的表結構更改的話,那真是最致命的。這就意味着項目的某些部分得重新推倒重來,如果這個部分跟已完成的多個部分有牽連的話,那就後果更可怕了。所以當碰到這種情況發生,作爲項目經理的你就應該考慮先查責任人,究竟是自己的需求分析做的不夠好,還是客戶在認同了需求分析後做出的修改,如果是後者的話,你完全可以要求客戶對他的這個修改負責任!那麼,呵呵,客戶先生,對不起了,本次新增加的需求將歸入另外一個版本。如果是改變前面某個需求的定義,那麼說不定就要推倒重來了,不過這個時候到不用太在意,畢竟錯的是客戶。(項目正式開始前沒有沒有說清楚其需求)。所以,各位看客,在需求分析做好後,在開工之前一定要叫客戶認可簽字,並且在合同上要註明,當由客戶原因引起的需求改變而造成開發成本的增加,客戶要爲此買單地。
如果在需求不變的情況之下,設計發生了變化,這個僅僅是我們內部之間的矛盾,商量一下就能解決。在簡單設計中,因爲前期的設計是不完整的,那麼當進入任何一個新的模塊進行開發時,都有可能引起設計的變化。開發人員的水平的高低就基本上決定了軟件的好壞。


3、代碼編寫
當需求定下來數據庫也定下來後, 其實我們就可以進行實質性的編碼了,按照我的看法,一個人單獨編程最好,能隨時偷懶。(上網,和MM聊聊),但是現在的軟件項目越來越大,工期也越來越緊,事實上我們一個小組裏面,一般有3-5程序員,所以我們要強調團隊合作性。那麼你寫的代碼使得別人要能夠看懂,我們必須在實際的編寫代碼過程中要有詳細的編碼規範,編碼規範在很多書籍裏面都提到過。但最起碼以下的一些規範是我們必須要遵守的:

一)源程序文件結構:
每個程序文件應由標題、內容和附加說明三部分組成。
(1)標題:文件最前面的註釋說明,其內容主要包括:程序名,作者,版權信息,簡要說明 等,必要時應有更詳盡的說明(將以此部分以空行隔開單獨註釋)。
(2)內容控件註冊等函數應放在內容部分的最後,類的定義按 private 、 protected 、 pubilic 、 __pubished 的順序,並儘量保持每一部分只有一個,各部分中按數據、函數、屬性、事件的順序。
(3)附加說明:文件末尾的補充說明,如參考資料等,若內容不多也可放在標題部分的最後。

二)界面設計風格的一致性:
由於採用可視化編程,所有的界面均與Win32方式類似,相應採用的控件等也大都爲Windows操作系統下的標準控件,而且參考了其他一些市面上相關的企業內部管理的應用軟件。
基於簡單易操作的原則,貼近用戶考慮,用戶界面採用Windows風格的標準界面,操作方式亦同Windows風格,這樣在實施過程,可以降低對客戶的培訓,也可以使用戶容易上手,簡單易學。

三)編輯風格:
(1)縮進:縮進以 Tab 爲單位,一個 Tab 爲四個空格大小。全局數據、函數 原型、標題、附加說明、函數說明、標號等均頂格書寫。
(2)空格:數據和函數在其類型,修飾(如 __fastcall 等)名稱之間適當空格並據情況對 齊。關鍵字原則上空一格,不論是否有括號,對語句行後加的註釋應用適當空格與語句隔開並儘可能對齊。
(3)對齊:原則上關係密切的行應對齊,對齊包括類型、修飾、名稱、參數等各部分對齊。
另每一行的長度不應超過屏幕太多,必要時適當換行。
(4)空行:程序文件結構各部分之間空兩行,若不必要也可只空一行,各函數實現之間一般空兩行。
(5)註釋:對註釋有以下三點要求:
A、必須是有意義;
B、必須正確的描述了程序;
C、必須是最新的。
註釋必不可少,但也不應過多,以下是四種必要的註釋:
標題、附加說明;
函數說明:對幾乎每個函數都應有適當的說明,通常加在函數實現之前,在沒有函數實現部分的情況下則加在函數原型前,其內容主要是函數的功能、目的、算法等說明,參數說明、返回 值說明等,必要時還要有一些如特別的軟硬件要求等說明;
在代碼不明晰或不可移植處應有少量說明;
及少量的其它註釋。

四)命名規範:
堅持採用匈牙利變量命名慣例,所有標識符一律用英文或英文縮寫,杜絕採用拼音,標識符中每個單詞首字母大寫,縮寫詞彙一般全部大寫,只在必要時加“_”間隔詞彙。


4、BUG修補
程序出現了BUG誰來修補呢,嘿嘿嘿……
最好的辦法是誰編寫誰修補,誰改壞誰修補。一個人改壞的代碼一人去修。兩個人一起改壞的代碼兩人一起修。


5、開發人員的測試
開發人員的測試是保證代碼能正常運行,在開發時候發現的錯誤往往比較容易修正。(另外一個好處就是沒有人來罵你。因爲只有你自己知道)。但是一旦軟件到了測試小組那裏出了問題,那麼就多了很多時間來修正BUG,如果到了客戶哪裏才發現的BUG,那麼時間就更長了,開發人員本身受到的壓力也是到了最大話了。客戶->公司->測試小組->開發人員。 這個完全是倒金字塔型的,承受能力差的一環很容易出事情的。
另外開發人員的測試除了保證代碼能正常運行以外,還有一個很重要的方面就是要保證上次能正常運行的代碼,這次還是能正常運行。如果做不到這點,那麼BUG就不斷的會出現,很多BUG也會反覆出現。於是軟件看上去就有修補不完的BUG了。如果出現這種情況,那麼開發人員有必要再教育。一般公司教育的方式有四種。第一種,扣工資,第二種,加班,反覆加班+精神攻擊。 第三種,開除。第四種,調動人員來幫助那個出了麻煩的傢伙。 但願看這個文章的人不要受到前面三種教育。


原文鏈接:http://blog.csdn.net/sunboy_2050/article/details/5674292
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章