
軟件設(shè)計(jì)
軟件也和硬件一樣,它的質(zhì)量是設(shè)計(jì)出來(lái)的,生產(chǎn)出來(lái)的。其中,設(shè)計(jì)對(duì)軟件質(zhì)量具有關(guān)鍵性的影響。設(shè)計(jì)的重要性可從圖3看出,其中(a)為經(jīng)歷了設(shè)計(jì)步驟后的效果,在軟件使用和維修階段,軟件的問(wèn)題少;反之,(b)為跳過(guò)設(shè)計(jì)步驟,到了使用和維修階段,軟件問(wèn)題成堆,到了不可收拾的地步。基于這種情況,應(yīng)強(qiáng)調(diào):軟件設(shè)計(jì)未完成,不得轉(zhuǎn)入軟件編碼階段。

良好的軟件設(shè)計(jì)與所采用的軟件設(shè)計(jì)方法、設(shè)計(jì)工具和設(shè)計(jì)準(zhǔn)則有關(guān)。軟件設(shè)計(jì)方法主要有面向數(shù)據(jù)流的設(shè)計(jì)、面向?qū)ο蟮脑O(shè)計(jì)和面向數(shù)據(jù)的設(shè)計(jì)方法等。這些方法均有其優(yōu)缺點(diǎn)和不同的應(yīng)用領(lǐng)域。目前,大多數(shù)嵌入式的實(shí)時(shí)控制軟件使用的是面向數(shù)據(jù)流的設(shè)計(jì)方法。該方法的目標(biāo)是以一種全局的軟件觀點(diǎn)和體系結(jié)構(gòu)設(shè)計(jì)的角度派生出程序結(jié)構(gòu)。
面向數(shù)據(jù)流的設(shè)計(jì)又稱(chēng)為結(jié)構(gòu)化設(shè)計(jì)。它強(qiáng)調(diào)模塊化、層次化和自頂向下等設(shè)計(jì)思想。這些思想的根本目的是對(duì)復(fù)雜問(wèn)題的解決采用一個(gè)簡(jiǎn)化過(guò)程以獲得滿意的答案。通過(guò)這種簡(jiǎn)化,縱有千頭萬(wàn)緒也能理得清清楚楚。一個(gè)設(shè)計(jì)準(zhǔn)則是要將復(fù)雜的問(wèn)題簡(jiǎn)化,切忌將簡(jiǎn)單的問(wèn)題復(fù)雜化。好的程序設(shè)計(jì)語(yǔ)言,無(wú)疑對(duì)設(shè)計(jì)高質(zhì)量的軟件是有益的。例如,Ada語(yǔ)言,與一般語(yǔ)言比較,它所特有的一些語(yǔ)言成分旨在突出軟件可靠性和安全性,便于軟件維護(hù),便于實(shí)行程序的層次式管理和提高程序的易讀性、高效性等。
軟件可靠性設(shè)計(jì)主要將軟件的檢錯(cuò)、避錯(cuò)、容錯(cuò)和異常處理技術(shù)灌輸?shù)杰浖O(shè)計(jì)中去,設(shè)計(jì)時(shí)應(yīng)處處關(guān)心:
● 控制邏輯的完整性;
● 軟件與硬件、軟件與軟件界面之間的協(xié)調(diào)性;
● 人機(jī)交互的有效性;
● 信息交換的正確性;
● 設(shè)備控制的安全性;
● 時(shí)序控制的合理性;
● 數(shù)學(xué)運(yùn)算中變量定義域的合法性。
軟件生產(chǎn)工具
軟件生產(chǎn)的主要工具是軟件試驗(yàn)臺(tái)(Software Testbed)或軟件開(kāi)發(fā)平臺(tái)。在軟件需求分析的同時(shí),就要考慮到這類(lèi)軟件開(kāi)發(fā)環(huán)境的創(chuàng)造。它應(yīng)滿足下列要求:
(1)它的組成、結(jié)構(gòu)、性能、功能和工作的方式與狀態(tài),力求與實(shí)際系統(tǒng)一致。優(yōu)點(diǎn)是:
● 它與實(shí)際系統(tǒng)出現(xiàn)的故障現(xiàn)象是一樣的,便于故障隔離。
● 軟件試驗(yàn)臺(tái)與實(shí)際系統(tǒng)的軟件可彼此互相復(fù)制,便于軟件開(kāi)發(fā)過(guò)程交替上升。
● 具有互補(bǔ)性,試驗(yàn)臺(tái)有局限性的問(wèn)題可在實(shí)際系統(tǒng)解決;實(shí)際系統(tǒng)上有困難的,代價(jià)太大的檢測(cè)活動(dòng)可在試驗(yàn)臺(tái)上進(jìn)行。
(2)配上多媒體工作站,提供軟件測(cè)試過(guò)程中綜合信息的顯示和生產(chǎn)真實(shí)工作環(huán)境中的音響效果。
(3)配備實(shí)時(shí)數(shù)據(jù)采集器。
(4)能支持實(shí)時(shí)與非實(shí)時(shí)兩種運(yùn)行方式的調(diào)試活動(dòng)。
軟件試驗(yàn)臺(tái)是輔助軟件調(diào)試、測(cè)試、試驗(yàn)和驗(yàn)證的重要工具。在某種程度上可以得出這樣的結(jié)論:沒(méi)有軟件試驗(yàn)臺(tái)就不能順利地開(kāi)發(fā)出實(shí)時(shí)控制系統(tǒng)軟件。原因在于:
(1)這類(lèi)復(fù)雜的軟件在實(shí)際系統(tǒng)上開(kāi)發(fā)是不可能的,其代價(jià)太大,效率太低,效果太差。
(2)軟件開(kāi)發(fā)是個(gè)做細(xì)致研究、分析和不斷探索的過(guò)程,軟件試驗(yàn)臺(tái)能適應(yīng)這種工作方式。
(3)它是軟件編程、調(diào)試、測(cè)試、集成和試驗(yàn)的綜合環(huán)境。
(4)它是支持軟件原型化開(kāi)發(fā)方法的重要手段。
一般來(lái)說(shuō),實(shí)時(shí)控制系統(tǒng)軟件的第一個(gè)原型是在軟件試驗(yàn)臺(tái)上開(kāi)發(fā)出來(lái)的。有了軟件原型,就有了與用戶(hù)深入討論、分析和確認(rèn)軟件需求的基礎(chǔ)。實(shí)踐證明,經(jīng)過(guò)軟件試驗(yàn)臺(tái)測(cè)試通過(guò)的軟件,基本上能用于實(shí)際實(shí)時(shí)控制系統(tǒng)的系統(tǒng)聯(lián)調(diào)、測(cè)試、試驗(yàn)和系統(tǒng)驗(yàn)收。
軟件測(cè)試
從軟件生存周期看,軟件測(cè)試是卡住軟件質(zhì)量,尤其是卡住軟件可靠性的最后一道關(guān)口。但軟件測(cè)試并不僅僅局限于這個(gè)階段,而應(yīng)貫穿于軟件開(kāi)發(fā)的全過(guò)程(見(jiàn)圖4)。應(yīng)解決這樣一個(gè)認(rèn)識(shí)問(wèn)題——用于實(shí)時(shí)控制系統(tǒng)一類(lèi)的復(fù)雜軟件,自認(rèn)為沒(méi)有錯(cuò)誤的想法是不切合實(shí)際的。因此,測(cè)試的主要目的是:
1)對(duì)軟件的質(zhì)量或可接受性作出判斷;
2)發(fā)現(xiàn)問(wèn)題。

