軟件工程方法為目標(biāo)計(jì)算機(jī)的軟件開發(fā)提供了一種有組織和系統(tǒng)的方法。有許多方法可供選擇,對(duì)于軟件工程師來說,為手頭的軟件開發(fā)任務(wù)選擇一種或幾種合適的方法是很重要的;這種選擇會(huì)對(duì)軟件項(xiàng)目的成功產(chǎn)生巨大的影響。使用這些軟件工程方法,加上具有適當(dāng)技能集的人員和工具,使軟件工程師能夠可視化軟件的細(xì)節(jié),并最終將表示轉(zhuǎn)換為代碼和數(shù)據(jù)的工作集。
下面將討論選定的軟件工程方法。主題區(qū)域被組織成啟發(fā)式方法、正式方法、原型方法和敏捷方法的討論。4.1啟發(fā)式方法
啟發(fā)式方法是那些基于經(jīng)驗(yàn)的軟件工程方法,它們已經(jīng)在軟件行業(yè)中得到了相當(dāng)廣泛的實(shí)踐。本主題包含三個(gè)廣泛的討論類別:結(jié)構(gòu)化分析和設(shè)計(jì)方法、數(shù)據(jù)建模方法和面向?qū)ο蟮姆治龊驮O(shè)計(jì)方法。
結(jié)構(gòu)化分析和設(shè)計(jì)方法:軟件模型主要從功能或行為的角度開發(fā),從軟件的高級(jí)視圖(包括數(shù)據(jù)和控制要素)開始,然后通過越來越詳細(xì)的設(shè)計(jì)逐步分解或細(xì)化模型組件。詳細(xì)的設(shè)計(jì)最終集中于必須編碼(手工、自動(dòng)生成或兩者同時(shí)生成)、構(gòu)建、測試和驗(yàn)證的軟件的非常具體的細(xì)節(jié)或規(guī)范。
數(shù)據(jù)建模方法:根據(jù)所使用的數(shù)據(jù)或信息的觀點(diǎn)構(gòu)建數(shù)據(jù)模型。數(shù)據(jù)表和關(guān)系定義了數(shù)據(jù)模型。這種數(shù)據(jù)建模方法主要用于定義和分析支持?jǐn)?shù)據(jù)庫設(shè)計(jì)或通常在業(yè)務(wù)軟件中發(fā)現(xiàn)的數(shù)據(jù)存儲(chǔ)庫的數(shù)據(jù)需求,在業(yè)務(wù)軟件中,數(shù)據(jù)作為業(yè)務(wù)系統(tǒng)資源或資產(chǎn)進(jìn)行主動(dòng)管理。
面向?qū)ο蟮姆治龊驮O(shè)計(jì)方法:面向?qū)ο竽P捅硎緸榉庋b數(shù)據(jù)和關(guān)系的對(duì)象集合,并通過方法與其他對(duì)象交互。對(duì)象可以是真實(shí)世界的項(xiàng)目,也可以是虛擬的項(xiàng)目。軟件模型是使用圖來構(gòu)成軟件的選定視圖來構(gòu)建的。軟件模型的逐步細(xì)化導(dǎo)致了詳細(xì)的設(shè)計(jì)。然后,詳細(xì)的設(shè)計(jì)要么通過連續(xù)的迭代進(jìn)行演化,要么(使用某種機(jī)制)轉(zhuǎn)換為模型的實(shí)現(xiàn)視圖,其中表示最終軟件產(chǎn)品發(fā)布和部署的代碼和打包方法。
4.2正式的方法
形式方法是軟件工程方法,通過應(yīng)用嚴(yán)格的基于數(shù)學(xué)的符號(hào)和語言來指定、開發(fā)和驗(yàn)證軟件。通過使用規(guī)范語言,可以以系統(tǒng)的、自動(dòng)化的或半自動(dòng)化的方式檢查軟件模型的一致性(換句話說,缺少模糊性)、完整性和正確性。這個(gè)主題與軟件需求知識(shí)領(lǐng)域中的形式化分析部分有關(guān)。
本節(jié)討論規(guī)范語言、程序細(xì)化和派生、形式驗(yàn)證和邏輯推理。
規(guī)范語言:規(guī)范語言為形式方法提供數(shù)學(xué)基礎(chǔ);規(guī)范語言是在軟件規(guī)范、需求分析和/或設(shè)計(jì)階段用于描述特定輸入/輸出行為的正式的、高級(jí)的計(jì)算機(jī)語言(換句話說,不是經(jīng)典的第三代語言(3GL)編程語言)。規(guī)范語言不是直接可執(zhí)行的語言;它們通常由表示法和語法、使用表示法的語義和一組允許的對(duì)象關(guān)系組成。
程序優(yōu)化和派生:程序優(yōu)化是使用一系列轉(zhuǎn)換創(chuàng)建較低層面(或更詳細(xì))規(guī)范的過程。軟件工程師是通過連續(xù)的轉(zhuǎn)換來獲得程序的可執(zhí)行表示的。可以細(xì)化規(guī)范,添加細(xì)節(jié),直到模型可以用3GL編程語言或所選規(guī)范語言的可執(zhí)行部分來表述。通過定義具有精確語義屬性的規(guī)范,可以實(shí)現(xiàn)規(guī)范的細(xì)化;規(guī)范不僅必須規(guī)定實(shí)體之間的關(guān)系,還必須規(guī)定這些關(guān)系和操作的確切運(yùn)行時(shí)含義。
形式驗(yàn)證:模型檢驗(yàn)是一種形式驗(yàn)證方法;它通常涉及執(zhí)行狀態(tài)空間探索或可達(dá)性分析,以證明所表示的軟件設(shè)計(jì)具有或保留了某些感興趣的模型屬性。模型檢查的一個(gè)例子是在所有可能的事件或消息到達(dá)交叉情況下驗(yàn)證正確的程序行為的分析。使用正式核證需要嚴(yán)格指定軟件模型及其運(yùn)作環(huán)境;這個(gè)模型通常采用有限狀態(tài)機(jī)或其他正式定義的自動(dòng)機(jī)的形式。
邏輯推理:邏輯推理是一種設(shè)計(jì)軟件的方法,它包括在設(shè)計(jì)的每個(gè)重要部分周圍指定前置條件和后置條件,并使用數(shù)學(xué)邏輯來證明這些前置條件和后置條件必須在所有輸入下都存在。這為軟件工程師在不執(zhí)行軟件的情況下預(yù)測軟件行為提供了一種方法。一些集成開發(fā)環(huán)境(ide)包括在設(shè)計(jì)或代碼的同時(shí)表示這些證明的方法。
4.3原型化方法
軟件原型是一個(gè)活動(dòng),通常創(chuàng)建不完整或最低限度功能版本的軟件應(yīng)用程序,通常為特定的新特性,征求反饋軟件需求或用戶接口,進(jìn)一步探索軟件需求,軟件設(shè)計(jì),或?qū)崿F(xiàn)選項(xiàng),和/或獲得其他一些有用的洞察軟件。軟件工程師首先選擇一種原型方法來理解軟件中最不被理解的方面或組件;這種方法與其他軟件工程方法形成對(duì)比,后者通常首先從最容易理解的部分開始開發(fā)。通常,如果不進(jìn)行大量的開發(fā)重做或重構(gòu),原型產(chǎn)品不會(huì)成為最終的軟件產(chǎn)品。
本節(jié)簡要討論原型風(fēng)格、目標(biāo)和評(píng)估技術(shù)。原型風(fēng)格:這解決了開發(fā)原型的各種方法。原型可以被開發(fā)為一次性代碼或紙制品,作為工作設(shè)計(jì)的演變,或作為可執(zhí)行的規(guī)范。每種風(fēng)格通常使用不同的原型生命周期過程。選擇的風(fēng)格基于項(xiàng)目需要的結(jié)果類型、需要的結(jié)果的質(zhì)量和結(jié)果的緊迫性。
原型目標(biāo):原型活動(dòng)的目標(biāo)是原型工作所服務(wù)的特定產(chǎn)品。原型化目標(biāo)的例子包括需求規(guī)范、架構(gòu)設(shè)計(jì)要素或組件、算法或人機(jī)用戶接口。
原型評(píng)估技術(shù):一個(gè)原型可以由軟件工程師或其他項(xiàng)目利益攸關(guān)方以多種方式使用或評(píng)估,主要是由最初導(dǎo)致原型開發(fā)的潛在原因驅(qū)動(dòng)的。原型可以根據(jù)實(shí)際實(shí)現(xiàn)的軟件或一組目標(biāo)需求(例如,一個(gè)需求原型)來評(píng)估或測試;原型還可以作為未來軟件開發(fā)工作的模型(例如,在用戶接口規(guī)范中)。
4.4敏捷方法
敏捷方法誕生于20世紀(jì)90年代,當(dāng)時(shí)人們需要減少大型軟件開發(fā)項(xiàng)目中使用的重量級(jí)的、基于計(jì)劃的方法所帶來的巨大開銷。敏捷方法被認(rèn)為是輕量級(jí)的方法,因?yàn)樗鼈兊奶攸c(diǎn)是短的、迭代的開發(fā)周期、自組織的團(tuán)隊(duì)、更簡單的設(shè)計(jì)、代碼重構(gòu)、測試驅(qū)動(dòng)開發(fā)、頻繁的客戶參與,以及強(qiáng)調(diào)在每個(gè)開發(fā)周期中創(chuàng)建可演示的工作產(chǎn)品。
文獻(xiàn)中有許多敏捷方法;這里簡要討論一些比較流行的方法,包括快速應(yīng)用程序開發(fā)(RAD)、極限編程(XP)、SCRum和功能驅(qū)動(dòng)開發(fā)(FDD)。
RAD:快速軟件開發(fā)方法主要用于數(shù)據(jù)密集型的業(yè)務(wù)系統(tǒng)應(yīng)用程序開發(fā)。RAD方法通過軟件工程師使用的專用數(shù)據(jù)庫開發(fā)工具來實(shí)現(xiàn),這些工具用于快速開發(fā)、測試和部署新的或修改過的業(yè)務(wù)應(yīng)用程序。
XP:這種方法使用需求的事例或場景,首先開發(fā)測試,讓客戶直接參與到團(tuán)隊(duì)中(通常定義驗(yàn)收測試),使用成對(duì)編程,并提供持續(xù)的代碼重構(gòu)和集成。故事被分解為任務(wù)、劃分優(yōu)先級(jí)、評(píng)估、開發(fā)和測試。軟件的每一個(gè)增量都通過自動(dòng)化和手工測試進(jìn)行測試;一個(gè)增量可能會(huì)被頻繁地釋放,比如每隔幾周左右。
SCRum:這種敏捷方法比其他方法對(duì)項(xiàng)目管理更友好。SCRum管理員管理項(xiàng)目增量中的活動(dòng);每個(gè)增量稱為沖刺,持續(xù)時(shí)間不超過30天。產(chǎn)品待辦事項(xiàng)列表(PBI)是根據(jù)任務(wù)來確定、定義、排序和評(píng)估的。在每個(gè)增量中測試并發(fā)布軟件的工作版本。每日SCRum會(huì)議確保工作按照計(jì)劃進(jìn)行。
FDD:這是一種模型驅(qū)動(dòng)的、短的、迭代的軟件開發(fā)方法,使用一個(gè)五階段過程:
(1) 開發(fā)一個(gè)產(chǎn)品模型來擴(kuò)大領(lǐng)域的范圍,
(2) 創(chuàng)建需求或功能列表,
(3) 構(gòu)建功能開發(fā)計(jì)劃,
(4)開發(fā)針對(duì)特定于迭代的功能的設(shè)計(jì),以及
(5)代碼、測試、功能集成。
FDD類似于增量式軟件開發(fā)方法;它也類似于XP,除了代碼所有權(quán)被分配給個(gè)人而不是團(tuán)隊(duì)。FDD強(qiáng)調(diào)軟件的整體架構(gòu)方法,它促進(jìn)在第一次就正確地構(gòu)建特性,而不是強(qiáng)調(diào)持續(xù)的重構(gòu)。
在文獻(xiàn)和實(shí)踐中還有許多敏捷方法的變體。請(qǐng)注意,重量級(jí)的、基于計(jì)劃的軟件工程方法和敏捷方法一樣都有一席之地。有一些新方法是從敏捷方法和基于計(jì)劃的方法的組合中產(chǎn)生的,從業(yè)者正在定義新的方法,這些方法主要基于當(dāng)前的組織業(yè)務(wù)需求來平衡重量級(jí)和輕量級(jí)方法所需的特性。這些業(yè)務(wù)需求,通常由一些項(xiàng)目利益攸關(guān)方所代表,應(yīng)該并且確實(shí)推動(dòng)選擇使用一種軟件工程方法而不是另一種,或者從軟件工程方法組合的最佳特性中構(gòu)建一種新方法。
責(zé)任編輯:haq
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7295瀏覽量
87537 -
軟件
+關(guān)注
關(guān)注
69文章
4621瀏覽量
87000
原文標(biāo)題:軟件工程方法
文章出處:【微信號(hào):gh_ad43aef0e0b3,微信公眾號(hào):樹根互聯(lián)VS物聯(lián)網(wǎng)VS數(shù)據(jù)應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論