1.前言應用軟件系統(tǒng)是事件驅動的軟件系統(tǒng),系統(tǒng)通過接口接受事件后,交由系統(tǒng)業(yè)務層處理,業(yè)務層處理完事件后將需要的信息存入數據庫,整個應用軟件系統(tǒng)分為三個子系統(tǒng):接口子系統(tǒng),業(yè)務子系統(tǒng),數據庫子系統(tǒng),業(yè)務子系統(tǒng)進一步分為三個子系統(tǒng):表示層,業(yè)務層,數據接入層。
其中業(yè)務層是整個系統(tǒng)的核心,表示層負責通過接口子系統(tǒng)接收系統(tǒng)事件交給業(yè)務層處理,數據接入層供業(yè)務層使用完成數據的持久化。每個層對編程人員的技術要求是不同的,表示層需要了解的技術根據接口子系統(tǒng)選擇的不同而不同:如windows界面,需要對MFC有比較深入的了解,web界面則要求對asp,asp.net,或jsp有比較深入的了解。
數據訪問層需要的技術則由數據庫子系統(tǒng)的選擇決定,另外還需要了解:ODBC,JDBC等。接口子系統(tǒng)的選擇:windows界面,java界面,web界面,命令行接口,CTI, API等 數據庫子系統(tǒng)的選擇:關系數據庫,普通文件等基于以上對應用軟件系統(tǒng)的理解,軟件開發(fā)流程的輸入是用戶的業(yè)務需求,輸出就是系統(tǒng)的業(yè)務層、表示層、數據接入層的代碼,以及接口和數據庫,以及各種文檔。
因此得到比較理想化的軟件開發(fā)流程圖,該圖使用uml中的活動圖描述。2.需求分析階段需求分析階段的常見問題是:需求分析不夠深入,對問題域沒有仔細研究,急于進入設計階段。
造成這種問題一方面是因為項目管目趕進度以及存在于管理人員頭腦中的根深蒂固的想法:任何時候不能讓任何人員閑著,另外很大的原因是很多人不知道如何進一步深入研究問題域。需求分析階段不僅要列出系統(tǒng)的use case,更重要的是要列出use case的輸入輸出和例外情況等,以及問題域中的對象之間的靜態(tài)關系和動態(tài)關系,如對象間的包含關系,繼承關系,調用關系等。
需求分析階段另外一個常見的問題是常常將需求分析等同于數據庫設計,需求分析階段定義的是系統(tǒng)作什么,而不是怎么做,需求分析的結果應該與具體的技術實現(xiàn)無關。數據庫設計是技術實現(xiàn)的細節(jié),應該盡可能的推遲技術細節(jié)的決策,不應該使技術細節(jié)束縛了我們對系統(tǒng)需求的理解。
需求分析階段應該從用戶的角度對系統(tǒng)建模,不應將大量的技術細節(jié)暴露給用戶,導致系統(tǒng)易用性差。需求分析階段可以進一步細分為業(yè)務需求分析階段和系統(tǒng)功能需求分析階段。
在很多研發(fā)性質的系統(tǒng)中,不注重業(yè)務需求分析,只有系統(tǒng)功能需求分析,導致開發(fā)人員知其然不知其所以然。系統(tǒng)功能規(guī)范文檔與業(yè)務需求文檔的重要區(qū)別有以下幾點:內容不同:系統(tǒng)需求分為功能需求和非功能需求,功能需求進一步分為業(yè)務功能需求和非業(yè)務功能需求。
系統(tǒng)需求規(guī)范文檔除了包括業(yè)務需求文檔中的業(yè)務功能需求,功能規(guī)范文檔需要增加以下內容:系統(tǒng)的非業(yè)務功能需求,由于業(yè)務需求由計算機系統(tǒng)實現(xiàn)而產生的功能需求,如系統(tǒng)需要系統(tǒng)管理員管理,系統(tǒng)管理員的角度產生一些非業(yè)務功能需求,另外需要描述系統(tǒng)非功能需求:數據量,性能要求,響應速度,可用性要求,可靠性要求,界面語言要求等等。 閱讀的對象不同:業(yè)務需求文檔是用來與業(yè)務人員交流,功能規(guī)范文檔是開發(fā)人員開發(fā)的依據 使用的語言不同:業(yè)務需求文檔使用自然語言書寫,而功能規(guī)范文檔使用比較嚴謹的語言,如:uml書寫 對編寫人的要求不一樣:業(yè)務需求編寫人員只需要對業(yè)務系統(tǒng)熟悉,系統(tǒng)規(guī)范由系統(tǒng)架構師完成 體現(xiàn)系統(tǒng)架構師價值的地方是編寫系統(tǒng)規(guī)范文檔和業(yè)務層設計, 系統(tǒng)規(guī)范文檔是下一步界面設計,業(yè)務層設計和數據庫設計的依據,表示層,業(yè)務層,數據訪問層之間是相互聯(lián)系的,它們之間的關系應該在系統(tǒng)規(guī)范文檔中找到。
3.架構設計階段架構設計階段的常見問題是將架構設計理解為技術架構設計,實際上架構設計分為技術架構設計和業(yè)務架構設計。技術架構一般由系統(tǒng)軟件商提供,可以在不同的應用軟件系統(tǒng)中使用,例如:微軟的MFC, SUN的J2EE等。
對于一個應用軟件系統(tǒng),更重要的是業(yè)務架構的設計,也就是將需求分析階段中得到的各種關系,根據系統(tǒng)的非功能需求將需求分析轉變?yōu)榇a。其實沒有業(yè)務架構的設計也是可以的,很多項目中直接將對象之間的各種關系以數據庫的方式實現(xiàn),這樣的系統(tǒng)不是面向對象的,因此面向對象設計的很多好處不能體現(xiàn)。
由于在架構設計階段中沒有進一步細分,通常會導致不能準確估計任務量,造成項目計劃變成擺設。4.詳細設計階段詳細設計階段一個重要的任務是系統(tǒng)持久化設計。
對應用系統(tǒng)而言,持久化設計只是管理存儲的機制,有多種技術手段可以選擇:可以是面向對象數據庫管理系統(tǒng),簡單的文件,或者是關系數據庫,也可以是使用ORM工具等。總之應該把它留到最后作為細節(jié)處理。
我們不應該將我們的系統(tǒng)和任何特定的技術綁定在一起。我們可以根據需求自由選擇需要的持久化技術,并且保留在將來需要時更改持久化技術的自由。
5.編碼階段編碼階段還處于小農經濟,自給自足,沒有分工合作。編碼階段以use case為粒度安排工作,這樣的安排方式要求每一個開發(fā)人員必須對表示層,業(yè)務層,數據接入層的所有技術都要有比較深入的了解,由于每個開發(fā)人員各自只對自己的use 。
軟件開發(fā)的內容是:需求、設計、編程和測試!
需求:不僅僅是用戶需求,應該是開發(fā)中遇到的所有的需求。比如,你首先要知道做這個項目是為了解決什么問題;測試案例中應該輸入什么數據……為了清楚地知道這些需求,你經常要和客戶、項目經理等交流。
設計:編碼前,肯定有個計劃告訴你要做什么,結構是怎樣等等。你一定要按照這個來做,否則可能會一團糟。
編程:如果在項目截止日,你的程序不能跑起來或達不到客戶的要求,你就拿不到錢。
測試:目的是讓你知道,什么時候算是完成了。如果你聰明,你就應該先寫測試,這樣可以及時知道你是否真地完成了。否則,你經常會不知道,到底有哪些功能是真正完成了,離預期目標還差多遠。
軟件開發(fā)中,客戶和開發(fā)人員都有自己的基本權利和義務。
客戶:
定義每個用戶需求的商業(yè)優(yōu)先級;
制訂總體計劃,包括用多少投資、經過多長時間、達到什么目的;
在項目開發(fā)過程中的每個工作周,都能讓投資獲得最大的收益;
通過重復運行你所指定的功能測試,準確地掌握項目進展情況;
一般來說軟件開發(fā)是根據用戶要求建造出軟件系統(tǒng)或者系統(tǒng)中的軟件部分的過程。
軟件開發(fā)是一項包括需求捕捉、需求分析、設計、實現(xiàn)和測試的系統(tǒng)工程。軟件一般是用某種程序設計語言來實現(xiàn)的。通常采用軟件開發(fā)工具可以進行開發(fā)。軟件分為系統(tǒng)軟件和應用軟件,并不只是包括可以在計算機上運行的程序,與這些程序相關的文件一般也被認為是軟件的一部分。
軟件設計思路和方法的一般過程,包括設計軟件的功能和實現(xiàn)的算法和方法、軟件的總體結構設計和模塊設計、編程和調試、程序聯(lián)調和測試以及編寫、提交程序。
常見的軟件開發(fā)語言:JAVA、C/C++/php/JSP/ASP/POWERBUILDER/DELPHI/.NET/C#/vb/等。
與應用最關鍵的需要用到數據庫,常見數據庫:MySQL/SQLSERVER/ORACLE等。
1、結構化方法 結構化開發(fā)方法是由E.Yourdon 和 L.L.Constantine 提出的,即所謂的SASD 方 法,也可稱為面向功能的軟件開發(fā)方法或面向數據流的軟件開發(fā)方法。Yourdon方法是80年代使用最廣泛的軟件開發(fā)方法。它首先用結構化分析(SA)對軟件進行需求分析,然后用結構化設計(SD)方法進行總體設計,最后是結構化編程(SP)。它給出了兩類典型的軟件結構(變換型和事務型)使軟件開發(fā)的成功率大大提高,這里精簡來說就是ADP,就是分析、設計、編程。
2、面向數據結構的軟件開發(fā)方法這種方法是把軟件基本的結構形式分為三排序就是順序、選擇和重復。三種數據結構可以進行組合,形成復雜的結構體系。這一方法從目標系統(tǒng)的輸入、輸出數據結構入手,導出程序框架結構,再補充其它細節(jié),就可得到完整的程序結構圖。這一方法對輸入、輸出數據結構明確的中小型系統(tǒng)特別有效,如商業(yè)應用中的文件表格處理。該方法也可與其它方法結合,用于模塊的詳細設計。
3、面向問題的分析法它的基本思想是考慮到輸入、輸出數據結構,指導系統(tǒng)的分解,在系統(tǒng)分析指導下逐步綜合。這一方法的具體步驟是:從輸入、輸出數據結構導出基本處理框;分析這些處理框之間的先后關系;按先后關系逐步綜合處理框,直到畫出整個系統(tǒng)的PAD圖。這一方法本質上是綜合的自底向上的方法,但在逐步綜合之前已進行了有目的的分解,這個目的就是充分考慮系統(tǒng)的輸入、輸出數據結構。PAM方法的另一個優(yōu)點是使用PAD圖。這是一種二維樹形結構圖,是到目前為止最好的詳細設計表示方法之一。當然由于在輸入、輸出數據結構與整個系統(tǒng)之間同樣存在著鴻溝,這一方法仍只適用于中小型問題。綜上所述,面向對象系統(tǒng)采用了自底向上的歸納、自頂向下的分解的方法,它通過對對象模型的建立,能夠真正建立基于用戶的需求,而且系統(tǒng)的可維護性大大改善。當前業(yè)界關于面向對象建模的標準是UML(Unified Modeling Language)。想必我們有很多人現(xiàn)在在采用也就是微軟的自帶的framework框架,它主要包含概念設計、邏輯設計、物理設計。概念設計是從客戶角度出發(fā)進行大模塊的設計,邏輯設計則是設計操縱數據流程,物理設計則是細節(jié)到每個接口、對象等等。
運用現(xiàn)代科學技術知識來設計并構造計算機程序及為開發(fā)、運行和維護這些程序所必需的相關文件資料。
IEEE在軟件工程術語匯編中的定義:軟件工程是:1.將系統(tǒng)化的、嚴格約束的、可量化的方法應用于軟件的開發(fā)、運行和維護,即將工程化應用于軟件;2.在1中所述方法的研究
Fritz Bauer在NATO會議上給出的定義:建立并使用完善的工程化原則,以較經濟的手段獲得能在實際機器上有效運行的可靠軟件的一系列方法。
目前比較認可的一種定義認為:軟件工程是研究和應用如何以系統(tǒng)性的、規(guī)范化的、可定量的過程化方法去開發(fā)和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來。
《計算機科學技術百科全書》中的定義:軟件工程是應用計算機科學、數學及管理科學等原理,開發(fā)軟件的工程。軟件工程借鑒傳統(tǒng)工程的原則、方法,以提高質量、降低成本。其中,計算機科學、數學用于構建模型與算法,工程科學用于制定規(guī)范、設計范型(paradigm)、評估成本及確定權衡,管理科學用于計劃、資源、質量、成本等管理。
軟件開發(fā)的內容是:需求、設計、編程和測試!需求:不僅僅是用戶需求,應該是開發(fā)中遇到的所有的需求。
比如,你首先要知道做這個項目是為了解決什么問題;測試案例中應該輸入什么數據……為了清楚地知道這些需求,你經常要和客戶、項目經理等交流。設計:編碼前,肯定有個計劃告訴你要做什么,結構是怎樣等等。
你一定要按照這個來做,否則可能會一團糟。編程:如果在項目截止日,你的程序不能跑起來或達不到客戶的要求,你就拿不到錢。
測試:目的是讓你知道,什么時候算是完成了。如果你聰明,你就應該先寫測試,這樣可以及時知道你是否真地完成了。
否則,你經常會不知道,到底有哪些功能是真正完成了,離預期目標還差多遠。軟件開發(fā)中,客戶和開發(fā)人員都有自己的基本權利和義務。
客戶:定義每個用戶需求的商業(yè)優(yōu)先級;制訂總體計劃,包括用多少投資、經過多長時間、達到什么目的;在項目開發(fā)過程中的每個工作周,都能讓投資獲得最大的收益;通過重復運行你所指定的功能測試,準確地掌握項目進展情況;。

聲明:本網站尊重并保護知識產權,根據《信息網絡傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個月內通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:3.111秒