- 軍用軟件工程
- 黃震宇等
- 3567字
- 2020-07-23 14:21:38
1.1 軟件和軟件危機(jī)
1.1.1 軟件的概念和特點(diǎn)
軟件是計(jì)算機(jī)系統(tǒng)中與硬件相互依存的另一部分,它是包括程序、數(shù)據(jù)及其相關(guān)文檔的完整集合。其中,程序是按事先設(shè)計(jì)的功能和性能要求執(zhí)行的指令序列;數(shù)據(jù)是使程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開發(fā)、維護(hù)和使用有關(guān)的圖文資料。
軟件是邏輯部件,相對傳統(tǒng)的工業(yè)產(chǎn)品,具有其獨(dú)特性,主要表現(xiàn)在以下方面:
(1)軟件是一種邏輯實(shí)體,而不是具體的物理實(shí)體。因而它具有抽象性。這個(gè)特點(diǎn)使它和計(jì)算機(jī)硬件或其他工程對象有明顯的差別。人們可以把它記錄在介質(zhì)上,但卻無法看到軟件的形態(tài),必須通過觀察、分析、思考、判斷,去了解它的功能、性能及其他特性。
(2)軟件的生產(chǎn)與硬件不同,它沒有明顯的制造過程。也不象硬件那樣,一旦研制成功,可以重復(fù)制造,并在制造過程中進(jìn)行質(zhì)量控制,以保證產(chǎn)品的質(zhì)量。而軟件是通過人們的智力活動,把知識與技術(shù)轉(zhuǎn)化成信息的一種產(chǎn)品。一旦某一軟件項(xiàng)目研制成功,就可以大量地復(fù)制同一內(nèi)容的副本。所以控制軟件的質(zhì)量,必須著重在軟件開發(fā)方面下功夫。
(3)在軟件的運(yùn)行和使用期間,沒有硬件那樣的機(jī)械磨損和老化問題。在軟件研制成功后,為了改正軟件中的錯誤和彌補(bǔ)缺陷、提升軟件功能和性能、適應(yīng)環(huán)境變化,需要持續(xù)對軟件進(jìn)行改進(jìn)和完善,所以軟件的維護(hù)比硬件的維護(hù)要復(fù)雜得多,與硬件的維修有著本質(zhì)的差別。
(4)軟件的開發(fā)和運(yùn)行常常受計(jì)算機(jī)系統(tǒng)的限制,它對計(jì)算機(jī)系統(tǒng)有著不同程度的依賴。軟件不能完全擺脫硬件單獨(dú)活動,在軟件的開發(fā)和運(yùn)行中必須以硬件提供的條件為依據(jù)。有的軟件依賴于某個(gè)操作系統(tǒng),為了消除這種依賴性,軟件開發(fā)人員在軟件開發(fā)中提出了軟件移植的問題,并且把軟件的可移植性作為衡量軟件質(zhì)量的因素之一。
(5)軟件的開發(fā)至今尚未完全擺脫手工藝的開發(fā)方式。由于傳統(tǒng)的手工藝開發(fā)方式仍然占據(jù)統(tǒng)治地位,開發(fā)的效率自然受到很大的限制。為此,人們在軟件技術(shù)方面做了許多卓有成效的工作,提出了許多新的開發(fā)方法,如充分利用現(xiàn)成軟件的復(fù)用技術(shù)、自動生成技術(shù),也研制了一些有效的軟件開發(fā)工具或軟件開發(fā)環(huán)境。
(6)軟件本身是復(fù)雜的。軟件的復(fù)雜性可能來自它所反映的實(shí)際問題的復(fù)雜性,也可能來自程序邏輯結(jié)構(gòu)的復(fù)雜性。軟件開發(fā),特別是應(yīng)用軟件的開發(fā)常常涉及其他領(lǐng)域的專業(yè)知識,這對軟件開發(fā)人員提出了很高的要求。
(7)軟件成本昂貴。軟件的研制工作需要投入大量的、復(fù)雜的、高強(qiáng)度的腦力勞動,它的成本比較高。而且,也并非在所有的軟件開發(fā)都能成功。
(8)許多軟件工作涉及社會因素。許多軟件的開發(fā)和運(yùn)行涉及機(jī)構(gòu)、體制及管理方式等問題,甚至涉及人們的傳統(tǒng)觀念和心理問題,這些問題直接影響項(xiàng)目的成敗。
1.1.2 軟件的發(fā)展歷程
20世紀(jì)40年代中期世界上出現(xiàn)了第一臺計(jì)算機(jī),自此就有了程序的概念。其后軟件經(jīng)過幾十年的發(fā)展,經(jīng)歷了3個(gè)發(fā)展階段:
(1)程序設(shè)計(jì)階段,20世紀(jì)40年代至60年代。
(2)程序系統(tǒng)階段,20世紀(jì)60年代至70年代。
(3)軟件工程階段,20世紀(jì)70年代以后。
表1.1對3個(gè)軟件發(fā)展階段的特點(diǎn)進(jìn)行了比較。
表1.1 軟件發(fā)展階段的特點(diǎn)比較