從圖4看出,會(huì)產(chǎn)生錯(cuò)誤的階段是在需求說(shuō)明、設(shè)計(jì)和編程過(guò)程中。這些錯(cuò)誤若不排除,均會(huì)遺傳到測(cè)試階段,甚至?xí)z傳到使用階段。利用測(cè)試用例測(cè)出問(wèn)題進(jìn)行故障分類(lèi)、故障隔離和故障消除等步驟,直到獲得滿意的測(cè)試結(jié)果為止。

測(cè)試用例的編寫(xiě)格式和內(nèi)容如圖5所示。測(cè)試的設(shè)計(jì)。難就難在試圖利用這組測(cè)試用例能找出軟件的全部問(wèn)題。格式中含有測(cè)試管理信息——測(cè)試用例標(biāo)識(shí)和執(zhí)行史。測(cè)試用例標(biāo)識(shí)是按一定規(guī)律統(tǒng)一為每個(gè)測(cè)試?yán)x予的代號(hào),便于需求追蹤。執(zhí)行史中有測(cè)試日期、測(cè)試結(jié)果(給出結(jié)論:通過(guò)/失敗)、版本號(hào)和主管的測(cè)試者簽字,這些都是有保存價(jià)值的資料。測(cè)試用例是需要精心設(shè)計(jì)、編寫(xiě)、評(píng)審、使用、管理和保存的。
軟件測(cè)試要求在測(cè)試過(guò)程中,采集軟件可靠性數(shù)據(jù),并利用軟件可靠性模型進(jìn)行可靠性評(píng)估。分析其是否達(dá)到了預(yù)期的可靠性要求。并據(jù)此作出該軟件能否放行的決斷。若不滿足要求,需繼續(xù)進(jìn)行測(cè)試,直到滿足要求為止。可見(jiàn)這是一項(xiàng)十分花精力的活動(dòng)。
軟件驗(yàn)證與確認(rèn)
軟件驗(yàn)證(Verification)和確認(rèn)(Validation),簡(jiǎn)稱(chēng)為V&V 或V2。驗(yàn)證和確認(rèn)的區(qū)別在于:驗(yàn)證關(guān)心的是確保軟件模塊或功能內(nèi)在的正確性;確認(rèn)則表明要與規(guī)定的需求進(jìn)行比較是否滿足要求,它所關(guān)心的是該軟件產(chǎn)品的價(jià)值。
軟件驗(yàn)證與確認(rèn)是貫穿于軟件開(kāi)發(fā)過(guò)程中十分細(xì)致的軟件檢驗(yàn)活動(dòng)。每個(gè)開(kāi)發(fā)階段的結(jié)果可認(rèn)為是下一開(kāi)發(fā)階段的一個(gè)規(guī)格文件,但要進(jìn)入下一階段之前必須對(duì)該結(jié)果作出確認(rèn)。驗(yàn)證和確認(rèn)的主要方法有:代碼走查、審查、測(cè)試和正確性證明等。代碼走查就是對(duì)軟件文檔進(jìn)行書(shū)面檢查。它通過(guò)人工模擬執(zhí)行源程序的過(guò)程,檢查軟件設(shè)計(jì)的正確性。人工模擬也像計(jì)算機(jī)執(zhí)行那樣,可以仔細(xì)推敲、校驗(yàn)和核實(shí)每一步的執(zhí)行結(jié)果,進(jìn)而確定其執(zhí)行邏輯、控制模型、算法和使用參數(shù)與數(shù)據(jù)的正確性。
審查是軟件驗(yàn)證和確認(rèn)中的一個(gè)主要方法,可彌補(bǔ)其他方法的一些不足之處。它是一種用形式的、有效的和經(jīng)濟(jì)的方法查找設(shè)計(jì)和編程中的錯(cuò)誤。審查的主要目的是1)找出軟件中的缺陷;2)核實(shí)是否符合需求;3)早期生產(chǎn)評(píng)價(jià);4)過(guò)程評(píng)價(jià)等。由第三方進(jìn)行軟件評(píng)測(cè)工作是十分重要的,其評(píng)測(cè)工具軟件對(duì)軟件進(jìn)行靜態(tài)的和動(dòng)態(tài)的評(píng)測(cè),能發(fā)現(xiàn)軟件設(shè)計(jì)的缺陷、瓶頸和多余物等。值得指出的是,用于軟件測(cè)試的各種方法、技術(shù)、工具和措施等,對(duì)提高軟件的可靠性都是必要的,但不是充分的。這就表明,其中任何一個(gè)手段,均不能絕對(duì)保障軟件的可靠性,但只要能發(fā)現(xiàn)軟件中任何一個(gè)微小的錯(cuò)誤,就起到了它的作用。
軟件評(píng)審
從某種意義上說(shuō),軟件中的多數(shù)錯(cuò)誤是人為的。軟件評(píng)審是軟件生產(chǎn)過(guò)程中過(guò)濾軟件錯(cuò)誤的一個(gè)“濾波器”。軟件評(píng)審涉及評(píng)審的組織機(jī)構(gòu)、管理、準(zhǔn)則、類(lèi)別、內(nèi)容、文件和要求等。
一般要求在軟件研制階段的里程碑點(diǎn)進(jìn)行軟件評(píng)審。評(píng)審的主要類(lèi)別有:軟件定義評(píng)審、軟件需求評(píng)審、概要設(shè)計(jì)評(píng)審、詳細(xì)設(shè)計(jì)評(píng)審、軟件實(shí)現(xiàn)評(píng)審和軟件驗(yàn)收評(píng)審等。
評(píng)審的原則:
● 某階段未通過(guò)階段評(píng)審不得進(jìn)入下一個(gè)軟件研制階段;
● 評(píng)審時(shí)對(duì)事不對(duì)人,評(píng)審的是產(chǎn)品,而不是評(píng)審生產(chǎn)者;
● 評(píng)審就要挑刺,找問(wèn)題、缺陷和隱患;
● 評(píng)審組的人員面越廣越好;
● 評(píng)審組不作無(wú)休止的爭(zhēng)論和辯駁,將爭(zhēng)論點(diǎn)記錄下來(lái),供以后甄別;
● 評(píng)審只是提出問(wèn)題,沒(méi)有解決問(wèn)題的任務(wù);
● 使用“評(píng)審檢查單”以提高評(píng)審的效果;
評(píng)審的作用:
● 技術(shù)把關(guān),避免軟件人員的想當(dāng)然;
● 概念溝通,吸收用戶(hù)和總體人員參加,審查軟件人員理解的正確性;
● 集思廣益,吸收有關(guān)的分系統(tǒng)人員參加,從不同側(cè)面確認(rèn)軟件的協(xié)調(diào)性;
● 總結(jié)匯報(bào),使實(shí)時(shí)控制系統(tǒng)總指揮、總設(shè)計(jì)師了解軟件生產(chǎn)的進(jìn)度、問(wèn)題和要求,作出新的部署。
評(píng)審很容易走過(guò)場(chǎng)、走形式。評(píng)審效果的好壞,與當(dāng)事人(軟件人員)密切相關(guān)。基于有問(wèn)題才需要評(píng)審,不能輕信自己的軟件,導(dǎo)致對(duì)評(píng)審產(chǎn)生對(duì)立情緒。對(duì)評(píng)審出的問(wèn)題進(jìn)行整理、分類(lèi)和匯總,不忽視任何一個(gè)細(xì)小的疑點(diǎn)。
軟件管理
科學(xué)的管理能夠出可靠性、出效果、出效益。軟件的管理工作不完善、不嚴(yán)格,是引起意外事故的原因之一。軟件管理主要包括軟件項(xiàng)目管理、軟件配置管理、軟件可靠性管理和軟件質(zhì)量管理等方面。
軟件項(xiàng)目管理的內(nèi)容包括軟件開(kāi)發(fā)過(guò)程管理、軟件可靠性度量、風(fēng)險(xiǎn)管理(包括風(fēng)險(xiǎn)分析和估計(jì))、確定項(xiàng)目任務(wù)、建立可操作的工程計(jì)劃等。軟件項(xiàng)目管理是軟件管理工作的第一層。需要強(qiáng)調(diào)的是,它不是一個(gè)階段,也不僅僅是個(gè)步驟,而是貫穿于整個(gè)軟件開(kāi)發(fā)工程中的一個(gè)層次。從其管理內(nèi)容來(lái)看,這是一種十分重要的管理工作。其管理的好壞,直接影響產(chǎn)品的質(zhì)量。這項(xiàng)管理尚處于起步狀態(tài),是個(gè)薄弱環(huán)節(jié)。軟件配置管理是軟件人員和管理人員確定、組織和開(kāi)展軟件修改的手段,目的是在軟件修改過(guò)程中設(shè)法少犯差錯(cuò)來(lái)最大限度地提高軟件產(chǎn)品的生產(chǎn)率。軟件配置管理涉及軟件配置項(xiàng)和基線的確定。
軟件配置項(xiàng)可理解為在軟件生產(chǎn)的某個(gè)階段應(yīng)具備的軟件文檔和保存軟件的介質(zhì)等。軟件基線(基準(zhǔn))又稱(chēng)里程碑。軟件配置項(xiàng)經(jīng)軟件驗(yàn)證、確認(rèn)、評(píng)審和認(rèn)定后,形成了軟件基線,也就成了該階段的一個(gè)基準(zhǔn)。下一個(gè)階段只能在這個(gè)基準(zhǔn)上進(jìn)行開(kāi)發(fā)活動(dòng)。
軟件配置管理要求:
● 軟件修改必須遵循軟件更改規(guī)范;
● 未經(jīng)批準(zhǔn)的更改,任何人無(wú)權(quán)修改;
● 更改后必須測(cè)試、驗(yàn)證和確認(rèn);
● 軟件驗(yàn)收,必須對(duì)相應(yīng)的軟件進(jìn)行評(píng)審。
具備評(píng)審的條件包括:相對(duì)該基線的軟件配置項(xiàng)齊全、有測(cè)試結(jié)果和測(cè)試分析報(bào)告及軟件優(yōu)化報(bào)告。
文檔管理是一項(xiàng)十分艱巨而又瑣碎的工作,要求:文檔編寫(xiě)必須規(guī)范、文實(shí)相符、文文相符、描述具有一致性、確切性和簡(jiǎn)明性、簽署完整、職責(zé)明確。軟件可靠性管理作了一些初步的嘗試。在軟件生產(chǎn)過(guò)程中,設(shè)計(jì)了軟件可靠性數(shù)據(jù)采集表格。對(duì)軟件中的需求、模型、設(shè)計(jì)、編碼和定義域等方面的錯(cuò)誤均要填表。填寫(xiě)產(chǎn)生該錯(cuò)誤的時(shí)間(計(jì)算機(jī)執(zhí)行的累計(jì)時(shí)間)、錯(cuò)誤性質(zhì)、出錯(cuò)原因和排除錯(cuò)誤的結(jié)果等。
主要問(wèn)題與解決方法
對(duì)實(shí)時(shí)控制系統(tǒng)軟件工程化的重要性的認(rèn)識(shí)尚處于起步階段,重視程度也不平衡。主要問(wèn)題:
(1)部分系統(tǒng)的軟件開(kāi)發(fā)由硬件人員承擔(dān)。硬件、軟件、模型設(shè)計(jì)均由一個(gè)組完成,仍是典型的“自編、自導(dǎo)、自演”小作坊的工作方式。
(2) 還不太習(xí)慣于軟件工程化、規(guī)范化、結(jié)構(gòu)化和模塊化的軟件生產(chǎn)方法。往往跳過(guò)了軟件設(shè)計(jì)階段,而是先有編碼,為了軟件檢查才補(bǔ)設(shè)計(jì)。
(3)缺少配套的軟件測(cè)試工具。試圖利用實(shí)時(shí)控制系統(tǒng)進(jìn)行軟件的調(diào)試、測(cè)試、驗(yàn)證、確認(rèn)和試驗(yàn)工作,這樣的軟件測(cè)試必然是不完整的,也是有局限性的,更是不科學(xué)的。
(4)實(shí)時(shí)控制系統(tǒng)軟件可靠性工程的研究是自發(fā)的,未納入實(shí)時(shí)控制系統(tǒng)研制計(jì)劃,影響這項(xiàng)工作的深入開(kāi)(5)需要解決實(shí)時(shí)控制系統(tǒng)軟件工程化方面的若干模糊認(rèn)識(shí):
● 軟件就是編程;
● 沒(méi)有測(cè)試工具照樣可以開(kāi)發(fā)出軟件;
● 舍不得在軟件可靠性上化成本;
● 出了問(wèn)題,才發(fā)現(xiàn)軟件似乎比硬件更重要。
(5)實(shí)時(shí)控制系統(tǒng)軟件可靠性指標(biāo)不好定。原因是軟件可靠性的評(píng)估涉及模型、方法、工具和條件等問(wèn)題。當(dāng)前,要求軟件的可靠性為100%,對(duì)軟件是不公正的,也是過(guò)于苛刻的。
建議
(1)軟件可靠性工程也是一項(xiàng)涉及面很廣的系統(tǒng)工程,應(yīng)加強(qiáng)這項(xiàng)技術(shù)的研究力度。尤其要結(jié)合具體實(shí)時(shí)控制系統(tǒng)設(shè)置研究課題,使實(shí)時(shí)控制系統(tǒng)軟件的生產(chǎn)過(guò)程同時(shí)也是軟件可靠性工程的實(shí)施過(guò)程。使自發(fā)的可靠性工作成為有計(jì)劃、有組織和有目標(biāo)的研究工作。
(2)適用于嵌入式計(jì)算機(jī)的實(shí)時(shí)軟件,例如實(shí)時(shí)操作系統(tǒng)、Ada語(yǔ)言等,應(yīng)像美國(guó)國(guó)防部那樣,要強(qiáng)制推行。
(3)計(jì)算機(jī)技術(shù)發(fā)展很快,軟件技術(shù)及軟件可靠性工程技術(shù)也發(fā)展很快,應(yīng)對(duì)重點(diǎn)實(shí)時(shí)控制系統(tǒng)的軟件人員定期組織培訓(xùn)。
(4)為了解決軟件生產(chǎn)的小作坊問(wèn)題,可否考慮逐步推行實(shí)時(shí)控制系統(tǒng)軟件人員考核制,作出資格認(rèn)證。