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