![軟件工程課件_第1頁](http://file4.renrendoc.com/view10/M02/29/35/wKhkGWXkMMKAPGI-AABxCGgLK70918.jpg)
![軟件工程課件_第2頁](http://file4.renrendoc.com/view10/M02/29/35/wKhkGWXkMMKAPGI-AABxCGgLK709182.jpg)
![軟件工程課件_第3頁](http://file4.renrendoc.com/view10/M02/29/35/wKhkGWXkMMKAPGI-AABxCGgLK709183.jpg)
![軟件工程課件_第4頁](http://file4.renrendoc.com/view10/M02/29/35/wKhkGWXkMMKAPGI-AABxCGgLK709184.jpg)
![軟件工程課件_第5頁](http://file4.renrendoc.com/view10/M02/29/35/wKhkGWXkMMKAPGI-AABxCGgLK709185.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
軟件工程
SoftwareEngineering
軟件是與計(jì)算機(jī)系統(tǒng)操作有關(guān)的程序、規(guī)程、規(guī)則及與之有關(guān)的文檔及數(shù)據(jù)。軟件的分類系統(tǒng)軟件、實(shí)時(shí)軟件、嵌入式軟件、科學(xué)和工程計(jì)算軟件、事務(wù)處理軟件、人工智能軟件、個(gè)人計(jì)算機(jī)軟件、CASE工具軟件第一章軟件工程學(xué)概述軟件發(fā)展四個(gè)階段:
50年代初--60年代初初期階段個(gè)人的技藝
60年中期--70年代末多用戶、多道程序和人機(jī)交互,軟件維護(hù)問題的矛盾加劇70年中期--80年代末分布式系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)等80年代末面向?qū)ο蠹夹g(shù)、專家系統(tǒng)、人工智能軟件、并行軟件、Internet環(huán)境下軟件、布式計(jì)算環(huán)境等
§1.軟件危機(jī)(SoftwareCrisis)軟件應(yīng)用范圍擴(kuò)大—需求增加—軟件規(guī)模增長—復(fù)雜度增加—費(fèi)用巨大—可靠性低、質(zhì)量差—軟件危機(jī)§1.軟件危機(jī)例:美國IBM公司在1963年至1966年開發(fā)的IBM360機(jī)的操作系統(tǒng)。這一項(xiàng)目花了5000人一年的工作量,最多時(shí)有1000人投入開發(fā)工作,寫出了近100萬行源程序。......據(jù)統(tǒng)計(jì),這個(gè)操作系統(tǒng)每次發(fā)行的新版本都是從前一版本中找出1000個(gè)程序錯(cuò)誤而修正的結(jié)果。......一、軟件危機(jī)簡介§1.軟件危機(jī)
這個(gè)項(xiàng)目的負(fù)責(zé)人F.D.Brooks事后總結(jié)了他在組織開發(fā)過程中的沉痛教訓(xùn)時(shí)說:“......正像一只逃亡的野獸落到泥潭中做垂死的掙扎,越是掙扎,陷得越深,最后無法逃脫滅頂?shù)臑?zāi)難。......程序設(shè)計(jì)工作正像這樣一個(gè)泥潭,......一批批程序員被迫在泥潭中拼命掙扎,......誰也沒有料到問題竟會(huì)陷入這樣的困境......”。IBM360操作系統(tǒng)的歷史教訓(xùn)成為軟件開發(fā)項(xiàng)目的典型事例為人們所記取。SoftwareCrisis!(1)對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確。(2)用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。(3)軟件產(chǎn)品的質(zhì)量往往靠不住。(4)軟件常常是不可維護(hù)的。(5)軟件通常沒有適當(dāng)?shù)奈臋n資料(6)軟件成本占計(jì)算機(jī)系統(tǒng)總成本中所的比例逐年上升。(7)軟件開發(fā)生產(chǎn)率提高的速度,遠(yuǎn)遠(yuǎn)跟不上計(jì)算機(jī)應(yīng)用迅速普及深入的趨勢?!?.軟件危機(jī)軟件危機(jī)主要有以下一些典型表現(xiàn)§1.軟件危機(jī)⑴項(xiàng)目沒有被很好地理解;計(jì)劃不周,最終導(dǎo)致進(jìn)度拖延。問題出在哪里?二、軟件危機(jī)的原因§1.軟件危機(jī)⑵沒有充分的文檔資料(documentation)人與人的交流比寫程序困難得多。Managers——管理和評(píng)價(jià)工程的進(jìn)展Programmers——交流信息Maintainers——至關(guān)重要文檔的作用
(1)
作為開發(fā)人員在一定階段內(nèi)的工作成果和結(jié)束標(biāo)志(2)向管理人員提供軟件開發(fā)過程中的進(jìn)展和情況,把軟件開發(fā)過程中的一些“不可見的”事物轉(zhuǎn)換成“可見的”文字資料。以便管理人員在各個(gè)階段檢查開發(fā)計(jì)劃的實(shí)施進(jìn)展,使之能夠判斷原定目標(biāo)是否達(dá)到,還將繼續(xù)耗用資源的種類和數(shù)量。(3)
記錄開發(fā)過程中的技術(shù)信息,以便協(xié)調(diào)以后的軟件開發(fā),使用和修改。(4)
提供對(duì)軟件的有關(guān)運(yùn)行、維護(hù)和培訓(xùn)的信息,便于協(xié)調(diào)管理人員、開發(fā)人員、操作人員和用戶之間相互了解彼此的工作。(5)向潛在用戶報(bào)道軟件的功能和性能,使他們能判定軟件能否服務(wù)于自己的需要。
補(bǔ)充:§1.軟件危機(jī)⑶軟件可靠性(reliability)缺少度量的標(biāo)準(zhǔn),質(zhì)量無法保證。如何保證軟件產(chǎn)品的質(zhì)量,是非常復(fù)雜困難的問題。
引入同一變動(dòng)付出的代價(jià)隨時(shí)間變化的趨勢早中晚高中低改正同一個(gè)問題需要付出的代價(jià)概要設(shè)計(jì)詳細(xì)設(shè)計(jì)編碼系統(tǒng)測試需求分析§1.軟件危機(jī)(4)修改軟件所付出的代價(jià)會(huì)變大§1.軟件危機(jī)(5)軟件難以維護(hù)(maintainability)
不易升級(jí)(evolvability)程序?qū)懲炅瞬⒉皇枪ぷ骶屯瓿闪藨?yīng)該徹底消除“軟件就是程序”的錯(cuò)誤觀念。軟件是程序、數(shù)據(jù)及相關(guān)文檔的完整集合。其中,程序是能夠完成預(yù)定功能和性能的可執(zhí)行的指令序列;數(shù)據(jù)是使程序能夠適當(dāng)?shù)靥幚硇畔⒌臄?shù)據(jù)結(jié)構(gòu);文檔是開發(fā)、使用和維護(hù)程序所需要的圖文資料?!?.軟件危機(jī)三、消除軟件危機(jī)認(rèn)識(shí)到軟件開發(fā)不是某種個(gè)體勞動(dòng)的神秘技巧,而應(yīng)該是一種組織良好、管理嚴(yán)密、各類人員協(xié)同配合、共同完成的工程項(xiàng)目?!败浖本幊蹋凶约旱纳芷?/p>
(lifecycle)。大型軟件系統(tǒng)的開發(fā)與其它工程項(xiàng)目如建造橋梁、制造飛機(jī)、輪船等的開發(fā)是同理的。更好的語言和工具統(tǒng)一的編碼規(guī)范§1.軟件危機(jī)軟件工程是指導(dǎo)計(jì)算機(jī)軟件開發(fā)和維護(hù)的一門工程學(xué)科。1968年在第一屆NATO會(huì)議上曾經(jīng)給出了軟件工程的一個(gè)早期定義:“軟件工程就是為了經(jīng)濟(jì)地獲得可靠的且能在實(shí)際機(jī)器上有效地運(yùn)行的軟件,而建立和使用完善的工程原理?!?993年IEEE(美國電氣電子工程師學(xué)會(huì))全面更具體的定義:“軟件工程是:①把系統(tǒng)的、規(guī)范的、可度量的途徑應(yīng)用于軟件開發(fā)、運(yùn)行和維護(hù)過程,也就是把工程應(yīng)用于軟件;②研究①中提到的途徑?!薄?.軟件工程(SoftwareEngineering)一、人們普遍認(rèn)為軟件工程具有下述的本質(zhì)特性1.軟件工程關(guān)注于大型程序的構(gòu)造2.軟件工程的中心課題是控制復(fù)雜性3.軟件經(jīng)常變化4.開發(fā)軟件的效率非常重要5.和諧地合作是開發(fā)軟件的關(guān)鍵6.軟件必須有效地支持它的用戶7.在軟件工程領(lǐng)域中是由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品§2.軟件工程二、軟件工程的基本原理(Principles):⑴用分階段的生命周期計(jì)劃嚴(yán)格管理
項(xiàng)目概要計(jì)劃
里程碑計(jì)劃
項(xiàng)目控制計(jì)劃
產(chǎn)品控制計(jì)劃
驗(yàn)證計(jì)劃
運(yùn)行維護(hù)計(jì)劃⑵堅(jiān)持進(jìn)行階段評(píng)審⑶實(shí)行嚴(yán)格的產(chǎn)品控制——基準(zhǔn)配置管理(Baselineconfigurationmanagement)⑹開發(fā)小組的成員應(yīng)該少而精
⑷采用現(xiàn)代程序設(shè)計(jì)技術(shù)⑸結(jié)果應(yīng)能清楚地審查⑺承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性§2.軟件工程軟件工程包括技術(shù)和管理兩方面的內(nèi)容,是技術(shù)與管理緊密結(jié)合所形成的工程學(xué)科。管理:就是通過計(jì)劃、組織和控制等一系列活動(dòng),合理地配置和使用各種資源,以達(dá)到既定目標(biāo)的過程。方法學(xué):在軟件生命周期全過程中使用的一整套技術(shù)方法的集合稱為方法學(xué)(methodology),也稱為范型(paradigm)。在軟件工程領(lǐng)域中,這兩個(gè)術(shù)語的含義基本相同。三、軟件工程方法學(xué)§2.軟件工程軟件工程方法學(xué)包含3個(gè)要素:方法、工具和過程。方法是完成軟件開發(fā)的各項(xiàng)任務(wù)的技術(shù)方法,回答“怎樣做”的問題;工具是為運(yùn)用方法而提供的自動(dòng)的或半自動(dòng)的軟件工程支撐環(huán)境;過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。目前使用得最廣泛的軟件工程方法學(xué),分別是傳統(tǒng)方法學(xué)和面向?qū)ο蠓椒▽W(xué)?!?.軟件工程1.傳統(tǒng)方法學(xué)傳統(tǒng)方法學(xué)也稱為生命周期方法學(xué)或結(jié)構(gòu)化范型。它采用結(jié)構(gòu)化技術(shù)(結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化實(shí)現(xiàn))來完成軟件開發(fā)的各項(xiàng)任務(wù),并使用適當(dāng)?shù)能浖ぞ呋蜍浖こ汰h(huán)境來支持結(jié)構(gòu)化技術(shù)的運(yùn)用?!?.軟件工程這種方法學(xué)把軟件生命周期的全過程依次劃分為若干個(gè)階段,然后順序地完成每個(gè)階段的任務(wù)。前一個(gè)階段任務(wù)的完成是開始進(jìn)行后一個(gè)階段工作的前提和基礎(chǔ),而后一階段任務(wù)的完成通常是使前一階段提出的解法更進(jìn)一步具體化,加進(jìn)了更多的實(shí)現(xiàn)細(xì)節(jié)。在每一個(gè)階段結(jié)束之前都必須進(jìn)行正式嚴(yán)格的技術(shù)審查和管理復(fù)審,從技術(shù)和管理兩方面對(duì)這個(gè)階段的開發(fā)成果進(jìn)行檢查§2.軟件工程傳統(tǒng)方法學(xué)仍然是人們在開發(fā)軟件時(shí)使用得十分廣泛的軟件工程方法學(xué)。在相當(dāng)長一段時(shí)期內(nèi)這種方法學(xué)還會(huì)有生命力?!?.軟件工程2.面向?qū)ο蠓椒▽W(xué)當(dāng)軟件規(guī)模龐大,或者對(duì)軟件的需求是模糊的或會(huì)隨時(shí)間而變化的時(shí)候,使用傳統(tǒng)方法學(xué)開發(fā)軟件往往不成功,此外,使用傳統(tǒng)方法學(xué)開發(fā)出的軟件,維護(hù)起來仍然很困難?!?.軟件工程數(shù)據(jù)和對(duì)數(shù)據(jù)的處理原本是密切相關(guān)的,把數(shù)據(jù)和操作人為地分離成兩個(gè)獨(dú)立的部分,自然會(huì)增加軟件開發(fā)與維護(hù)的難度。與傳統(tǒng)方法相反,面向?qū)ο蠓椒ò褦?shù)據(jù)和行為看成同等重要,它是一種以數(shù)據(jù)為主線,把數(shù)據(jù)和對(duì)數(shù)據(jù)的操作緊密地結(jié)合起來的方法?!?.軟件工程概括地說,面向?qū)ο蠓椒▽W(xué)具有下述4個(gè)要點(diǎn)。把對(duì)象(object)作為融合了數(shù)據(jù)及在數(shù)據(jù)上的操作行為的統(tǒng)一的軟件構(gòu)件。面向?qū)ο蟪绦蚴怯蓪?duì)象組成的,程序中任何元素都是對(duì)象,復(fù)雜對(duì)象由比較簡單的對(duì)象組合而成。(2)把所有對(duì)象都劃分成類(class)。每個(gè)類都定義了一組數(shù)據(jù)和一組操作,類是對(duì)具有相同數(shù)據(jù)和相同操作的一組相似對(duì)象的定義?!?.軟件工程(3)按照父類(或稱為基類)與子類(或稱為派生類)的關(guān)系,把若干個(gè)相關(guān)類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng)(也稱為類等級(jí))。在類等級(jí)中,下層派生類自動(dòng)擁有上層基類中定義的數(shù)據(jù)和操作,這種現(xiàn)象稱為繼承。(4)對(duì)象彼此間僅能通過發(fā)送消息互相聯(lián)系。也就是說,對(duì)象的所有私有信息都被封裝在該對(duì)象內(nèi),不能從外界直接訪問,這就是通常所說的封裝性。
§2.軟件工程面向?qū)ο蠓椒▽W(xué)的出發(fā)點(diǎn)和基本原則:盡量模擬人類習(xí)慣的思維方式,使開發(fā)軟件的方法與過程盡可能接近人類認(rèn)識(shí)世界解決問題的方法與過程,從而使描述問題的問題空間(也稱為問題域)與實(shí)現(xiàn)解法的解空間(也稱為求解域)在結(jié)構(gòu)上盡可能一致。傳統(tǒng)方法學(xué)強(qiáng)調(diào)自頂向下順序地完成軟件開發(fā)的各階段任務(wù)?!?.軟件工程用面向?qū)ο蠓椒▽W(xué)開發(fā)軟件的過程,是一個(gè)主動(dòng)地多次反復(fù)迭代的演化過程。面向?qū)ο蠓椒ㄆ毡檫M(jìn)行的對(duì)象分類過程:支持從特殊到一般的歸納思維過程;通過建立類等級(jí)而獲得的繼承性,支持從一般到特殊的演繹思維過程?!?.軟件工程對(duì)象是相對(duì)獨(dú)立的實(shí)體,容易在以后的軟件產(chǎn)品中重復(fù)使用,面向?qū)ο蠓缎偷牧硪粋€(gè)重要優(yōu)點(diǎn)是促進(jìn)了軟件重用面向?qū)ο蠓椒ㄌ赜械睦^承性和多態(tài)性,進(jìn)一步提高了面向?qū)ο筌浖目芍赜眯浴?.軟件工程1.問題定義“要解決的問題是什么?”,在實(shí)踐中它卻可能是最容易被忽視的一個(gè)步驟。通過對(duì)客戶的訪問調(diào)查,系統(tǒng)分析員扼要地寫出關(guān)于問題性質(zhì)、工程目標(biāo)和工程規(guī)模的書面報(bào)告,經(jīng)過討論和必要的修改之后這份報(bào)告應(yīng)該得到客戶的確認(rèn)?!?.軟件生命周期(SoftwareLifeCycle)2.可行性研究“對(duì)于上一個(gè)階段所確定的問題有行得通的解決辦法嗎?”系統(tǒng)分析員需要進(jìn)行一次大大壓縮和簡化了的系統(tǒng)分析和設(shè)計(jì)過程,也就是在較抽象的高層次上進(jìn)行的分析和設(shè)計(jì)過程。研究問題的范圍,探索這個(gè)問題是否值得去解,是否有可行的解決辦法。§3.軟件生命周期3.需求分析這個(gè)階段的任務(wù)仍然不是具體地解決問題,而是準(zhǔn)確地確定“為了解決這個(gè)問題,目標(biāo)系統(tǒng)必須做什么”,主要是確定目標(biāo)系統(tǒng)必須具備哪些功能。§3.軟件生命周期系統(tǒng)分析員在需求分析階段必須和用戶密切配合,充分交流信息,以得出經(jīng)過用戶確認(rèn)的系統(tǒng)邏輯模型。通常用數(shù)據(jù)流圖、數(shù)據(jù)字典和簡要的算法表示系統(tǒng)的邏輯模型。用正式文檔準(zhǔn)確地記錄對(duì)目標(biāo)系統(tǒng)的需求,這份文檔通常稱為規(guī)格說明書(specification)。(提示:它經(jīng)常被作為軟件驗(yàn)收的技術(shù)協(xié)議)§3.軟件生命周期4.總體設(shè)計(jì)這個(gè)階段必須回答的關(guān)鍵問題是:“概括地說,應(yīng)該怎樣實(shí)現(xiàn)目標(biāo)系統(tǒng)?”總體設(shè)計(jì)又稱為概要設(shè)計(jì)。應(yīng)該設(shè)計(jì)出實(shí)現(xiàn)目標(biāo)系統(tǒng)的幾種可能的方案。并在充分權(quán)衡各種方案的利弊的基礎(chǔ)上,推薦一個(gè)最佳方案??傮w設(shè)計(jì)的另一項(xiàng)主要任務(wù)就是設(shè)計(jì)程序的體系結(jié)構(gòu),也就是確定程序由哪些模塊組成以及模塊間的關(guān)系?!?.軟件生命周期5.詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)階段的任務(wù)就是把解法具體化,也就是回答下面這個(gè)關(guān)鍵問題:“應(yīng)該怎樣具體地實(shí)現(xiàn)這個(gè)系統(tǒng)呢?”不是編寫程序,而是設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。詳細(xì)設(shè)計(jì)也稱為模塊設(shè)計(jì),在這個(gè)階段將詳細(xì)地設(shè)計(jì)每個(gè)模塊,確定實(shí)現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)?!?.軟件生命周期6.編碼和單元測試這個(gè)階段的關(guān)鍵任務(wù)是寫出正確的容易理解、容易維護(hù)的程序模塊。程序員應(yīng)該根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實(shí)際環(huán)境,選取一種適當(dāng)?shù)母呒?jí)程序設(shè)計(jì)語言(必要時(shí)用匯編語言),把詳細(xì)設(shè)計(jì)的結(jié)果翻譯成用選定的語言書寫的程序,并且仔細(xì)測試編寫出的每一個(gè)模塊?!?.軟件生命周期7.綜合測試這個(gè)階段的關(guān)鍵任務(wù)是通過各種類型的測試(及相應(yīng)的調(diào)試)使軟件達(dá)到預(yù)定的要求。最基本的測試是集成測試和驗(yàn)收測試。所謂集成測試是根據(jù)設(shè)計(jì)的軟件結(jié)構(gòu),把經(jīng)過單元測試檢驗(yàn)的模塊按某種選定的策略裝配起來,在裝配過程中對(duì)程序進(jìn)行必要的測試。所謂驗(yàn)收測試則是按照規(guī)格說明書的規(guī)定,由用戶對(duì)目標(biāo)系統(tǒng)進(jìn)行驗(yàn)收?!?.軟件生命周期8.軟件維護(hù)維護(hù)階段的關(guān)鍵任務(wù)是,通過各種必要的維護(hù)活動(dòng)使系統(tǒng)持久地滿足用戶的需要。通常有4類維護(hù)活動(dòng):改正性維護(hù),也就是診斷和改正在使用過程中發(fā)現(xiàn)的軟件錯(cuò)誤;適應(yīng)性維護(hù),即修改軟件以適應(yīng)環(huán)境的變化;完善性維護(hù),即根據(jù)用戶的要求改進(jìn)或擴(kuò)充軟件使它更完善;預(yù)防性維護(hù),即修改軟件為將來的維護(hù)活動(dòng)預(yù)先做準(zhǔn)備?!?.軟件生命周期§4.軟件過程軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。
ISO9000把過程定義為“使用資源將輸入轉(zhuǎn)化為輸出的活動(dòng)所構(gòu)成的系統(tǒng)。”此處,“系統(tǒng)”的含義是廣義的:“系統(tǒng)是相互關(guān)聯(lián)或相互作用的一組要素?!边^程定義了運(yùn)用方法的順序、應(yīng)該交付的文檔資料、為保證軟件質(zhì)量和協(xié)調(diào)變化所需要采取的管理措施,以及標(biāo)志軟件開發(fā)各個(gè)階段任務(wù)完成的里程碑??茖W(xué)、有效的軟件過程應(yīng)該定義一組適合于所承擔(dān)的項(xiàng)目特點(diǎn)的任務(wù)集合。通常,一個(gè)任務(wù)集合包括一組軟件工程任務(wù)、里程碑和應(yīng)該交付的產(chǎn)品。通常使用生命周期模型簡潔地描述軟件過程。生命周期模型規(guī)定了把生命周期劃分成哪些階段及各個(gè)階段的執(zhí)行順序,因此,也稱為過程模型?!?.軟件過程一、瀑布模型(WaterfallModel):維護(hù)開發(fā)定義定義
可行性研究需求分析詳細(xì)設(shè)計(jì)編碼和測試集成和系統(tǒng)測試提交和維護(hù)概要設(shè)計(jì)通常使用生命周期模型簡潔地描述軟件過程。把生命周期劃分成哪些階段及各個(gè)階段的執(zhí)行順序,也稱為過程模型。⑴順序性、依賴性
前一階段的輸出文檔是后一階段的輸入文檔
瀑布模型特點(diǎn)
用戶要求系統(tǒng)測試
需求分析概要設(shè)計(jì)單元測試綜合測試確認(rèn)測試編碼程序清單需求規(guī)格說明軟件結(jié)構(gòu)圖模塊說明詳細(xì)設(shè)計(jì)圖§4.軟件過程⑵推遲程序的物理實(shí)現(xiàn)軟件開發(fā)人員不能急于求成,它們總想早點(diǎn)編寫程序。對(duì)于大、中型的軟件編碼開始得越早,完成所需時(shí)間反而越長,過早地考慮程序的實(shí)現(xiàn),常常導(dǎo)致大量返工,甚至災(zāi)難性后果(徹底推翻)§4.軟件過程⑶質(zhì)量保證的觀點(diǎn)——階段文檔與評(píng)審的要求,利于盡早發(fā)現(xiàn)錯(cuò)誤。
每一階段都要完成規(guī)定的文檔每一階段都要對(duì)完成的文檔進(jìn)行復(fù)審,以便盡早發(fā)現(xiàn)問題,消除隱患,復(fù)審要及時(shí),暴露出問題愈晚,排除故障付出代價(jià)也愈高。
§4.軟件過程優(yōu)點(diǎn):規(guī)范化開發(fā);每個(gè)階段提交文檔每個(gè)階段驗(yàn)證缺點(diǎn):過于理想化(不能適應(yīng)需求的變化,初期用戶對(duì)產(chǎn)品的“樣式”不了解)§4.軟件過程實(shí)際的瀑布模型快速建立起來的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能完成的功能往往是最終產(chǎn)品能完成的功能的一個(gè)子集??焖僭湍P偷牡谝徊绞强焖俳⒁粋€(gè)能反映用戶主要需求的原型系統(tǒng),讓用戶在計(jì)算機(jī)上試用它,通過實(shí)踐來了解目標(biāo)系統(tǒng)的概貌?!?.軟件過程二、快速原型模型通常,用戶試用,提出修改意見,開發(fā)人員修改原型系統(tǒng),然后用戶再次試用……一旦用戶認(rèn)可,開發(fā)人員書寫規(guī)格說明文檔,軟件可以滿足用戶的真實(shí)需求?!?.軟件過程快速原型模型三、增量模型增量模型§4.軟件過程增量模型也稱為漸增模型。使用增量模型開發(fā)軟件時(shí),把軟件產(chǎn)品作為一系列增量構(gòu)件來設(shè)計(jì)、編碼、集成和測試每個(gè)構(gòu)件由多個(gè)相互作用的模塊構(gòu)成,并且能完成特定的功能。使用增量模型時(shí),第一個(gè)增量構(gòu)件往往實(shí)現(xiàn)軟件的基本需求,提供最核心的功能。例:開發(fā)字處理軟件第一個(gè)增量構(gòu)件:基本的文件管理、編輯、和文檔生成功能第二個(gè)增量構(gòu)件:更完善的編輯和文檔生成功能;第三個(gè)增量構(gòu)件:實(shí)現(xiàn)拼寫和語法檢查功能;第四個(gè)增量構(gòu)件:完成高級(jí)的頁面排版功能構(gòu)件2構(gòu)件3構(gòu)件1構(gòu)件2構(gòu)件1能在較短時(shí)間內(nèi)向用戶提交可完成部分工作的產(chǎn)品,是增量模型的一個(gè)優(yōu)點(diǎn)。逐步增加產(chǎn)品功能可以使用戶有較充裕的時(shí)間學(xué)習(xí)和適應(yīng)新產(chǎn)品,從而減少一個(gè)全新的軟件可能給客戶組織帶來的沖擊。優(yōu)點(diǎn)§4.軟件過程增量模型本身是自相矛盾的。它一方面要求開發(fā)人員把軟件看作一個(gè)整體,另一方面又要求開發(fā)人員把軟件看作構(gòu)件序列,每個(gè)構(gòu)件本質(zhì)上都獨(dú)立于另一個(gè)構(gòu)件。除非開發(fā)人員有足夠的技術(shù)能力協(xié)調(diào)好這一明顯的矛盾,否則用增量模型開發(fā)出的產(chǎn)品可能并不令人滿意?!?.軟件過程風(fēng)險(xiǎn)更大的增量模型冒構(gòu)件無法集成到一起的風(fēng)險(xiǎn)§4.軟件過程四、螺旋模型§4.軟件過程簡化的螺旋模型螺旋模型的基本思想是,使用原型及其他方法來盡量降低風(fēng)險(xiǎn)。理解這種模型的一個(gè)簡便方法,是把它看作在每個(gè)階段之前都增加了風(fēng)險(xiǎn)分析過程的快速原型模型。完整的螺旋模型§4.軟件過程§2.步驟1、復(fù)查定義,明確限制的約束。我們認(rèn)為用戶要的用戶要的2、研究老系統(tǒng)
解決老系統(tǒng)問題老系統(tǒng)功能新增功能
新系統(tǒng)效益注:
只了解老系統(tǒng)做什么,而不管怎樣做;
注意了解與其它系統(tǒng)的接口。
老系統(tǒng)效益§2.步驟3、導(dǎo)出高層邏輯模型(conceptualdesign)…………抽象實(shí)現(xiàn)改進(jìn)老系統(tǒng)模型新模型新系統(tǒng)報(bào)告應(yīng)該告訴用戶“What”而不是“How”§2.步驟
3、邏輯模型4、重新定義1、復(fù)查定義注:此時(shí)合同未簽,應(yīng)考慮成本,不宜反復(fù)太多次。5、導(dǎo)出多種解法進(jìn)度表經(jīng)濟(jì)上合算技術(shù)上可行操作上可行技術(shù)上不可行用戶不可能操作不合算§2.步驟6、推薦行動(dòng)方針YesorNo?NoYesWhy?Whichoneisthebest?Why?(cost/benefit)7、開發(fā)計(jì)劃(粗略)
任務(wù)分解,確定負(fù)責(zé)人
大致進(jìn)度規(guī)劃
財(cái)務(wù)預(yù)算
風(fēng)險(xiǎn)分析及對(duì)策8、審查、存檔§3.系統(tǒng)流程圖(SystemFlowDiagram)系統(tǒng)流程圖是概括地描繪物理系統(tǒng)的傳統(tǒng)工具基本思想是用圖形符號(hào)以黑盒子形式描繪組成系統(tǒng)的每個(gè)部件(程序,文檔,數(shù)據(jù)庫,人工過程等)。系統(tǒng)流程圖表達(dá)的是數(shù)據(jù)在系統(tǒng)各部件之間流動(dòng)的情況,而不是對(duì)數(shù)據(jù)進(jìn)行加工處理的控制過程(不同于程序流程圖)符號(hào):P.29圖2.1基本符號(hào)§3.系統(tǒng)流程圖2.例子:P.30某裝配廠有一座存放零件的倉庫,倉庫中現(xiàn)有的各種零件的數(shù)量以及每種零件的庫存量臨界值等數(shù)據(jù)記錄在庫存清單主文件中。當(dāng)倉庫中零件數(shù)量有變化時(shí),應(yīng)該及時(shí)修改庫存清單主文件,如果哪種零件的庫存量少于它的庫存量臨界值,則應(yīng)該報(bào)告給采購部門以便定貨,規(guī)定每天向采購部門送一次定貨報(bào)告。變化倉庫零
庫存量件臨界值庫存清單XX:————————XX:————…………庫存<
臨界值定貨報(bào)告§3.系統(tǒng)流程圖注:符號(hào)=系統(tǒng)部件箭頭=信息流動(dòng)路徑事務(wù)庫存清單程序庫存清單主文件定貨信息報(bào)告生成程序定貨報(bào)告即庫存量變化數(shù)據(jù)流圖(DFD)是一種圖形化技術(shù),它描繪信息流和數(shù)據(jù)從輸入移動(dòng)到輸出的過程中所經(jīng)受的變換。只是描繪數(shù)據(jù)在軟件中流動(dòng)和被處理的邏輯過程。設(shè)計(jì)數(shù)據(jù)流圖時(shí)只需考慮系統(tǒng)必須完成的基本邏輯功能,完全不需要考慮怎樣具體地實(shí)現(xiàn)這些功能,§4.數(shù)據(jù)流圖
(DataFlowDiagram,DFD)§4.數(shù)據(jù)流圖
System=data+function1、符號(hào):P.31inputDatastoragefunctionDataflow2、例子:(1)P.32—37output假設(shè)一家工廠的采購部每天需要一張定貨報(bào)表,報(bào)表按零件編號(hào)排序,表中列出所有需要再次定貨的零件。對(duì)于每個(gè)需要再次定貨的零件應(yīng)該列出下述數(shù)據(jù):零件編號(hào),零件名稱,定貨數(shù)量,目前價(jià)格,主要供應(yīng)者,次要供應(yīng)者。零件入庫或出庫稱為事務(wù),通過放在倉庫中的顯示器把事務(wù)報(bào)告給定貨系統(tǒng)。當(dāng)某種零件的庫存數(shù)量少于庫存量臨界值時(shí)就應(yīng)該再次定貨。例子§4.數(shù)據(jù)流圖
倉庫管理員定貨系統(tǒng)
采購員
倉庫管理員
采購員處理事務(wù)1產(chǎn)生報(bào)表2D2定貨信息D1庫存清單
定貨信息
定貨信息§4.數(shù)據(jù)流圖
倉庫管理員
采購員接受事務(wù)1.1產(chǎn)生報(bào)表2D2定貨信息D1庫存清單
定貨信息
定貨信息處理事務(wù)1.2更新庫存清單1.3進(jìn)一步分解后的數(shù)據(jù)流圖§4.數(shù)據(jù)流圖
132
文件2.12.22.32.43.13.23.33.43.5
入入S出出3分層數(shù)據(jù)流圖§4.數(shù)據(jù)流圖
(1)數(shù)據(jù)流圖可以逐層分解頂層的系統(tǒng)S很復(fù)雜,可以把它分解為第2層的1,2,3三個(gè)子系統(tǒng)。在這子系統(tǒng)中,如果子系統(tǒng)1已經(jīng)很清楚,無需再分解,子系統(tǒng)2和子系統(tǒng)3仍很復(fù)雜,可以再把它們分別分解為下一層的子系統(tǒng)2.1,2.2,2.3,2.4和3.1,3.2,3.3,3.4,3.5……,直到分解所得到的每個(gè)子系統(tǒng)都能清楚地理解和實(shí)現(xiàn)。對(duì)于任何復(fù)雜的系統(tǒng),分析工作都可以按照這樣的方式有計(jì)劃,有步驟,有條不紊地進(jìn)行。對(duì)大小規(guī)模不同的系統(tǒng)只是分解層次不同而以?!?.數(shù)據(jù)流圖
(2)分層DFD優(yōu)點(diǎn)·便于實(shí)現(xiàn),采用逐步細(xì)化擴(kuò)展方法,可避免一次引入過多細(xì)節(jié),有利于控制問題的復(fù)雜度?!け阌谑褂?用一組圖代替一張圖§4.數(shù)據(jù)流圖
(3)分層DFD的指導(dǎo)原則
①注意父圖和子圖的平衡:父圖和子圖的輸入和輸出數(shù)據(jù)應(yīng)保持一致.②區(qū)分局部文件和局部外部項(xiàng).(內(nèi)外相對(duì)變化)注意:一般地,除底層DFD需畫出全部文件名,各中間層的DFD僅畫出處于加工之間的接口文件,其余文件均不必畫出,以保持圖面的簡潔。
③掌握分解的速度:逐步細(xì)化(通常在上層可分解快一些,下一層應(yīng)慢一些)
④遵守加工編號(hào)規(guī)則:頂層加工不編號(hào)第二層1,2,3,4…,n
第三層1.1,1.2…2.1,1.2…§4.數(shù)據(jù)流圖
數(shù)據(jù)流圖中每個(gè)成分的命名原則:可理解性。注意的問題:1.為數(shù)據(jù)流(或數(shù)據(jù)存儲(chǔ))命名名字應(yīng)代表整個(gè)數(shù)據(jù)流(或數(shù)據(jù)存儲(chǔ))的內(nèi)容,而不是僅僅反映它的某些成分。(2)不要使用空洞的、缺乏具體含義的名字(如“數(shù)據(jù)”、“信息”、“輸入”之類)。(3)為某個(gè)數(shù)據(jù)流(或數(shù)據(jù)存儲(chǔ))起名字時(shí)遇到了困難,分析命名是否恰當(dāng),應(yīng)該試試重新分解,看是否能克服這個(gè)困難4.數(shù)據(jù)流的命名§4.數(shù)據(jù)流圖
2.為處理(加工)命名通常先為數(shù)據(jù)流命名,然后再為與之相關(guān)聯(lián)的處理命名。(2)名字應(yīng)該反映整個(gè)處理的功能,而不是它的一部分功能。(3)名字最好由一個(gè)具體的及物動(dòng)詞加上一個(gè)具體的賓語組成。應(yīng)該盡量避免使用“加工”、“處理”等空洞籠統(tǒng)的動(dòng)詞作名字。§4.數(shù)據(jù)流圖
(4)通常名字中僅包括一個(gè)動(dòng)詞,如果必須用兩個(gè)動(dòng)詞才能描述整個(gè)處理的功能,則把這個(gè)處理再分解成兩個(gè)處理可能更恰當(dāng)些。(5)如果在為某個(gè)處理命名時(shí)遇到困難,則很可能是發(fā)現(xiàn)了分解不當(dāng)?shù)嫩E象,應(yīng)考慮重新分解。數(shù)據(jù)源點(diǎn)/終點(diǎn)并不屬于數(shù)據(jù)流圖的核心內(nèi)容,只不過是目標(biāo)系統(tǒng)的外圍環(huán)境部分(可能是人員、計(jì)算機(jī)外部設(shè)備或傳感器裝置)。通常,為數(shù)據(jù)源點(diǎn)/終點(diǎn)命名時(shí)采用它們在問題域中習(xí)慣使用的名字(如“用戶”、“采購員”、“倉庫管理員”等)?!?.數(shù)據(jù)流圖
畫數(shù)據(jù)流圖的基本目的是利用它作為交流信息的工具。分析員把他對(duì)現(xiàn)有系統(tǒng)的認(rèn)識(shí)或?qū)δ繕?biāo)系統(tǒng)的設(shè)想用數(shù)據(jù)流圖描繪出來,供有關(guān)人員審查確認(rèn)。數(shù)據(jù)流圖的另一個(gè)主要用途是作為分析和設(shè)計(jì)的工具。著重描繪系統(tǒng)所完成的功能而不是系統(tǒng)的物理實(shí)現(xiàn)方案。數(shù)據(jù)流圖是實(shí)現(xiàn)這個(gè)目標(biāo)的極好手段。
用途§4.數(shù)據(jù)流圖
數(shù)據(jù)字典(DD)是關(guān)于數(shù)據(jù)的信息的集合,也就是對(duì)數(shù)據(jù)流圖中包含的所有元素的定義的集合。字典的用途:供人查閱對(duì)不了解的條目的解釋,在軟件分析和設(shè)計(jì)的過程中給人提供關(guān)于數(shù)據(jù)的描述信息;數(shù)據(jù)字典是開發(fā)數(shù)據(jù)庫的第一步數(shù)據(jù)流圖和數(shù)據(jù)字典共同構(gòu)成系統(tǒng)的邏輯模型§5.數(shù)據(jù)字典(DataDictionary,DD)數(shù)據(jù)字典中還應(yīng)該包含關(guān)于數(shù)據(jù)的一些其他信息:一般信息(名字,別名,描述等等),定義(數(shù)據(jù)類型,長度,結(jié)構(gòu)等等),使用特點(diǎn)(值的范圍,使用頻率,使用方式——輸入、輸出、本地,條件值等等),控制信息(來源,用戶,使用它的程序,改變權(quán),使用權(quán)等等)分組信息(父結(jié)構(gòu),從屬結(jié)構(gòu),物理位置——記錄、文件和數(shù)據(jù)庫等等)。(1)對(duì)于同樣的數(shù)據(jù),不同的用戶使用了不同的名字;(2)一個(gè)分析員在不同時(shí)期對(duì)同一個(gè)數(shù)據(jù)使用了不同的名字;(3)兩個(gè)分析員分別分析同一個(gè)數(shù)據(jù)流時(shí),使用了不同的名字。雖然應(yīng)該盡量減少出現(xiàn)別名,但是不可能完全消除別名。出現(xiàn)別名主要有下述3個(gè)原因:數(shù)據(jù)元素組成數(shù)據(jù)的方式(1)順序即以確定次序連接兩個(gè)或多個(gè)分量;(2)選擇即從兩個(gè)或多個(gè)可能的元素中選取一個(gè);(3)重復(fù)即把指定的分量重復(fù)零次或多次。重復(fù)次數(shù):重復(fù)算符通常和重復(fù)次數(shù)的上下限同時(shí)使用(當(dāng)上下限相同時(shí)表示重復(fù)次數(shù)固定)。(4)可選即一個(gè)分量是可有可無的(重復(fù)零次或一次)。=意思是等價(jià)于(或定義為);+意思是和(即,連接兩個(gè)分量);[]意思是或(即,從方括弧內(nèi)列出的若干個(gè)分量中選擇一個(gè)),通常用“|”號(hào)隔開供選擇的分量;{}意思是重復(fù)(即,重復(fù)花括弧內(nèi)的分量);()意思是可選(即,圓括弧里的分量可有可無)。采用下列符號(hào):標(biāo)識(shí)符=字母字符+字母數(shù)字串字母數(shù)字串=0{字母或數(shù)字}7字母或數(shù)字=[字母字符|數(shù)字字符]例:名字:定貨報(bào)表別名:定貨信息描述:每天一次送檢采購員的需要定貨的零件表定義:定貨報(bào)表=零件編號(hào)+零件名稱
+定貨數(shù)量+目前價(jià)格
+主要供應(yīng)者
+次要供應(yīng)者位置:輸出到打印機(jī)}數(shù)據(jù)結(jié)構(gòu)struct定貨報(bào)表{char零件編號(hào)[8];
char零件名稱[20];int定貨數(shù)量;float目前價(jià)格;structsupplier主要供應(yīng)者;structsupplier次要供應(yīng)者;};數(shù)據(jù)字典的實(shí)現(xiàn)通過計(jì)算機(jī)維護(hù)采用卡片§5.
數(shù)據(jù)字典名字:零件編號(hào)別名:描述:唯一地標(biāo)識(shí)庫存清單中一個(gè)特定零件的關(guān)鍵域定義:零件編號(hào)=8{字符}8位置:定貨報(bào)告定貨信息庫存清單若修改“零件編號(hào)”的定義,則受到影響的數(shù)據(jù)均列于此§6成本/效益分析(Cost/Benefit)1、成本估計(jì)(CostEstimation)⑴代碼行技術(shù):每行代碼的平均成本
源代碼行數(shù)⑵任務(wù)分解技術(shù):人力
工資(3)自動(dòng)估計(jì)成本技術(shù)采用自動(dòng)估計(jì)成本的軟件工具,長期搜集的大量歷史數(shù)據(jù)為基礎(chǔ),并且需要有良好的數(shù)據(jù)庫系統(tǒng)支持?!?成本/效益分析2、效益估計(jì)(BenefitEstimation)例:假設(shè)某軟件生命周期為5年?,F(xiàn)在投資20萬元,平均年利率3%。從第一年起,每年年底收入4.2萬元,問該項(xiàng)目是否值得投資?P=20萬4.2萬4.2萬4.2萬4.2萬4.2萬012345存入銀行§6成本/效益分析到第5年底結(jié)算時(shí):存入銀行收入=200000(1+3%)5231855(元)投資軟件的收入=42000[(1+3%)4+(1+3%)3+(1+3%)2+(1+3%)+1]
222984(元)不合算!§6成本/效益分析
衡量工程價(jià)值的經(jīng)濟(jì)指標(biāo)有:⑴純收入
=折合現(xiàn)價(jià)的總收入-當(dāng)前投資額
=⑵投資回收期例:第6年底可收回§1.需求分析的任務(wù)仍然回答“What”,而不是“How”,但更細(xì)致、精確(合同的擬定)可行性分析DFDDD功能具體化需求規(guī)格說明加細(xì)DFDDD算法描述IPOFinalstageofDefinitionphase§1.需求分析的任務(wù)1、確定要求⑴功能要求(functionalrequirements):系統(tǒng)必須做什么?⑵性能要求(performance
requirements):做得怎樣?例:responsetime,memory,back-upmemory,security,……⑶運(yùn)行要求(operationalrequirements)
:運(yùn)行環(huán)境、軟硬件配置等。⑷未來可能的擴(kuò)充要求(possibleevolution)
?!?.需求分析的任務(wù)2、分析數(shù)據(jù)⑴建立概念模型(conceptualmodels):E-RDiagram⑵形象描繪數(shù)據(jù)結(jié)構(gòu):DataHierarchy,WarnierDiagram,IPO⑶數(shù)據(jù)結(jié)構(gòu)規(guī)范化(Normalization)3、導(dǎo)出邏輯模型:
DFD+DD+IPO(輸入、處理、輸出)4、修正計(jì)劃:重估成本、進(jìn)度等§1.需求分析的任務(wù)5、開發(fā)原型系統(tǒng)(Prototyping)“樣機(jī)試用”CD訪談獲取用戶需求的技術(shù)。兩種基本形式,正式的和非正式的訪談。正式訪談時(shí),系統(tǒng)分析員將提出一些事先準(zhǔn)備好的具體問題。在非正式訪談中,分析員將提出一些用戶可以自由回答的開放性問題,以鼓勵(lì)被訪問人員說出自己的想法?!?與用戶溝通獲取需求的方法
1.訪談當(dāng)需要調(diào)查大量人員的意見時(shí),分發(fā)調(diào)查表。用戶寫出書面回答,分析員仔細(xì)閱讀收回的調(diào)查表,有針對(duì)性地訪問一些用戶,詢問發(fā)現(xiàn)的新問題。在訪問用戶的過程中使用情景分析技術(shù)往往非常有效。所謂情景分析就是對(duì)用戶將來使用目標(biāo)系統(tǒng)解決某個(gè)具體問題的方法和結(jié)果進(jìn)行分析?!?與用戶溝通獲取需求的方法情景分析技術(shù)的用處主要體現(xiàn)在下述兩個(gè)方面:它能在某種程度上演示目標(biāo)系統(tǒng)的行為,從而便于用戶理解,而且還可能進(jìn)一步揭示出一些分析員目前還不知道的需求。(2)使用這種技術(shù)能保證用戶在需求分析過程中始終扮演一個(gè)積極主動(dòng)的角色?!?與用戶溝通獲取需求的方法
在可行性研究階段許多實(shí)際的數(shù)據(jù)元素被忽略了,當(dāng)時(shí)分析員還不需要考慮這些細(xì)節(jié),現(xiàn)在是定義這些數(shù)據(jù)元素的時(shí)候了。2.面向數(shù)據(jù)流自頂向下求精§2與用戶溝通獲取需求的方法結(jié)構(gòu)化分析方法就是面向數(shù)據(jù)流自頂向下逐步求精進(jìn)行需求分析的方法。從數(shù)據(jù)流圖的輸出端著手分析,這是因?yàn)橄到y(tǒng)的基本功能是產(chǎn)生這些輸出,輸出數(shù)據(jù)決定了系統(tǒng)必須具有的最基本的組成元素?!?與用戶溝通獲取需求的方法
輸出端處理
輸入端數(shù)據(jù)分析的方向數(shù)據(jù)沿?cái)?shù)據(jù)流圖回溯時(shí)常常遇到下述問題:為了得到某個(gè)數(shù)據(jù)元素需要用到數(shù)據(jù)流圖中目前還沒有的數(shù)據(jù)元素,或者得出這個(gè)數(shù)據(jù)元素需要用的算法尚不完全清楚。§2與用戶溝通獲取需求的方法向用戶和其他有關(guān)人員請教,他們的回答使分析員對(duì)目標(biāo)系統(tǒng)的認(rèn)識(shí)更深入更具體了,系統(tǒng)中更多的數(shù)據(jù)元素被劃分出來了,更多的算法被搞清楚了。通常把分析過程中得到的有關(guān)數(shù)據(jù)元素的信息記錄在數(shù)據(jù)字典中,把對(duì)算法的簡明描述記錄在IPO圖(見3.7節(jié))中。通過分析而補(bǔ)充的數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)和處理,應(yīng)該添加到數(shù)據(jù)流圖的適當(dāng)位置上?!?與用戶溝通獲取需求的方法請用戶復(fù)查從數(shù)據(jù)流圖輸入端開始,分析員借助數(shù)據(jù)流圖、數(shù)據(jù)字典和IPO圖向用戶解釋輸入數(shù)據(jù)是怎樣一步一步地轉(zhuǎn)變成輸出數(shù)據(jù)的。這些認(rèn)識(shí)正確嗎?有沒有遺漏?用戶應(yīng)該注意傾聽分析員的報(bào)告,并及時(shí)糾正和補(bǔ)充分析員的認(rèn)識(shí)。復(fù)查過程驗(yàn)證了已知的元素,補(bǔ)充了未知的元素,填補(bǔ)了文檔中的空白。
面向數(shù)據(jù)流自頂向下求精過程不需分解有補(bǔ)充修正無補(bǔ)充修正分析追蹤數(shù)據(jù)流圖用戶復(fù)查細(xì)化數(shù)據(jù)流圖需要分解
一種面向團(tuán)隊(duì)的需求收集法,稱為簡易的應(yīng)用規(guī)格說明技術(shù)。這種方法提倡用戶與開發(fā)者密切合作,共同標(biāo)識(shí)問題,提出解決方案要素,商討不同方案并指定基本需求。3.簡易的應(yīng)用規(guī)格說明技術(shù)典型過程如下:首先進(jìn)行初步的訪談,初步確定待解決的問題的范圍和解決方案。然后開發(fā)者和用戶分別寫出“產(chǎn)品需求”。選定會(huì)議的時(shí)間和地點(diǎn),并選舉一個(gè)負(fù)責(zé)主持會(huì)議的協(xié)調(diào)人。邀請開發(fā)者和用戶雙方組織的代表出席會(huì)議,并在開會(huì)前預(yù)先把寫好的產(chǎn)品需求分發(fā)給每位與會(huì)者。列出作為系統(tǒng)環(huán)境組成部分的對(duì)象、系統(tǒng)將產(chǎn)生的對(duì)象以及系統(tǒng)為了完成自己的功能將使用的對(duì)象。列出操作這些對(duì)象或與這些對(duì)象交互的服務(wù)(即處理或功能)。列出約束條件(例如,成本、規(guī)模、完成日期)和性能標(biāo)準(zhǔn)(例如,速度、容量)。并不期望每位與會(huì)者列出的內(nèi)容都是毫無遺漏的,但是,希望能準(zhǔn)確地表達(dá)出每個(gè)人對(duì)目標(biāo)系統(tǒng)的認(rèn)識(shí)。討論的第一個(gè)問題是,是否需要這個(gè)新產(chǎn)品,一旦大家都同意確實(shí)需要這個(gè)新產(chǎn)品,可以把這些列表抄寫在大紙上釘在墻上,或者寫在白板上掛在墻上。理想的情況是,表中每一項(xiàng)都能單獨(dú)移動(dòng),這樣就能方便地刪除或增添表項(xiàng),或組合不同的列表。在這個(gè)階段,嚴(yán)格禁止批評(píng)與爭論。大家共同創(chuàng)建一張組合列表。在組合列表中消去了冗余項(xiàng),加入了在展示過程中產(chǎn)生的新想法,但是并不刪除任何實(shí)質(zhì)性內(nèi)容。由協(xié)調(diào)人主持討論這些列表。組合列表將被縮短、加長或重新措辭,以便更準(zhǔn)確地描述將被開發(fā)的產(chǎn)品。討論的目標(biāo)是,針對(duì)每個(gè)議題(對(duì)象、服務(wù)、約束和性能)都創(chuàng)建出一張意見一致的列表。一旦得出了意見一致的列表,就把與會(huì)者分成更小的小組,每個(gè)小組的工作目標(biāo)是為每張列表中的項(xiàng)目制定小型規(guī)格說明。小型規(guī)格說明是對(duì)列表中包含的單詞或短語的準(zhǔn)確說明。每個(gè)小組都向全體與會(huì)者展示他們制定的小型規(guī)格說明,供大家討論。通過討論可能會(huì)增加或刪除一些內(nèi)容,也可能進(jìn)一步做些精化工作。在完成了小型規(guī)格說明之后,每個(gè)與會(huì)者都制定出產(chǎn)品的一整套確認(rèn)標(biāo)準(zhǔn),并把自己制定的標(biāo)準(zhǔn)提交會(huì)議討論,以創(chuàng)建出意見一致的確認(rèn)標(biāo)準(zhǔn)。最后,由一名或多名與會(huì)者根據(jù)會(huì)議成果起草完整的軟件需求規(guī)格說明書。許多突出優(yōu)點(diǎn):開發(fā)者與用戶不分彼此,齊心協(xié)力,密切合作;即時(shí)討論并求精;有能導(dǎo)出規(guī)格說明的具體步驟。
構(gòu)建原型的要點(diǎn)是,它應(yīng)該實(shí)現(xiàn)用戶看得見的功能(例如,屏幕顯示或打印報(bào)表),省略目標(biāo)系統(tǒng)的“隱含”功能(例如,修改文件)。4.快速建立軟件原型快速原型應(yīng)該具備的第一個(gè)特性是“快速”。快速原型的目的是盡快向用戶提供一個(gè)可在計(jì)算機(jī)上運(yùn)行的目標(biāo)系統(tǒng)的模型,以便使用戶和開發(fā)者在目標(biāo)系統(tǒng)應(yīng)該“做什么”這個(gè)問題上盡可能快地達(dá)成共識(shí)。因此,原型的某些缺陷是可以忽略的,只要這些缺陷不嚴(yán)重地?fù)p害原型的功能,不會(huì)使用戶對(duì)產(chǎn)品的行為產(chǎn)生誤解,就不必管它們。
構(gòu)建和修改原型的3種方法和工具:(1)第四代技術(shù)第四代技術(shù)包括眾多數(shù)據(jù)庫查詢和報(bào)表語言、程序和應(yīng)用系統(tǒng)生成器以及其他非常高級(jí)的非過程語言。第四代技術(shù)使得軟件工程師能夠快速地生成可執(zhí)行的代碼,它們是較理想的快速原型工具。(2)可重用的軟件構(gòu)件使用一組已有的軟件構(gòu)件(也稱為組件)來裝配(而不是從頭構(gòu)造)原型。軟件構(gòu)件可以是數(shù)據(jù)結(jié)構(gòu)(或數(shù)據(jù)庫),或軟件體系結(jié)構(gòu)構(gòu)件(即程序),或過程構(gòu)件(即模塊)。必須把軟件構(gòu)件設(shè)計(jì)成能在不知其內(nèi)部工作細(xì)節(jié)的條件下重用。應(yīng)該注意,現(xiàn)有的軟件可以被用作“新的或改進(jìn)的”產(chǎn)品的原型。(3)形式化規(guī)格說明和原型環(huán)境用于替代自然語言規(guī)格說明技術(shù)。形式化語言的倡導(dǎo)者正在開發(fā)交互式環(huán)境,以便可以調(diào)用自動(dòng)工具把基于形式語言的規(guī)格說明翻譯成可執(zhí)行的程序代碼,用戶能夠使用可執(zhí)行的原型代碼去進(jìn)一步精化形式化的規(guī)格說明。為了更好地理解復(fù)雜事物,人們常常采用建立事物模型的方法。所謂模型,就是為了理解事物而對(duì)事物做出的一種抽象,是對(duì)事物的一種無歧義的書面描述。模型由一組圖形符號(hào)和組織這些符號(hào)的規(guī)則組成?!?分析建模與規(guī)格說明
分析建模需求分析過程應(yīng)該建立3種模型,它們分別是數(shù)據(jù)模型、功能模型和行為模型。實(shí)體-聯(lián)系圖(E-R),描繪數(shù)據(jù)對(duì)象及數(shù)據(jù)對(duì)象之間的關(guān)系,是用于建立數(shù)據(jù)模型的圖形。數(shù)據(jù)流圖(DFD),描繪當(dāng)數(shù)據(jù)在軟件系統(tǒng)中移動(dòng)時(shí)被變換的邏輯過程,指明系統(tǒng)具有的變換數(shù)據(jù)的功能,因此,數(shù)據(jù)流圖是建立功能模型的基礎(chǔ)。狀態(tài)轉(zhuǎn)換圖(簡稱為狀態(tài)圖),指明了作為外部事件結(jié)果的系統(tǒng)行為。狀態(tài)轉(zhuǎn)換圖描繪了系統(tǒng)的各種行為模式(稱為“狀態(tài)”)和在不同狀態(tài)間轉(zhuǎn)換的方式。狀態(tài)轉(zhuǎn)換圖是行為建模的基礎(chǔ)。是需求分析階段得出的最主要的文檔。用自然語言完整、準(zhǔn)確、具體地描述:系統(tǒng)的數(shù)據(jù)要求功能需求性能需求(響應(yīng)時(shí)間、信息量速率、主存和磁盤容量、安全性)可靠性和可用性要求出錯(cuò)處理需求(對(duì)錯(cuò)誤的響應(yīng))接口需求(用戶、軟件、硬件、通信)約束(精度、工具、語言、使用的標(biāo)準(zhǔn))逆向需求(不需要做什么)
軟件需求規(guī)格說明自然語言的規(guī)格說明具有容易書寫、容易理解的優(yōu)點(diǎn),為大多數(shù)人所歡迎和采用。為了消除用自然語言書寫的軟件需求規(guī)格說明書中可能存在的不一致、歧義、含糊、不完整及抽象層次混亂等問題,也可采用用形式化方法描述用戶對(duì)軟件系統(tǒng)的需求?!?.實(shí)體-聯(lián)系圖1、概念性數(shù)據(jù)模型:描述從用戶角度看到的數(shù)據(jù)實(shí)體-聯(lián)系圖(Entity-RelationshipDiagram,ER圖)數(shù)據(jù)對(duì)象(實(shí)體)、數(shù)據(jù)對(duì)象的屬性、數(shù)據(jù)對(duì)象的聯(lián)系⑴Entities例:,
,學(xué)生
教師課程(2)Attributes例:,姓名學(xué)號(hào)(3)Relations例:學(xué)教111NMN§4.實(shí)體聯(lián)系圖教師學(xué)生學(xué)教課程職務(wù)學(xué)號(hào)姓名姓名性別性別職稱教工號(hào)ClassID成績系年級(jí)學(xué)時(shí)課名課程號(hào)例:學(xué)分教學(xué)管理的ER圖§5.數(shù)據(jù)規(guī)范化范式(NormalForms):消除數(shù)據(jù)冗余的程度
1-NF:所有屬性都是原子值,即不出現(xiàn)“表中有表”2-NF:在1-NF基礎(chǔ)上,每個(gè)非關(guān)鍵字屬性都由整個(gè)關(guān)鍵字決定(而非依賴于keyword的一部分)。3-NF:在2-NF基礎(chǔ)上,非關(guān)鍵字屬性之間無從屬關(guān)系。
狀態(tài)轉(zhuǎn)換圖(簡稱為狀態(tài)圖)通過描繪系統(tǒng)的狀態(tài)及引起系統(tǒng)狀態(tài)轉(zhuǎn)換的事件,來表示系統(tǒng)的行為。狀態(tài)圖還指明了作為特定事件的結(jié)果系統(tǒng)將做哪些動(dòng)作(例如,處理數(shù)據(jù))。因此,狀態(tài)圖提供了行為建模機(jī)制3.6狀態(tài)轉(zhuǎn)換圖狀態(tài)是任何可以被觀察到的系統(tǒng)行為模式,一個(gè)狀態(tài)代表系統(tǒng)的一種行為模式。狀態(tài)規(guī)定了系統(tǒng)對(duì)事件的響應(yīng)方式。系統(tǒng)對(duì)事件的響應(yīng),既可以是做一個(gè)(或一系列)動(dòng)作,也可以是僅僅改變系統(tǒng)本身的狀態(tài),還可以是既改變狀態(tài)又做動(dòng)作。狀態(tài)主要有:初態(tài)(即初始狀態(tài))、終態(tài)(即最終狀態(tài))和中間狀態(tài)。在一張狀態(tài)圖中只能有一個(gè)初態(tài),而終態(tài)則可以有0至多個(gè)。
狀態(tài)狀態(tài)圖可以表示系統(tǒng)循環(huán)運(yùn)行過程和系統(tǒng)單程生命期。描繪循環(huán)運(yùn)行過程時(shí),通常并不關(guān)心循環(huán)是怎樣啟動(dòng)的。描繪單程生命期時(shí),需要標(biāo)明初始狀態(tài)(系統(tǒng)啟動(dòng)時(shí)進(jìn)入初始狀態(tài))和最終狀態(tài)(系統(tǒng)運(yùn)行結(jié)束時(shí)到達(dá)最終狀態(tài))。事件是在某個(gè)特定時(shí)刻發(fā)生的事情,它是對(duì)引起系統(tǒng)做動(dòng)作或(和)從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)的外界事件的抽象。例如,內(nèi)部時(shí)鐘表明某個(gè)規(guī)定的時(shí)間段已經(jīng)過去,用戶移動(dòng)或點(diǎn)擊鼠標(biāo)等都是事件。事件就是引起系統(tǒng)做動(dòng)作或(和)轉(zhuǎn)換狀態(tài)的控制信息。
事件初態(tài)用實(shí)心圓表示,終態(tài)用一對(duì)同心圓(內(nèi)圓為實(shí)心圓)表示。中間狀態(tài)用圓角矩形表示,分上、中、下3個(gè)部分。上面部分為狀態(tài)的名稱,這部分是必須有的;中間部分為狀態(tài)變量的名字和值,這部分是可選的;下面部分是活動(dòng)表,這部分也是可選的。
符號(hào)狀態(tài)圖中使用的主要符號(hào)
語法格式如下:事件名(參數(shù)表)/動(dòng)作表達(dá)式其中,“事件名”可以是任何事件的名稱。3種標(biāo)準(zhǔn)事件:entry,exit和do。entry事件指定進(jìn)入該狀態(tài)的動(dòng)作,exit事件指定退出該狀態(tài)的動(dòng)作,而do事件則指定在該狀態(tài)下的動(dòng)作。帶箭頭的連線稱為狀態(tài)轉(zhuǎn)換,箭頭指明了轉(zhuǎn)換方向。狀態(tài)變遷通常是由事件觸發(fā)的,在表示狀態(tài)轉(zhuǎn)換的箭頭線上標(biāo)出觸發(fā)轉(zhuǎn)換的事件表達(dá)式;如果在箭頭線上未標(biāo)明事件,則表示在源狀態(tài)的內(nèi)部活動(dòng)執(zhí)行完之后自動(dòng)觸發(fā)轉(zhuǎn)換。電話系統(tǒng)的狀態(tài)圖。圖中表明,沒有人打電話時(shí)電話處于閑置狀態(tài);有人拿起聽筒則進(jìn)入撥號(hào)音狀態(tài),到達(dá)這個(gè)狀態(tài)后,電話的行為是響起撥號(hào)音并計(jì)時(shí);這時(shí)如果拿起聽筒的人改變主意不想打了,他把聽筒放下(掛斷),電話重又回到閑置狀態(tài);如果拿起聽筒很長時(shí)間不撥號(hào)(超時(shí)),則進(jìn)入超時(shí)狀態(tài);……。例子§7.圖形工具1、層次方框圖(Hierarchy)——描繪數(shù)據(jù)的結(jié)構(gòu)例:例:P.58
圖
3.5Warnier圖的一個(gè)例子§7.圖形工具法國計(jì)算機(jī)科學(xué)家Warnier提出2.Warnier圖或重復(fù)次數(shù)§7.圖形工具3、IPO圖(Input/Process/Output):簡要的算法描述1.校驗(yàn)主記錄2.校驗(yàn)事務(wù)記錄3.更新主記錄舊的主文件事務(wù)文件有效的主記錄有效的事務(wù)記錄更新后的主文件輸出O處理P輸入IIPO表系統(tǒng):作者:
模塊:日期:編號(hào):被調(diào)用:調(diào)用:
輸入:輸出:處理:局部數(shù)據(jù)元素:注釋:改進(jìn)的IPO圖的形式§5.驗(yàn)證需求(RequirementsValidation)方法:
人工審查
初步用戶手冊
Prototyping
使用軟件工具——完整性、一致性把軟件工程使用的方法劃分成非形式化、半形式化和形式化3類。用自然語言描述需求規(guī)格說明,是典型的非形式化方法。用數(shù)據(jù)流圖或?qū)嶓w-聯(lián)系圖建立模型,是典型的半形式化方法。所謂形式化方法,是描述系統(tǒng)性質(zhì)的基于數(shù)學(xué)的技術(shù),也就是說,如果一種方法有堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ),那么它就是形式化的。用自然語言書寫的系統(tǒng)規(guī)格說明書,可能存在矛盾、二義性、含糊性、不完整性及抽象層次混亂等問題。所謂矛盾是指一組相互沖突的陳述。二義性是指讀者可以用不同方式理解的陳述。1概述
非形式化方法的缺點(diǎn)系統(tǒng)規(guī)格說明書不可避免地會(huì)出現(xiàn)含糊性。不完整性可能是在系統(tǒng)規(guī)格說明中最常遇到的問題之一。抽象層次混亂是指在非常抽象的陳述中混進(jìn)了一些關(guān)于細(xì)節(jié)的低層次陳述。這樣的規(guī)格說明書使得讀者很難了解系統(tǒng)的整體功能結(jié)構(gòu)。人們把數(shù)學(xué)引入軟件開發(fā)過程,創(chuàng)造了基于數(shù)學(xué)的形式化方法。在開發(fā)大型軟件系統(tǒng)的過程中應(yīng)用數(shù)學(xué),能夠帶來下述的幾個(gè)優(yōu)點(diǎn):數(shù)學(xué)最有用的一個(gè)性質(zhì)是,它能夠簡潔準(zhǔn)確地描述物理現(xiàn)象、對(duì)象或動(dòng)作的結(jié)果,因此是理想的建模工具。數(shù)學(xué)特別適合于表示狀態(tài),也就是表示“做什么”。形式化方法的優(yōu)點(diǎn)可以在不同的軟件工程活動(dòng)之間平滑地過渡。不僅功能規(guī)格說明,而且系統(tǒng)設(shè)計(jì)也可以用數(shù)學(xué)表達(dá),當(dāng)然,程序代碼也是一種數(shù)學(xué)符號(hào)(雖然是一種相當(dāng)繁瑣、冗長的數(shù)學(xué)符號(hào))。它提供了高層確認(rèn)的手段??梢允褂脭?shù)學(xué)方法證明,設(shè)計(jì)符合規(guī)格說明,程序代碼正確地實(shí)現(xiàn)了設(shè)計(jì)結(jié)果。對(duì)形式化方法也應(yīng)該“一分為二”,既不要過分夸大它的優(yōu)點(diǎn)也不要一概排斥。為了更好地發(fā)揮這種方法的長處。
應(yīng)用形式化方法的準(zhǔn)則(1)應(yīng)該選用適當(dāng)?shù)谋硎痉椒ā?2)應(yīng)該形式化,但不要過分形式化。(3)應(yīng)該估算成本。使用形式化方法,需要進(jìn)行大量的培訓(xùn)。估算所需的成本。(4)應(yīng)該有形式化方法顧問隨時(shí)提供咨詢。需要專家指導(dǎo)和培訓(xùn)。
(5)不應(yīng)該放棄傳統(tǒng)的開發(fā)方法。把形式化方法和結(jié)構(gòu)化方法或面向?qū)ο蠓椒善饋硎强赡艿模¢L補(bǔ)短。(6)應(yīng)該建立詳盡的文檔。建議使用自然語言注釋形式化的規(guī)格說明書,以幫助用戶和維護(hù)人員理解系統(tǒng)。(7)不應(yīng)該放棄質(zhì)量標(biāo)準(zhǔn)。形式化方法并不能保證軟件的正確性,有助于開發(fā)出高質(zhì)量軟件的一種手段。必須一如既往地實(shí)施其他質(zhì)量保證活動(dòng)。(8)不應(yīng)該盲目依賴形式化方法。是眾多工具中的一種。形式化方法并不能保證開發(fā)出的軟件絕對(duì)正確,必須用其他方法(例如,評(píng)審、測試)來驗(yàn)證軟件正確性。(9)應(yīng)該測試、測試再測試。形式化方法不僅不能保證軟件系統(tǒng)絕對(duì)正確,也不能證明系統(tǒng)性能或其他質(zhì)量指標(biāo)符合需要,因此,軟件測試的重要性并沒有降低。(10)應(yīng)該重用。即使采用了形式化方法,軟件重用仍然是降低軟件成本和提高軟件質(zhì)量的惟一合理的方法。而且用形式化方法說明的軟件構(gòu)件具有清晰定義的功能和接口,使得它們有更好的可重用性。簡單例子。一個(gè)保險(xiǎn)箱上裝了一個(gè)復(fù)合鎖,鎖有三個(gè)位置,分別標(biāo)記為1、2、3,轉(zhuǎn)盤可向左(L)或向右(R)轉(zhuǎn)動(dòng)。這樣,在任意時(shí)刻轉(zhuǎn)盤都有6種可能的運(yùn)動(dòng),即1L、1R、2L、2R、3L和3R。保險(xiǎn)箱的組合密碼是1L、3R、2L,轉(zhuǎn)盤的任何其他運(yùn)動(dòng)都將引起報(bào)警。2有窮狀態(tài)機(jī)
概念
保險(xiǎn)箱的狀態(tài)轉(zhuǎn)換圖一個(gè)有窮狀態(tài)機(jī)包括下述5個(gè)部分:狀態(tài)集J、輸入集K、由當(dāng)前狀態(tài)和當(dāng)前輸入確定下一個(gè)狀態(tài)(次態(tài))的轉(zhuǎn)換函數(shù)T、初始態(tài)S和終態(tài)集F。對(duì)于保險(xiǎn)箱的例子,相應(yīng)的有窮狀態(tài)機(jī)的各部分如下。狀態(tài)集J:{保險(xiǎn)箱鎖定,A,B,保險(xiǎn)箱解鎖,報(bào)警}。輸入集K:{1L,1R,2L,2R,3L,3R}。轉(zhuǎn)換函數(shù)T:如表4.1所示。初始態(tài)S:保險(xiǎn)箱鎖定。終態(tài)集F:{保險(xiǎn)箱解鎖,報(bào)警}。如果使用更形式化的術(shù)語,一個(gè)有窮狀態(tài)機(jī)可以表示為一個(gè)5元組(J,K,T,S,F(xiàn)),其中:J是一個(gè)有窮的非空狀態(tài)集;K是一個(gè)有窮的非空輸入集;T是一個(gè)從(J-F)×K到J的轉(zhuǎn)換函數(shù);S∈J,是一個(gè)初始狀態(tài);F
J,是終態(tài)集。有窮狀態(tài)機(jī)的概念在計(jì)算機(jī)系統(tǒng)中應(yīng)用得非常廣泛。例如,每個(gè)菜單驅(qū)動(dòng)的用戶界面都是一個(gè)有窮狀態(tài)機(jī)的實(shí)現(xiàn)。一個(gè)菜單的顯示和一個(gè)狀態(tài)相對(duì)應(yīng),鍵盤輸入或用鼠標(biāo)選擇一個(gè)圖標(biāo)是使系統(tǒng)進(jìn)入其他狀態(tài)的一個(gè)事件。狀態(tài)的每個(gè)轉(zhuǎn)換都具有下面的形式:當(dāng)前狀態(tài)〔菜單〕+事件〔所選擇的項(xiàng)〕下個(gè)狀態(tài)。對(duì)有窮狀態(tài)機(jī)做一個(gè)很有用的擴(kuò)展,即在前述的5元組中加入第6個(gè)組件——謂詞集P,從而把有窮狀態(tài)機(jī)擴(kuò)展為一個(gè)6元組,其中每個(gè)謂詞都是系統(tǒng)全局狀態(tài)Y的函數(shù)。轉(zhuǎn)換函數(shù)T現(xiàn)在是一個(gè)從(J-F)×K×P到J的函數(shù)。現(xiàn)在的轉(zhuǎn)換規(guī)則形式如下:當(dāng)前狀態(tài)〔菜單〕+事件〔所選擇的項(xiàng)〕+謂詞下個(gè)狀態(tài)。用有窮狀態(tài)機(jī)技術(shù)表達(dá)系統(tǒng)的規(guī)格說明,給出電梯系統(tǒng)的規(guī)格說明。首先給出用自然語言描述的對(duì)電梯系統(tǒng)的需求:在一幢m層的大廈中需要一套控制n部電梯的產(chǎn)品,要求這n部電梯按照約束條件C1,C2和C3在樓層間移動(dòng)。C1:每部電梯內(nèi)有m個(gè)按鈕,每個(gè)按鈕代表一個(gè)樓層。當(dāng)按下一個(gè)按鈕時(shí)該按鈕指示燈亮,同時(shí)電梯駛向相應(yīng)的樓層,到達(dá)按鈕指定的樓層時(shí)指示燈熄滅。
例子C2:除了大廈的最低層和最高層之外,每層樓都有兩個(gè)按鈕分別請求電梯上行和下行。這兩個(gè)按鈕之一被按下時(shí)相應(yīng)的指示燈亮,當(dāng)電梯到達(dá)此樓層時(shí)燈熄滅,電梯向要求的方向移動(dòng)。C3:當(dāng)對(duì)電梯沒有請求時(shí),它關(guān)門并停在當(dāng)前樓層。現(xiàn)在使用一個(gè)擴(kuò)展的有窮狀態(tài)機(jī)對(duì)本產(chǎn)品進(jìn)行規(guī)格說明。這個(gè)問題中有兩個(gè)按鈕集。n部電梯中的每一部都有m個(gè)按鈕,一個(gè)按鈕對(duì)應(yīng)一個(gè)樓層。因?yàn)檫@m×n個(gè)按鈕都在電梯中,所以稱它們?yōu)殡娞莅粹o。此外,每層樓有兩個(gè)按鈕,一個(gè)請求向上,另一個(gè)請求向下,這些按鈕稱為樓層按鈕。電梯按鈕的狀態(tài)轉(zhuǎn)換圖如圖4.2所示。令EB(e,f)表示按下電梯e內(nèi)的按鈕并請求到f層去。EB(e,f)有兩個(gè)狀態(tài),分別是按鈕發(fā)光(打開)和不發(fā)光(關(guān)閉)。更精確地說,狀態(tài)是:EBON(e,f):電梯按鈕(e,f)打開EBOFF(e,f):電梯按鈕(e,f)關(guān)閉如果電梯按鈕(e,f)發(fā)光且電梯到達(dá)f層,該按鈕將熄滅。相反如果按鈕熄滅,則按下它時(shí),按鈕將發(fā)光。上述描述中包含了兩個(gè)事件,它們分別是:EBP(e,f):電梯按鈕(e,f)被按下EAF(e,f):電梯e到達(dá)f層
電梯按鈕的狀態(tài)轉(zhuǎn)換圖
EBON(e,f):電梯按鈕(e,f)打開EBOFF(e,f):電梯按鈕(e,f)關(guān)閉EBP(e,f):電梯按鈕(e,f)被按下EAF(e,f):電梯e到達(dá)f層為了定義與這些事件和狀態(tài)相聯(lián)系的狀態(tài)轉(zhuǎn)換規(guī)則,需要一個(gè)謂詞V(e,f),它的含義如下:V(e,f):電梯e停在f層如果電梯按鈕(e,f)處于關(guān)閉狀態(tài)〔當(dāng)前狀態(tài)〕,而且電梯按鈕(e,f)被按下〔事件〕,而且電梯e不在f層〔謂詞〕,則該電梯按鈕打開發(fā)光〔下個(gè)狀態(tài)〕。狀態(tài)轉(zhuǎn)換規(guī)則的形式化描述如下:EBOFF(e,f)+EBP(e,f)+notV(e,f)
EBON(e,f)反之,如果電梯到達(dá)f層,而且電梯按鈕是打開的,于是它就會(huì)熄滅。這條轉(zhuǎn)換規(guī)則可以形式化地表示為:EBON(e,f)+EAF(e,f)
EBOFF(e,f)接下來考慮樓層按鈕。令FB(d,f)表示f層請求電梯向d方向運(yùn)動(dòng)的按鈕,樓層按鈕FB(d,f)的狀態(tài)轉(zhuǎn)換圖如圖4.3所示。樓層按鈕的狀態(tài)如下:FBON(d,f):樓層按鈕(d,f)打開FBOFF(d,f):樓層按鈕(d,f)關(guān)閉如果樓層按鈕已經(jīng)打開,而且一部電梯到達(dá)f層,則按鈕關(guān)閉。反之,如果樓層按鈕原來是關(guān)閉的,被按下后該按鈕將打開。這段敘述中包含了以下兩個(gè)事件。樓層按鈕的狀態(tài)轉(zhuǎn)換圖FBP(d,f):樓層按鈕(d,f)被按下EAF(1…n,f):電梯1或…或n到達(dá)f層其中1…n表示或?yàn)?或?yàn)?…或?yàn)閚。FBON(d,f):樓層按鈕(d,f)打開FBOFF(d,f):樓層按鈕(d,f)關(guān)閉
為了定義與這些事件和狀態(tài)相聯(lián)系的狀態(tài)轉(zhuǎn)換規(guī)則,同樣也需要一個(gè)謂詞,它是S(d,e,f),它的定義如下。S(d,e,f):電梯e停在f層并且移動(dòng)方向由d確定為向上(d=U)或向下(d=D)或待定(d=N)。這個(gè)謂詞實(shí)際上是一個(gè)狀態(tài),形式化方法允許把事件和狀態(tài)作為謂詞對(duì)待。使用謂詞S(d,e,f),形式化轉(zhuǎn)換規(guī)則為:FBOFF(d,f)+FBP(d,f)+notS(d,1…n,f)
FBON(d,f)FBON(d,f)+EAF(1…n,f)+S(d,1…n,f)
FBOFF(d,f)其中,d=UorD。也就是說,如果在f層請求電梯向d方向運(yùn)動(dòng)的樓層按鈕處于關(guān)閉狀態(tài),現(xiàn)在該按鈕被按下,并且當(dāng)時(shí)沒有正停在f層準(zhǔn)備向d方向移動(dòng)的電梯,則該樓層按鈕打開。反之,如果樓層按鈕已經(jīng)打開,且至少有一部電梯到達(dá)f層,該部電梯將朝d方向運(yùn)動(dòng),則按鈕將關(guān)閉。在討論電梯按鈕狀態(tài)轉(zhuǎn)換規(guī)則時(shí)定義的謂詞V(e,f),可以用謂詞S(d,e,f)重新定義如下:V(e,f)=S(U,e,f)orS(D,e,f)orS(N,e,f)定義電梯按鈕和樓層按鈕的狀態(tài)都是很簡單、直觀的事情?,F(xiàn)在轉(zhuǎn)向討論電梯的狀態(tài)及其轉(zhuǎn)換規(guī)則,就會(huì)出現(xiàn)一些復(fù)雜的情況。一個(gè)電梯狀態(tài)實(shí)質(zhì)上包含許多子狀態(tài)。下面定義電梯的3個(gè)狀態(tài):M(d,e,f):電梯e正沿d方向移動(dòng),即將到達(dá)的是第f層S(d,e,f):電梯e停在f層,將朝d方向移動(dòng)(尚未關(guān)門)W(e,f):電梯e在f層等待(已關(guān)門)其中S(d,e,f)狀態(tài)已在討論樓層按鈕時(shí)定義過,但是,現(xiàn)在的定義更完備一些。圖4.4是電梯的狀態(tài)轉(zhuǎn)換圖。3個(gè)電梯停止?fàn)顟B(tài)S(U,e,f)、S(N,e,f)和S(D,e,f)已被組合成一個(gè)大的狀態(tài),這樣做的目的是減少狀態(tài)總數(shù)以簡化流圖。圖4.4中包含了下述3個(gè)可觸發(fā)狀態(tài)發(fā)生改變的事件。DC(e,f):電梯e在樓層f關(guān)上門ST(e,f):電梯e靠近f層時(shí)觸發(fā)傳感器,電梯控制器決定在當(dāng)前樓層電梯是否停下RL:電梯按鈕或樓層按鈕被按下進(jìn)入打開狀態(tài),登錄需求
電梯的狀態(tài)轉(zhuǎn)換圖S(d,e,f):電梯e停在f層并且移動(dòng)方向由d確定RL:電梯按鈕或樓層按鈕被按下進(jìn)入打開狀態(tài)最后,給出電梯的狀態(tài)轉(zhuǎn)換規(guī)則。為簡單起見,這里給出的規(guī)則僅發(fā)生在關(guān)門之時(shí)。S(U,e,f)+DC(e,f)
M(U,e,f+1)S(D,e,f)+DC(e,f)
M(D,e,f-1)S(N,e,f)+DC(e,f)
W(e,f)第一條規(guī)則表明,如果電梯e停在f層準(zhǔn)備向上移動(dòng),且門已經(jīng)關(guān)閉,則電梯將向上一樓層移動(dòng)。第二條和第三條規(guī)則,分別對(duì)應(yīng)于電梯即將下降或者沒有待處理的請求的情況。有窮狀態(tài)機(jī)方法采用了一種簡單的格式來描述規(guī)格說明:當(dāng)前狀態(tài)+事件+謂詞下個(gè)狀態(tài)這種形式的規(guī)格說明易于書寫、易于驗(yàn)證,而且可以比較容易地把它轉(zhuǎn)變成設(shè)計(jì)或程序代碼。事實(shí)上,可以開發(fā)一個(gè)CASE工具把一個(gè)有窮狀態(tài)機(jī)規(guī)格說明直接轉(zhuǎn)變?yōu)樵创a。維護(hù)可以通過重新轉(zhuǎn)變來實(shí)現(xiàn),也就是說,如果需要一個(gè)新的狀態(tài)或事件,首先修改規(guī)格說明,然后直接由新的規(guī)格說明生成新版本的產(chǎn)品。評(píng)價(jià)有窮狀態(tài)機(jī)方法比數(shù)據(jù)流圖技術(shù)更精確,而且和它一樣易于理解。不過,它也有缺點(diǎn):在開發(fā)一個(gè)大系統(tǒng)時(shí)三元組(即狀態(tài)、事件、謂詞)的數(shù)量會(huì)迅速增長。此外,和數(shù)據(jù)流圖方法一樣,形式化的有窮狀態(tài)機(jī)方法也沒有處理定時(shí)需求。下節(jié)將介紹的Petri網(wǎng)技術(shù),是一種可處理定時(shí)問題的形式化方法。并發(fā)系統(tǒng)中遇到的一個(gè)主要問題是定時(shí)問題。如同步問題、競爭條件以及死鎖問題。定時(shí)問題通常是由不好的設(shè)計(jì)或有錯(cuò)誤的實(shí)現(xiàn)引起的,而這樣的設(shè)計(jì)或?qū)崿F(xiàn)通常又是由不好的規(guī)格說明造成的。如果規(guī)格說明不恰當(dāng),則有導(dǎo)致不完善的設(shè)計(jì)或?qū)崿F(xiàn)的危險(xiǎn)。用于確定系統(tǒng)中隱含的定時(shí)問題的一種有效技術(shù)是Petri網(wǎng),這種技術(shù)的一個(gè)很大的優(yōu)點(diǎn)是它也可以用于設(shè)計(jì)中。Petri網(wǎng)
概念Petri網(wǎng)是由CarlAdamPetri發(fā)明的。Petri網(wǎng)在計(jì)算機(jī)科學(xué)中也得到廣泛的應(yīng)用,例如,在性能評(píng)價(jià)、操作系統(tǒng)和軟件工程等領(lǐng)域,Petri網(wǎng)應(yīng)用得都比較廣泛。特別是已經(jīng)證明,用Petri網(wǎng)可以有效地描述并發(fā)活動(dòng)。Petri網(wǎng)包含4種元素:一組位置P、一組轉(zhuǎn)換T、輸入函數(shù)I以及輸出函數(shù)O。Petri網(wǎng)的組成短直線代表轉(zhuǎn)換圓圈代表位置輸入函數(shù)輸出函數(shù)一組位置P為{P1,P2,P3,P4},在圖中用圓圈代表位置。一組轉(zhuǎn)換T為{t1,t2},在圖中用短直線表示轉(zhuǎn)換。兩個(gè)用于轉(zhuǎn)換的輸入函數(shù),用由位置指向轉(zhuǎn)換的箭頭表示,它們是:I(t1)={P2,P4}I(t2)={P2}兩個(gè)用于轉(zhuǎn)換的輸出函數(shù),用由轉(zhuǎn)換指向位置的箭頭表示,它們是:O(t1)={P1}O(t2)={P3,P3}注意,輸出函數(shù)O(t2)中有兩個(gè)P3,是因?yàn)橛袃蓚€(gè)箭頭由t2指向P3。更形式化的Petri網(wǎng)結(jié)構(gòu),是一個(gè)四元組C=(P,T,I,O)。其中,P={P1,…,Pn}是一個(gè)有窮位置集,n≥0。T={t1,…,tm}是一個(gè)有窮轉(zhuǎn)換集,m≥0,且T和P不相交。I:T→P∞為輸入函數(shù),是由轉(zhuǎn)換到位置無序單位組(bags)的映射。O:T→P∞為輸出函數(shù),是由轉(zhuǎn)換到位置無序單位組的映射。Petri網(wǎng)的標(biāo)記是在Petri網(wǎng)中權(quán)標(biāo)(token,也稱令牌)的分配。有4個(gè)權(quán)標(biāo),P1(1)中,P2(2),P3(0)P4(1)。上述標(biāo)記可以用向量(1,2,0,1)表示。Petri網(wǎng)在轉(zhuǎn)換t1被激發(fā)后的情況Petri網(wǎng)在轉(zhuǎn)換t1被激發(fā)后的情況(2,1,0,0)(1,2,0,1)由于P2和P4中有權(quán)標(biāo),因此t1啟動(dòng)(即被激發(fā))。通常,當(dāng)每個(gè)輸入位置所擁有的權(quán)標(biāo)數(shù)大于等于從該位置到轉(zhuǎn)換的線數(shù)時(shí),就允許轉(zhuǎn)換。當(dāng)t1被激發(fā)時(shí),P2和P4上各有一個(gè)權(quán)標(biāo)被移出,而P1上則增加一個(gè)權(quán)標(biāo)。Petri網(wǎng)中權(quán)標(biāo)總數(shù)不是固定的,在這個(gè)例子中兩個(gè)權(quán)標(biāo)被移出,而P1上只能增加一個(gè)權(quán)標(biāo)。圖中P2上有權(quán)標(biāo),因此t2也可以被激發(fā)。當(dāng)t2被激發(fā)時(shí),P2上將移走一個(gè)權(quán)標(biāo),而P3上新增加兩個(gè)權(quán)標(biāo)。Petri網(wǎng)具有非確定性,也就是說,如果數(shù)個(gè)轉(zhuǎn)換都達(dá)到了激發(fā)條件,則其中任意一個(gè)都可以被激發(fā)。圖4.6所示Petri網(wǎng)的標(biāo)記為(1,2,0,1),t1和t2都可以被激發(fā)。假設(shè)t1被激發(fā)了,則結(jié)果如圖4.7所示,標(biāo)記為(2,1,0,0)。此時(shí),只有t2可以被激發(fā)。如果t2也被激發(fā)了,則權(quán)標(biāo)從P2中移出,兩個(gè)新權(quán)標(biāo)被放在P3上,結(jié)果如圖4.8所示,標(biāo)記為(2,0,2,0)。Petri網(wǎng)在轉(zhuǎn)換t2被激發(fā)后的情況(2,1,0,0)(2,0,2,0)
含禁止線的Petri網(wǎng)禁止線是用一個(gè)小圓圈而不是用箭頭標(biāo)記的輸入線。通常,當(dāng)每個(gè)輸入線上至少有一個(gè)權(quán)標(biāo),而禁止線上沒有權(quán)標(biāo)的時(shí)候,相應(yīng)的轉(zhuǎn)換才是允許的更形式化地說,Petri網(wǎng)C=(P,T,I,O)中的標(biāo)記M,是由一組位置P到一組非負(fù)整數(shù)的映射:M:P→{0,1,2,…}這樣,帶有標(biāo)記的Petri網(wǎng)成為一個(gè)五元組(P,T,I,O,M)。對(duì)Petri網(wǎng)的一個(gè)重要擴(kuò)充是加入禁止線。禁止線是用一個(gè)小圓圈而不是用箭頭標(biāo)記的輸入線。通常,當(dāng)每個(gè)輸入線上至少有一個(gè)權(quán)標(biāo),而禁止線上沒有權(quán)標(biāo)的時(shí)候,相應(yīng)的轉(zhuǎn)換才是允許的?,F(xiàn)在把Petri網(wǎng)應(yīng)用于電梯問題。當(dāng)用Petri網(wǎng)表示電梯系統(tǒng)的規(guī)格說明時(shí),每個(gè)樓層用一個(gè)位置Ff代表(1≤f≤m),在Petri網(wǎng)中電梯是用一個(gè)權(quán)標(biāo)代表的。在位置Ff上有權(quán)標(biāo),表示在樓層f上有電梯。1.電梯按鈕電梯問題的第一個(gè)約束條件描述了電梯按鈕的行為,現(xiàn)在復(fù)述一下這個(gè)約束條件。
例子第一條約束C1:每部電梯有m個(gè)按鈕,每層對(duì)應(yīng)一個(gè)按鈕。當(dāng)按下一個(gè)按鈕時(shí)該按鈕指示燈亮,指示電梯移往相應(yīng)的樓層。當(dāng)電梯到達(dá)指定的樓層時(shí),按鈕將熄滅。為了用Petri網(wǎng)表達(dá)電梯按鈕的規(guī)格說明,在Petri網(wǎng)中還必須設(shè)置其他的位置。電梯中樓層f的按鈕,在Petri網(wǎng)中用位置EBf表示(1≤f≤m)。在EBf上有一個(gè)權(quán)標(biāo),就表示電梯內(nèi)樓層f的按鈕被按下了。電梯按鈕只有在第一次被按下時(shí)才會(huì)由暗變亮,以后再按它則只會(huì)被忽略。Petri網(wǎng)準(zhǔn)確地描述了電梯按鈕的行為規(guī)律。首先,假設(shè)按鈕沒有發(fā)亮,顯然在位置EBf上沒有權(quán)標(biāo),從而在存在禁止線的情況下,轉(zhuǎn)換“EBf被按下”是允許發(fā)生的。假設(shè)現(xiàn)在按下按鈕,則轉(zhuǎn)換被
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游業(yè)智慧旅游服務(wù)方案
- 駕校合作協(xié)議書
- 電商大促物流配送協(xié)議
- 2025年湘潭貨運(yùn)b2從業(yè)資格證考試卷
- 二零二五年度環(huán)保材料辦公用品生產(chǎn)OEM定制協(xié)議
- 航空貨運(yùn)司機(jī)派遣合同
- 商業(yè)地塊投資居間協(xié)議
- 女方有外遇離婚協(xié)議
- 金融行業(yè)數(shù)字貨幣研究方案
- 修路合同合作協(xié)議
- 《新能源汽車技術(shù)》課件-第二章 動(dòng)力電池
- 拘留所被拘留人員管理教育
- 河南省天一大聯(lián)考2024-2025學(xué)年高三上學(xué)期1月期末地理含答案
- 北京市朝陽區(qū)2025下半年事業(yè)單位招聘149人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024-2025學(xué)年成都市高一上英語期末考試題(含答案和音頻)
- 三坐標(biāo)考試試題和答案
- 數(shù)字金融 遠(yuǎn)程音視頻手機(jī)銀行技術(shù)規(guī)范
- 《中藥調(diào)劑技術(shù)》課件- 處方調(diào)配
- NB-T 10609-2021 水電工程攔漂排設(shè)計(jì)規(guī)范
- 藝術(shù)課程標(biāo)準(zhǔn)(2022年版)
- 衛(wèi)生部手術(shù)分級(jí)目錄(2023年1月份修訂)
評(píng)論
0/150
提交評(píng)論