續(xù)表

從表 1.1 中可以看到,幾十年來軟件的根本變化主要體現(xiàn)在以下幾個(gè)方面:
(1)人們改變了對軟件的看法。20世紀(jì)50年代到60年代時(shí),程序設(shè)計(jì)曾經(jīng)被看成一種任意發(fā)揮、創(chuàng)造才能的技術(shù)領(lǐng)域。當(dāng)時(shí)人們認(rèn)為,寫出的程序只要能在計(jì)算機(jī)上得出正確的結(jié)果,程序的寫法可以不受任何約束。隨著計(jì)算機(jī)的廣泛使用,人們要求這些程序容易看懂、容易使用,并且容易修改和擴(kuò)充。于是,程序便從按個(gè)人意圖創(chuàng)造的“藝術(shù)品”轉(zhuǎn)變?yōu)槟鼙粡V大用戶接受的工程化產(chǎn)品。
(2)軟件的需求是軟件發(fā)展的動力。早期的程序開發(fā)者只是為了滿足自己的需要,這種自給自足的生產(chǎn)方式仍然是其低級階段的表現(xiàn)。進(jìn)入軟件工程階段以后,軟件開發(fā)的成果具有社會屬性,它要在市場中流通以滿足廣大用戶的需要。
(3)軟件工作的范圍發(fā)生變化。軟件開發(fā)從只考慮程序的編寫擴(kuò)展到涉及整個(gè)軟件生存周期,包括軟件的需求分析、設(shè)計(jì)編碼、測試驗(yàn)證、維護(hù)等技術(shù)工作,以及人員、規(guī)模、進(jìn)度、質(zhì)量、風(fēng)險(xiǎn)等項(xiàng)目管理內(nèi)容。
1.1.3 軟件危機(jī)
在軟件技術(shù)發(fā)展的第二階段,隨著計(jì)算機(jī)硬件技術(shù)的進(jìn)步,要求軟件能與之相適應(yīng)。然而,軟件技術(shù)的進(jìn)步一直未能滿足形勢發(fā)展提出的要求,軟件質(zhì)量得不到保證,軟件成本不斷上升,軟件開發(fā)的生產(chǎn)率無法提高。這些問題積累起來,形成了日益尖銳的矛盾,這就導(dǎo)致了軟件危機(jī)。
早在20世紀(jì)60年代末,美國國防部和軟件界有關(guān)人士首先提出了“軟件危機(jī)”的警告。軟件危機(jī)主要體現(xiàn)在以下幾個(gè)方面:
(1)難以正確估計(jì)軟件開發(fā)的成本和進(jìn)度,軟件研制成為武器裝備研制進(jìn)度延誤、研制經(jīng)費(fèi)超支和物資浪費(fèi)的主要因素。
(2)軟件質(zhì)量不高、不可靠,用戶經(jīng)常不滿意“已完成”的軟件系統(tǒng)。
(3)沒有適當(dāng)?shù)奈臋n來記錄軟件開發(fā)過程中的信息及變化,軟件常常不可維護(hù)。
(4)軟件生產(chǎn)率越來越低等。
長期以來軟件危機(jī)一直存在,幾乎每個(gè)重大項(xiàng)目的失敗,問題往往都可以歸結(jié)到風(fēng)險(xiǎn)最高的部件——軟件,軟件問題已成為引起武器系統(tǒng)交付延遲、系統(tǒng)故障失效的主要原因。美國國防部軟件研究計(jì)劃的負(fù)責(zé)人回顧 82 個(gè)大型軍事采辦計(jì)劃時(shí),發(fā)現(xiàn)大多數(shù)軟件研制項(xiàng)目比計(jì)劃進(jìn)度推遲約 20 個(gè)月完成,推遲項(xiàng)目的數(shù)量是非軟件密集項(xiàng)目計(jì)劃的 3 倍,該負(fù)責(zé)人還說:“國防部由于未能解決軟件問題受到了巨大的懲罰,懲罰不僅是軟件推出的時(shí)間推遲,而且這使作戰(zhàn)能力大打折扣。”
軟件危機(jī)產(chǎn)生的原因,有客觀上的,也有主觀上的,主要包括以下幾個(gè)方面:
(1)軟件不同于硬件,它是計(jì)算機(jī)系統(tǒng)的邏輯部件而不是物理部件。在寫出程序代碼并在計(jì)算機(jī)上試運(yùn)行之前,軟件開發(fā)過程的進(jìn)展情況較難衡量。很難檢驗(yàn)軟件開發(fā)的正確性,且軟件開發(fā)的質(zhì)量也較難評價(jià)。因此,控制軟件開發(fā)過程相當(dāng)困難。此外,軟件維護(hù)常常意味著修改原來的設(shè)計(jì)。這樣,維護(hù)的費(fèi)用十分驚人,客觀上使得軟件較難維護(hù)。
(2)軟件開發(fā)的過程是多人分工合作,分階段完成的過程,參與人員之間的溝通和配合十分重要。但是,相當(dāng)多的軟件開發(fā)人員對軟件的開發(fā)和維護(hù)存在不少錯誤的觀念,在實(shí)踐過程中沒有采用工程化的方法,或多或少采用了一些錯誤的方法和技術(shù),這是造成軟件危機(jī)的主要原因。
(3)開發(fā)和管理人員只重視開發(fā)而輕視問題的定義,使軟件產(chǎn)品無法滿足用戶的要求。對用戶的要求沒有完整、準(zhǔn)確的認(rèn)識就急于編寫程序,這是許多軟件開發(fā)失敗的另一主要原因。事實(shí)上,許多用戶在開始時(shí)并不能準(zhǔn)確具體地?cái)⑹鏊麄兊男枰浖藛T需要做大量深入細(xì)致的調(diào)查研究工作,反復(fù)與用戶交流信息,才能真正全面、準(zhǔn)確地了解用戶的要求。
(4)軟件管理技術(shù)不能滿足現(xiàn)代軟件開發(fā)的需要,沒有統(tǒng)一的軟件質(zhì)量管理規(guī)范。首先,文檔缺乏一致性和完整性,從而失去了管理的依據(jù)。因?yàn)槌绦蛑皇峭暾浖a(chǎn)品的一個(gè)組成部分,一個(gè)軟件產(chǎn)品必須由一系列配置項(xiàng)組成,不能只重視程序還應(yīng)當(dāng)特別重視軟件配置。其次,由于成本估計(jì)不準(zhǔn)確、資金分配混亂、人員組織不合理、進(jìn)度安排無序,導(dǎo)致軟件技術(shù)無法實(shí)施。
(5)在軟件的開發(fā)和維護(hù)關(guān)系問題上存在錯誤的觀念。軟件維護(hù)工作通常是在軟件完成之后進(jìn)行的,任務(wù)艱巨復(fù)雜,需要花費(fèi)很大的精力。所以做好軟件的定義工作,是降低軟件成本,提高軟件質(zhì)量的關(guān)鍵。如果軟件開發(fā)人員在定義階段沒有正確、全面地理解用戶要求,直到測試階段才發(fā)現(xiàn)軟件產(chǎn)品不完全符合用戶的需要,這時(shí)再修改就為時(shí)已晚了。另外,在軟件生存周期的不同節(jié)點(diǎn)進(jìn)行修改需要花費(fèi)的精力差異很大。在開發(fā)早期引入變更,涉及面較小,付出的代價(jià)較低;在開發(fā)中期,軟件配置的許多成分已經(jīng)完成,引入一個(gè)變更可能需要對所有已完成的配置成分都做相應(yīng)的修改,不僅工作量大,而且邏輯上更復(fù)雜,因而付出的代價(jià)劇增。在軟件“已完成”后再引入變更,則需要付出更高的代價(jià)。因此,必須把軟件維護(hù)的觀念引入軟件開發(fā)的各個(gè)階段,建立起軟件開發(fā)與維護(hù)的正確關(guān)系。
產(chǎn)生軟件危機(jī)的根源,歸結(jié)起來主要有4點(diǎn):
(1)缺乏軟件開發(fā)的經(jīng)驗(yàn)和有關(guān)軟件開發(fā)數(shù)據(jù)的積累,使得開發(fā)工作的計(jì)劃很難制訂。主觀盲目地制訂計(jì)劃,執(zhí)行起來和實(shí)際情況有很大差距,致使經(jīng)費(fèi)預(yù)算常常突破。對于工作量估計(jì)不準(zhǔn)確,進(jìn)度計(jì)劃無法遵循,開發(fā)工作完成的期限一拖再拖。
(2)軟件需求在開發(fā)的初期階段提得不夠明確,或是未能得到確切的表達(dá)。開發(fā)工作開始后,軟件開發(fā)人員和用戶又未能及時(shí)交換意見,使得一些問題不能及時(shí)解決而隱藏了下來,造成開發(fā)后期矛盾集中暴露。
(3)開發(fā)過程沒有統(tǒng)一的、公認(rèn)的方法論和規(guī)范指導(dǎo),參加的人員各行其是。加之設(shè)計(jì)和實(shí)現(xiàn)過程的資料很不完整;或忽視軟件開發(fā)人員的工作接口,發(fā)現(xiàn)問題修修補(bǔ)補(bǔ),使得軟件很難維護(hù)。
(4)未能在測試階段充分做好驗(yàn)證確認(rèn)工作,提交用戶的軟件質(zhì)量差,在運(yùn)行過程中暴露出大量的問題。在應(yīng)用領(lǐng)域工作的不可靠軟件,輕者影響系統(tǒng)的正常工作,重者發(fā)生事故,甚至造成生命財(cái)產(chǎn)的重大損失。