第8章?軟件工程
8.1?軟件工程的矩陣模型
- 橫軸X(時(shí)間):是軟件的生命周期:需求分析=》架構(gòu)設(shè)計(jì)=》編程實(shí)現(xiàn)=》測(cè)試=》版本發(fā)布=》部署運(yùn)行
- 縱軸Y1維度/視角:軟件開(kāi)發(fā)活動(dòng),不同什么周期階段,有不同的開(kāi)發(fā)活動(dòng),包括需求規(guī)格、設(shè)計(jì)文檔、編碼、測(cè)試規(guī)范、測(cè)試用例等活動(dòng)。
- 縱軸Y2維度/視角:業(yè)務(wù)業(yè)務(wù)領(lǐng)域技能活動(dòng),不同的業(yè)務(wù)領(lǐng)域,所需要的技能不同,但在不同的開(kāi)發(fā)階段,對(duì)業(yè)務(wù)領(lǐng)域知識(shí)的要求不同,越是靠近前端,如需求分析階段,對(duì)業(yè)務(wù)領(lǐng)域的技能要求越多,越是后端,如編程實(shí)現(xiàn),對(duì)業(yè)務(wù)領(lǐng)域的技能要求越少,對(duì)計(jì)算機(jī)的技能要求越高。
- 縱軸Y3維度/視角:項(xiàng)目管理活動(dòng),質(zhì)量、進(jìn)度、成本進(jìn)行評(píng)估、管理和控制,包括人員組織、計(jì)劃跟蹤與控制、成本估算、質(zhì)量保證和配置管理。
- 縱軸Z1維度/視角:輔助開(kāi)發(fā)工具,不同的活動(dòng),輔助不同的軟件工具,以提升效率,如Gitee, Python等。
- 縱軸Z1維度/視角:輔助業(yè)務(wù)工具,不同的活動(dòng),輔助不同的軟件工具,以提升效率。如L1的仿真工具。
- 縱軸Z3維度/視角:輔助管理工具,不同的活動(dòng),輔助不同的軟件工具,以提升效率。
- 縱軸T維度/視角:方法和步驟,不同的活動(dòng),需要不同的方法與步驟。
8 . 2 軟件開(kāi)發(fā)方法
????????軟件幵發(fā)方法是指軟件開(kāi)發(fā)過(guò)程所遵循的辦法和步驟,從不同的角度可以對(duì)軟件開(kāi)發(fā)方法進(jìn)行不同的分類。
- 從開(kāi)發(fā)風(fēng)范上看,可分為自頂向下的開(kāi)發(fā)方法與自底向上的開(kāi)發(fā)方法, 在實(shí)際軟件開(kāi)發(fā)中,大都是兩種方法的結(jié)合,只不過(guò)是應(yīng)用于開(kāi)發(fā)的不同階段和以何者為主而已。
- 從性質(zhì)上看,可分為形式化方法與非形式化方法。形式化方法是一種具有堅(jiān)實(shí)數(shù)學(xué)基礎(chǔ)的方法,從而允許對(duì)系統(tǒng)和開(kāi)發(fā)過(guò)程作嚴(yán)格處理和論證,適用于那些系統(tǒng)安全級(jí)別要求極高的軟件的開(kāi)發(fā);非形式化方法則不把嚴(yán)格性作為其主要著眼點(diǎn),通常以各種開(kāi)發(fā)模型的形式得以體現(xiàn)。
- 從適應(yīng)范圍來(lái)看,可分為整體性方法與局部性方法。適用于軟件開(kāi)發(fā)全過(guò)程的方法稱為整體性方法,例如,自頂向下方法、自底向上方法和各種軟件自動(dòng)化方法等均為整體性方法;適用于開(kāi)發(fā)過(guò)程某個(gè)具體階段的軟件方法稱為局部性方法,例如,需求分析階段的各種需求分析方法、設(shè)計(jì)階段的各種設(shè)計(jì)方法等。
8.2.1 形式化方法、數(shù)學(xué)公式法、定量法
提高軟件可靠性的一種重要技術(shù)是使用形式化方法。形式化方法是建立在嚴(yán)格數(shù)學(xué)基礎(chǔ)上、具有精確數(shù)學(xué)語(yǔ)義的開(kāi)發(fā)方法。廣義的形式化方法是指軟件開(kāi)發(fā)過(guò)程中分析、設(shè)計(jì)和實(shí)現(xiàn)的系統(tǒng)工程方法,狹義的形式化方法是指軟件規(guī)格和驗(yàn)證的方法。
1. 形式化方法概述
近年來(lái),形式化方法己不再只是一種研究所里的學(xué)術(shù)研究工作,而是己經(jīng)開(kāi)始被工業(yè)界接受并應(yīng)用于開(kāi)發(fā)實(shí)際的系統(tǒng)。例如,在需求分析中,形式化方法的思想是利用形式化規(guī)格語(yǔ)言,嚴(yán)格定義用戶需求,并采用數(shù)學(xué)推演的方法證明需求定義的性質(zhì),對(duì)于復(fù)雜的應(yīng)用問(wèn)題,盡管無(wú)法驗(yàn)證整個(gè)需求定義的完整性,仴仍有可能為避免某些要點(diǎn)的疏漏而建立數(shù)學(xué)斷言,然后予以形式證明或反駁。形式化規(guī)格說(shuō)明語(yǔ)言包括嚴(yán)格的語(yǔ)法定義和語(yǔ)義定義,以及一系列的數(shù)學(xué)推演規(guī)則。這些規(guī)則不僅說(shuō)明了某些數(shù)學(xué)性質(zhì)在軟件規(guī)格說(shuō)明中是否成立,也說(shuō)明了軟件實(shí)現(xiàn)與軟件規(guī)格說(shuō)明之間的滿足關(guān)系。
形式化方法的主要優(yōu)越性在于它能夠數(shù)學(xué)地表述和研究應(yīng)用問(wèn)題及其軟件實(shí)現(xiàn)。但是,它要求開(kāi)發(fā)人員具備良好的數(shù)學(xué)基礎(chǔ)。用形式化語(yǔ)言書(shū)寫(xiě)的大型應(yīng)用問(wèn)題的軟件規(guī)格說(shuō)明往往過(guò)于細(xì)節(jié)化,并且難于為用戶和軟件設(shè)計(jì)人員所理解。由于這些缺陷,形式化方法在目前的軟件開(kāi)發(fā)實(shí)踐中并未得到普遍應(yīng)用。但是,近年來(lái),形式化方法在以下兩個(gè)方面的發(fā)展大大改善了其實(shí)用性:
(1) 形式化方法與圖形語(yǔ)言機(jī)制相結(jié)合。為圖形語(yǔ)言機(jī)制賦予形式化的語(yǔ)法和語(yǔ)義,從而兼具了圖形表示的直觀、簡(jiǎn)潔,以及形式化方法的嚴(yán)謹(jǐn)、精確等優(yōu)點(diǎn)。
(2) 用 C A S E (Computer Aided Software Engineering ,計(jì)算機(jī)輔助軟件工程)工具支持形式化軟件開(kāi)發(fā)。 C A S E 工具不僅可以簡(jiǎn)化描述工作,時(shí)且還可以利用自動(dòng)證明技術(shù),幫助開(kāi)發(fā)人員驗(yàn)證軟件的數(shù)學(xué)性質(zhì)。實(shí)踐證明,上述技術(shù)途徑對(duì)于克服形式化方法的主要缺陷是行之有效的,因此,它們將在形式化方法的未來(lái)發(fā)展中發(fā)揮電要作用。
2.凈室軟件工程
凈室軟件工程 (Cleanroom Software Engineering , C S E ) 是軟件幵發(fā)的一種形式化方法,可以開(kāi)發(fā)較高質(zhì)量的軟件。它使用盒結(jié)構(gòu)歸約進(jìn)行分析和建模,并且將正確性驗(yàn)證作為發(fā)現(xiàn)和排除錯(cuò)誤的主要機(jī)制,使用統(tǒng)計(jì)測(cè)試來(lái)獲取認(rèn)證軟件可靠性所需要的信息。
C S E 強(qiáng)調(diào)在規(guī)約和設(shè)計(jì)上的嚴(yán)格性,以及使用基于數(shù)學(xué)的正確性證明來(lái)對(duì)設(shè)計(jì)模型的每個(gè)元素進(jìn)行形式化驗(yàn)證。作為對(duì)形式化方法中的擴(kuò)展, C S E 還強(qiáng)調(diào)統(tǒng)計(jì)質(zhì)量控制技術(shù),包括基于客戶對(duì)軟件的預(yù)期使用的測(cè)試。
C S E 的理論基礎(chǔ)是函數(shù)理論和抽樣理論,所采用的技術(shù)手段主要有以下4 個(gè)方面:
(1) 統(tǒng)計(jì)過(guò)程控制下的增量式幵發(fā)。
(2) 基于函數(shù)的規(guī)范、設(shè)計(jì)。 C S E 按照函數(shù)理論定義了三種抽象層次,分別是行為
視圖、有限狀態(tài)機(jī)視圖和過(guò)程視圖。規(guī)范從一個(gè)外部行為視閣(稱為黑盒)幵始,然后
被轉(zhuǎn)化為一個(gè)狀態(tài)機(jī)視圖(稱為狀態(tài)盒),最后由一個(gè)過(guò)程視圖(明盒)來(lái)實(shí)現(xiàn)。盒結(jié)構(gòu)
是基于對(duì)象的,并支持軟件工程的關(guān)鍵原則,即信息隱藏、接 U 與實(shí)現(xiàn)分離。
(3) 正確性驗(yàn)證。正確性驗(yàn)證是 C S E 的核心,正是由于采用了這一技術(shù),軟件質(zhì)蜇
才冇了極大的提高。
(4) 統(tǒng)計(jì)測(cè)試和軟件認(rèn)證。 C S E 在測(cè)試方面采用統(tǒng)計(jì)學(xué)的基本原理,即當(dāng)總體太大
時(shí)必須采取抽樣的方法。首先,確定?個(gè)使用模型來(lái)代表系統(tǒng)所有可能使用的(一般是
無(wú)限的)總體;然后,由使用模型產(chǎn)生測(cè)試用例。因?yàn)闇y(cè)試用例是總體的一個(gè)隨機(jī)樣本,
所以可得到系統(tǒng)預(yù)期操作性能的有效的統(tǒng)計(jì)推導(dǎo)。
C S E 的主要缺點(diǎn)體現(xiàn)在以下三個(gè)方面:
(1) 對(duì)幵發(fā)人員的要求比較高。 C S E 要求采用增量式開(kāi)發(fā)、盒結(jié)構(gòu)和統(tǒng)計(jì)測(cè)試方法,
幵發(fā)人員必須經(jīng)過(guò)強(qiáng)化訓(xùn)練才能掌握。
( 2 ) 正確性驗(yàn)證的步驟比較困難,且比較耗時(shí)。
(3) 開(kāi)發(fā)小組不進(jìn)行傳統(tǒng)的模塊測(cè)試,這是不現(xiàn)實(shí)的。程序員可能對(duì)編程語(yǔ)言和幵發(fā)環(huán)境還不熟悉,而且編譯器或操作系統(tǒng)的缺陷也可能導(dǎo)致未預(yù)期的錯(cuò)誤。
8 . 2 . 2 逆 向 工 程
逆向工程( ReverseEngineering ) 術(shù)語(yǔ)源于硬件制造業(yè),相互競(jìng)爭(zhēng)的公司為了了解對(duì)方設(shè)計(jì)和制造工藝的機(jī)密,在得不到設(shè)計(jì)和制造說(shuō)明書(shū)的情況下,通過(guò)拆卸實(shí)物獲得信息。
軟件的逆向工程也基本類似,不過(guò),通 常 “解剖”的不僅是競(jìng)爭(zhēng)對(duì)手的程序,而且還包括本公司多年前的產(chǎn)品。軟件的逆向工程是分析程序,力圖在比源代碼更高抽象層次上建立程序的表示過(guò)程,逆向工程是設(shè)計(jì)的恢復(fù)過(guò)程。
1 . 相 關(guān) 概 念
與逆向工程相關(guān)的概念有重構(gòu)、設(shè)計(jì)恢復(fù)、再工程和正向工程。
(1) 重 構(gòu) ( restructuring )。重構(gòu)是指在同一抽象級(jí)別上轉(zhuǎn)換系統(tǒng)描述形式。
(2) 設(shè)計(jì)恢復(fù) (design recovery )。設(shè)計(jì)恢復(fù)是指借助工具從已有程序中抽象出有關(guān)
數(shù)據(jù)設(shè)計(jì)、總體結(jié)構(gòu)設(shè)計(jì)和過(guò)程設(shè)計(jì)等方面的信息。
(3) 再工程( re - engineering )。再工程是指在逆向工程所獲得信息的基礎(chǔ)上,修改或
重構(gòu)已有的系統(tǒng),產(chǎn)生系統(tǒng)的一個(gè)新版本。再工程是對(duì)現(xiàn)有系統(tǒng)的重新開(kāi)發(fā)過(guò)程,包括
逆向工程、新需求的考慮過(guò)程和正向工程三個(gè)步驟。它不僅能從已存在的程序中重新獲
得設(shè)計(jì)信息,而且還能使用這些信息來(lái)重構(gòu)現(xiàn)有系統(tǒng),?以改進(jìn)它的綜合質(zhì)量。在利用再
工程重構(gòu)現(xiàn)有系統(tǒng)的同時(shí),一般會(huì)增加新的需求,包括增加新的功能和改善系統(tǒng)的性能。
(4) 正向工程 (Forward Engineering )。正向工程是指不僅從現(xiàn)有系統(tǒng)中恢復(fù)設(shè)計(jì)信
息,而且使用該信息去改變或重構(gòu)現(xiàn)有系統(tǒng),以改善其整體質(zhì)量。
2 . 完 備 性
????????一般認(rèn)為,凡是在軟件生命周期內(nèi)將軟件某種形式的描述轉(zhuǎn)換成更為抽象形式的活動(dòng)都可稱為逆向 工程。
????????逆向工程的完備性可以用在某一個(gè)抽象層次上提供信息的詳細(xì)程度來(lái)描述。逆向工程過(guò)程應(yīng)該能夠導(dǎo)出過(guò)程的設(shè)計(jì)模型(實(shí)現(xiàn)級(jí),一種底層的抽象)、程序和數(shù)據(jù)結(jié)構(gòu)信息(結(jié)構(gòu)級(jí),稍高層次的抽象)、對(duì)象模型、數(shù)據(jù)和控制流模型(功能級(jí),相對(duì)高層的抽象)和 U M L 狀態(tài)圖和部署圖(領(lǐng)域級(jí),高層抽象)。
????????隨著抽象層次增離,完備性就會(huì)降低。抽象層次越高,它與代碼的距離就越遠(yuǎn),通過(guò)逆向工程恢復(fù)的難度就越大,而自動(dòng)工具支持的可能性相對(duì)變小,要求人參與判斷和推理的工作增多。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-446316.html
????????逆向工程不僅應(yīng)用于軟件開(kāi)發(fā),也應(yīng)用于軟件維護(hù)。對(duì)于一項(xiàng)具體的維護(hù)任務(wù),一般不必導(dǎo)出所有抽象級(jí)別上的信息,例如,如果只是希望完成代碼重構(gòu)任務(wù),則只需獲得實(shí)現(xiàn)級(jí)信息即可。當(dāng)然,若能進(jìn)行深入分析,產(chǎn)生的代碼質(zhì)量會(huì)更好些。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-446316.html
到了這里,關(guān)于[架構(gòu)之路-152]-《軟考-系統(tǒng)分析師》- 8-軟件工程-2-軟件工程的N維矩陣模型與軟件開(kāi)發(fā)方法(形式化方法、逆 向 工 程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!