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

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

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

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