時間:2022-05-10 03:20:40
序論:寫作是一種深度的自我表達。它要求我們深入探索自己的思想和情感,挖掘那些隱藏在內心深處的真相,好投稿為您帶來了一篇軟件測試論文范文,愿它們成為您寫作過程中的靈感催化劑,助力您的創作。
摘要:嵌入式計算機是計算機行業中一種比較先進的計算機技術。隨著科學技術的不斷發展,嵌入式計算機的使用范圍也越來越廣,在嵌入式計算機使用的過程中,能夠有效地保證對需要的功能的實現。但是,由于嵌入式計算機軟件的結構相對于其他類型的計算機來說比較復雜,這就要求我們要能夠按照使用需要,及時對嵌入式計算機軟件技術進行測試。文章根據現階段嵌入式計算機與嵌入式計算機軟件的概念,針對開發使用的技術進行分析,找出如何使用相關的技術對嵌入式計算機的軟件進行測試。
關鍵詞:嵌入式;計算機軟件;測試;關鍵技術
前言
隨著我國的工業不斷地進步,科學技術的不斷發展,嵌入式計算機技術也得到了很大程度的提升。我們身邊普通的計算機并不是嵌入式計算機,嵌入式計算機指的是專門針對某一個項目或者是某一個行業進行開發的專業計算機。嵌入式計算機不僅僅能夠實現對需求開發的功能,有效地提升工作的效率。嵌入式軟件是嵌入式計算機中安裝的軟件,一般情況下,嵌入式軟件都需要根據不同的工作需要,完成相應的功能,這就要求嵌入式軟件要具備一定的穩定性,對嵌入式計算機軟件進行測試,能夠很好地保證嵌入式軟件的正常工作。
1什么是嵌入式計算機
嵌入式計算機指的是針對某一種技術,或者是某一種網絡、某一種功能等專門開發的計算機系統,利用計算機技術,加入嵌入式系統,能夠實現對計算機硬件和軟件功能的增多,能夠更加適合實際運用的需要。嵌入式計算機針對某一種功能的需要進行開發,對開發的成本、功能的可靠性以及計算機的大小等因素,都有十分嚴格的要求。通過對計算機處理器、硬件、系統、應用等進行嵌入式技術的操作,能夠更加有效地保證計算機技術的實現。嵌入式計算機大多被應用在工業生產中,能夠提升工作效率,保證工作的質量[1]。
2什么是嵌入式計算機軟件
嵌入式計算機軟件指的是在嵌入式計算機中使用的軟件,能夠進行獨立功能的操作,嵌入式計算機軟件包括嵌入式微處理器、傳感器、控制器、定時器、儲存器等等。在嵌入式計算機中使用的電子芯片或是電子器件,將嵌入式計算機軟件安裝到嵌入式計算機中,能夠有效地實現常規計算機不具備的功能,比如:實時監控功能、對設備的管理功能、數據處理功能、進行移動計算等等,真正地實現了現代化自動化的電子處理,是實現現階段自動化與智能化的社會生產力的重要途徑,嵌入式計算機軟件就是自動化的核心部分[2]。我們可以將嵌入式計算機軟件分為:簡單嵌入式系統和復雜嵌入式系統兩種。簡單的嵌入式系統只能夠完成一項功能,比較典型的簡單嵌入式系統就是單片機。單片機通過ROM技術就能夠實現對系統的使用,能夠達到對程序控制的目的。復雜嵌入式系統的功能與普通的計算機系統功能并沒有什么過大的區別,只不過在復雜的嵌入式系統中,安裝了一些微型的嵌入式操作系統,以及嵌入式應用軟件在計算機中,能夠使計算機的功能得到相應的完善,這就是嵌入式計算機軟件的作用[3]。
3什么是嵌入式計算機軟件的測試
嵌入式計算機軟件相比普通的計算機軟件來說,更具有專業性,嵌入式計算機軟件只能夠在某一個制定的平臺或者系統中運行。但是嵌入式計算機軟件的開發環境與運行的環境還存在很大的差異,不能夠使用同一網絡環境。嵌入式計算機軟件需要使用交叉開發的形式,在進行開發的計算機中,安裝并運行開發工具,開始對軟件進行編譯,再將編譯完成的軟件通過下載的方式,將軟件發送到目標計算機中,當開發計算機與目標計算機都有了嵌入式軟件,就能夠建立通訊連接,并且能夠對軟件下達命令、下載數據等等。兩臺計算機的操作系統不同,計算機的處理器也有著一定的差異,這樣的方式會增加嵌入式軟件開發過程的步驟,增加了開發步驟的復雜性[4]。我們將對嵌入式軟件進行開發的計算機稱為宿主機,對軟件進行接收并運行的稱為目標機。宿主機對使用開發工具,利用宿主機的操作系統對計算機軟件進行開發,通過通信連接將計算機軟件發送到目標集中,盡管這一系列的操作看似很簡單,但是卻需要強大的系統和硬件的支持。在這種形式下進行運行的嵌入式計算機軟件開發的活動,一般情況下,宿主機都是我們平時工作生活中使用的通用計算機,也可以是開發微機或者是軟件工作站等等。目標機與宿主機不同,目標機能夠承載宿主機開發的嵌入式計算機軟件的運行,將嵌入式計算機軟件安裝在目標機中,就能夠實現嵌入式軟件的功能[5]。
4對嵌入式軟件測試關鍵技術進行研究
4.1對宿主機進行測試的技術研究
宿主機指的是對嵌入式軟件進行開發的計算機,對宿主機進行測試的方式有兩種,即靜態測試與動態測試兩種,這兩種方式使用的是代碼邏輯的方式對宿主機進行測試。4.1.1靜態測試技術很多計算機軟件開發的專家,在對計算機軟件進行檢測的時候,通常使用的都是人工檢查的方式,由設計人員組成一個小組,小組的成員之間互相交流對軟件開發使用了哪些程序、使用的是什么算法進行的計算,并交代設計數據與軟件的模塊之間有什么樣的關系等。這樣的方式雖然能夠在一定程度上找出軟件中是否存在相關的問題。但是,由于現階段嵌入式計算機軟件的結構越來越復雜,設計的步驟越來越繁瑣,軟件設計的規模也在逐漸擴大,這就要求在一款軟件的設計過程中,可能會有很多的軟件設計師、工程師等一起參與到軟件的開發工作當中,每個工作人員的分工也大有不同,再使用從前的方式對軟件進行檢查,就會加重檢查工作的負擔[6]。這就要求我們,要根據現階段的計算機軟件開發的實際情況,找出最合適現階段軟件開發的檢測技術,對原始的計算機軟件的檢測工作進行優化升級,能夠使計算機軟件的檢查工作更加簡便。在檢查的過程中,加入適當的檢測技術,先對整個嵌入式計算機軟件的開發軟件系統框圖進行整理,并且對其設置自動連接的相關量,軟件的源代碼編程能夠通過自動化技術進行查找。這樣的方式能夠使軟件審查工作的工作效率有很大的提升,能夠使驗證工作的結果更加準確有效。我們可以通過靜態測試的方式,得到軟件中相關信息[7]。(1)軟件的源代碼程序繪制過程的邏輯圖,以及對軟件進行控制的工作流程。(2)軟件系統完整的邏輯框圖,系統內部關系調節的網絡圖。(3)軟件程序運行的路徑分析圖。(4)軟件生成的不同部分的顯示圖。(5)軟件不同部分顯示圖的位置信息,操作的頻率等信息。這些信息都能夠在靜態測試中得到實現,首先要使用靜態測試的系統對軟件的操作邏輯和控制系統進行分析,能夠有效地將軟件分析的更加精確,在進行軟件測試的過程中,能夠使測試的結果更加準確,并且能夠將測試結果更加精準的表現出來,檢測出軟件系統中是否存在相關的問題,并以此對軟件的系統進行改善。4.1.2動態測試技術對宿主機的動態測試主要指的是對軟件的代碼進行測試,能夠有效地檢測出代碼的執行能力,并且分析軟件代碼的覆蓋率,能夠有效地檢測出軟件的功能。能夠有效地了解到軟件的性能,還能夠通過分析更加了解軟件中代碼的執行情況,這樣的檢測方式能夠促進對軟件系統的改進,推進了軟件系統的發展,可以根據檢測的結果,對軟件的功能進行優化和完善[8]。動態測試技術還能夠對軟件設置的完成程度進行測試,能夠對其中已經開發完畢的數據進行檢測,檢查其中是否存在缺少的數據,這樣的方式能夠為軟件的開發工作提供重要的依據。動態測試技術能夠將軟件中的每個函數的情況,以及對內存的分配情況等進行檢測,能夠將軟件中各種元素的分配情況進行顯示,并且能夠同時對相對應的數據、代碼、函數等進行顯示。
4.2對仿真機進行測試的技術研究
仿真機作為宿主機與目標機之間重要的環節之一,通過仿真機的使用,能夠有效地完善計算機軟件測試的功能以及軟件自身的性能,比對宿主機的測試更加直觀、更加真實,并且能夠對軟件中主要的技術進行仿真測試,使測試的結果更具有說服力。其測試的結果既能夠作用于宿主機,還能夠作用于目標機。4.2.1仿真機測試數據獲取技術現階段,針對仿真機的數據監測,一直都是技術上很難實現的問題之一,很多對嵌入式軟件的檢測都需要在測試的過程中先提供軟件設計的源代碼,這樣的方式需要使用的數據量比較大,這就要求我們要針對這類數據的準確性進行技術的提升,才能夠保證檢測數據的精準性。仿真機監測技術能夠從一定程度上保證數據信息的完整性,在對數據進行完全的緩存后,再使用測試工具進行修改,能夠從很大程度上保證數據的正常輸入,在測試結束之后,還能夠對已經進行緩存的數據進行讀取,并將數據整理保存到計算機中。但是,需要注意的是,使用這種方式進行測試,還要保證數據緩存的大小不會超過測試的容量,測試才能夠順利的運行[9]。4.2.2仿真機仿真測試技術對嵌入式計算機軟件進行仿真測試,能夠在測試的過程中,對數據進行集中地管理和處理。仿真測試需要一定的技術支持,能夠將數據進行仿真模擬,在模擬的過程中,能夠看到技術的使用過程,再按照每款軟件不同的性質,分類仿真,使測試的結果更加真實可靠。還要保證在對數據的檢測過程中,傳輸信號是能夠穩定運行的,才能夠保證仿真測試的數據是實時的。
4.3對目標機進行測試的技術
目標機相對于其他部分來說,在測試的過程中,更需要注意目標機的綜合能力,還要能夠測試軟件自身的交互能力,并且測試軟件是否安全可靠,目標機測試的結果能夠更加真實地體現計算機軟件的性能[10]。4.3.1故障注入技術嵌入式計算機軟件在計算機中運行的狀態,可以通過人為的方式進行設置。但是,這就要求目標機的部件能夠具備一定的功能,能夠按照設置的時間、設置的運行方式等進行運作。故障注入技術指的是在目標機中,通過對某一部分的測試,能夠更加有效地檢驗目標機中的性能,比如:魯棒性測試、邊界測試等等。使軟件在運行時的狀態能夠表現的更加明顯。4.3.2內存分析技術嵌入式計算機的系統,一般情況下內存都會比較小。使用內存分析技術,能夠有效地保證在分析的過程中,找出計算機內存存在的問題。在問題的分析過程中,能夠防止內存中的某些內存會產生分配錯誤的問題,很多的計算機軟件故障都是因為內存分配的錯誤造成的。這就要求我們要通過內存分析的技術,來對內存進行判定。一般情況下,我們都會選擇硬件的方式進行分析,但是硬件分析的方式需要耗費的資金比較多,而且分析工具具有一定的環境限制,但是軟件分析會對計算機的代碼產生一定的影響,并且會影響內存的運行。這就要求我們在進行內存分析的過程中,要能夠按照不同的情況對測試的方式進行選擇[11]。4.3.3程序性能分析技術在嵌入式計算機運行的過程中,還有一個十分重要的因素就是程序的性能。一般情況下,嵌入式計算機對程序的性能都有一定的要求,能夠在已經設置的時間內,對某一數據進行中斷處理或者是生成處理,這就要求我們要在測試的過程中,要能夠根據實際情況決定先對那一部分的代碼進行優化,因為嵌入式計算機的優化程序的時間是很寶貴的,要盡可能地避免對一些沒有必要的程序的優化工作。使用程序性能分析技術,能夠將計算機內的數據進行整理,并按照消耗的時間,消耗的類型,消耗的歷時等進行分析。按照這些數據,能夠對計算機中的數據進行判斷,決定先對哪一部分的程序進行優化,才能夠保證對數據檢測的工作效率,保證對程序的優化是有效的。使用程序性能分析的工具,不僅僅能夠顯示計算機中每一部分的優化需要多少時間,還能夠按照需要優化的程度進行排序,引導工作人員對系統程序進行優化分析[12]。在對程序進行測試的過程中,可以先對計算機軟件中的代碼進行分析,能夠找出已經被使用的代碼,以及計算機接口的工作效率等等。可以在測試的過程中使用插樁的方式進行測試,分析完畢后在可執行的代碼當中適當地融入嵌入式軟件,并將二者進行綜合測試,得到的結果就能夠明確地看出,其中的代碼哪些已經執行,哪些被遺漏,或者是哪些數據的信息覆蓋還不夠全面。需要注意的是,使用這類分析工具進行分析,很可能會影響到計算機軟件代碼的運行,導致軟件運行出現故障問題。
5結束語
嵌入式計算機與我們的生活之間的關系十分緊密,能夠產生巨大的影響,我們身邊很多部分都使用了嵌入式計算機進行功能的完成和實現,比如:飛機的飛行控制器,或者是我們家中很多的家用電器,冰箱、洗衣機等等,都在一定程度上使用了嵌入式軟件技術。隨著科學技術的進步越來越快,嵌入式技術也越來越繁瑣。這就要求我們要在不斷地使用中對嵌入式技術進行完善,對嵌入式技術進行優化升級,能夠從一定程度上保證嵌入式技術的發展,對軟件進行測試,能夠大大地提升嵌入式計算機軟件的穩定性。
作者:王琨 單位:西安外事學院工學院
1軟件工程中的軟件測試
1.1軟件測試的含義
軟件測試根據用戶的使用目的,將成功開發的軟件進行相應的糾錯動作,從而披露該軟件的各種問題及缺失因素,促進研發人員進行相應的改進,從而達到完善軟件的目的。
1.2軟件測試的關鍵性階段
主要有以下兩個關鍵性的檢測階段。第一階段是軟件開發過程中各主要單元模塊完成后進行測試。這一階段測試可以將缺陷控制在最小單元模塊內,給研發人員最快的測試反饋,促使其完善單元模塊的功能,達到用戶的使用要求;第二階段測試是軟件系統全部完成后,進行全方位的綜合測試,查找系統在使用過程中可能存在的問題。此時,需要根據系統要實現的功能進行多種測試工具的應用,以其找到系統不符合要求的功能或性能瑕疵。
1.3軟件工程中軟件測試的方法
對軟件工程進行軟件測試時,不同軟件可以運用不同的測試方法。現階段,主要以軟件測試在測試過程中是否需要將程序進行完全運行來判斷測試方法,不需要系統程序運行就能完成測試的方法稱為靜態方法;需要系統時時傳送相應數據,并通過相應程序檢測系統是否達到用戶的期望值,是否存在運行邏輯上的問題和算法上的缺陷等的測試方法稱為動態方法。目前,靜態測試方法應用較廣的有靜態排演法、軟件檢查法和軟件審查法。隨著軟件測試方法的不斷創新和完善,新興的測試方法如靜態自動分析、分析模型等方法不斷得到應用;動態測試方法隨著精細化測試進程的深入逐漸細分為單元測試方法、集成測試方法、系統測試方法。這些測試方法相較于靜態測試方法,具有范圍廣、測試成功率高、內容覆蓋面大、應用程度高等特點。如白盒測試、代碼覆蓋測試等。
2軟件測試在軟件工程中的作用分析
2.1軟件工程項目需要軟件測試進行全方位的輔助管理
所謂軟件工程項目就是將用戶的要求進行立項管理,通過建立項目組、研究用戶的使用目標來確立項目目標,對目標現狀進行系統研究與分析、總體目標細分階段性目標以及規劃項目總體方案等,將軟件開發過程建立在項目管理過程中。在這一過程中,各階段性成果都需要軟件測試來校驗其可行性,從而輔助軟件工程項目步入更完善的項目管理中。首先,軟件工程項目需要精細化項目管理和集中項目管理兩者協調統一。因此,需要設立軟件測試機構,能夠對項目細分的各階段、各模塊進行軟件測試。其次,項目組人員組成和責任落實要依照規章制度實施。要體現軟件測試的重要性和實際意義,測試機構負責人為項目組組長的最佳人選。其組員為各項目負責人和其他測試人員組成。軟件測試結果必須立即反饋到軟件研發人員、程序員及系統分析人員等相關人員手中,以期促進其團結協作,將軟件各部分呈現出的問題解決。最終滿足用戶的使用要求,實現軟件設計的目標。可見,軟件測試的輔助作用,對于軟件工程項目的精細化管理、軟件相關技術的綜合管理等至關重要。
2.2軟件工程項目實施反促軟件測試發展
研發一個新的軟件系統時,其核心內容包括目標確定、框架設計、分支設計和編碼應用等,這些核心內容均需要軟件測試來實現其統一性和兼容性。系統目標是軟件測試的最終目的,軟件測試需要圍繞系統目標進行缺陷的發現和反饋,從而實現各階段測試的統一性和完整性,從而促進系統的協調和完善。經過軟件測試的系統,必須保證達到項目目標,且在長時間運行下無重大bug。從這一過程來看,軟件測試是在軟件工程項目實施中得以發展的。軟件測試機構并不是真正意義上的獨立,其“獨立”僅是功能上的獨立。實際上,在進行軟件工程項目實施的整個過程中,無論是整體設計還是精細化管理,都需要軟件測試參與其中,以測試角度對軟件工程項目的設計和實施進行指導和輔助,從而糾正一些設計上的錯誤和細節上的缺陷。這種參與的直接性促進軟件測試必須緊跟項目研發現狀,才能提出及時有效的參考意見,促進項目順利開發。軟件編碼規范是軟件研發團隊必須規范執行的,而這種規范的編碼剛是軟件測試機構的首要任務,制定規范要嚴肅,執行規范要嚴格,才能給用戶呈現出高質量的軟件產品。
2.3軟件測試原則
軟件測試的原則是在其測試的基本目的和要求下產生的,因此,在進行軟件測試時,必須注意其原則性。(1)堅持用戶使用目的,堅持項目總體目標和階段性目標的實現原則;(2)測試“精細化”即細分分支、單元模塊、階段性成果、系統全面測試等隨時進行;(3)測試時間要越早越好,頻率越高越好;(4)測試中邏輯性檢測和算法檢測要注重;(5)測試要結合數據檢測進行;(6)保證測試的嚴肅性;(7)測試堅持第三方進行原則;(8)不合理條件值都要進行測試;(9)測試過程、方法、用便、結果、完善等都要記錄在案,便于故障定位和日常維護。
3自動化軟件測試技術分析
隨著智能化技術和自動化技術的不斷深入應用,在軟件測試中,自動化軟件測試技術得到創新和發展,并在軟件開發中應用得越來越廣泛。所以,人們將各種自動測試的效果進行評估,將成功案例進行相似引用,來判斷檢測的可行性。最初的自動化測試具有較嚴格的針對性,運用特定的測試原則和測試方法,將統計指標運用其中,從而得到測試結果,并對其進行全面評估,從而得出自動化測試的嚴密性。隨著自動化測試的不斷深入推進和創新,其測試準則和自動測試技術越來越成熟,逐漸過渡到自動測試模型化階段。逐漸形成自動測試的等級制度,使得自動軟件測試技術成為測試控制能力高低優劣的一個重要判斷依據。
4結語
總之,軟件測試已經發展成為軟件工程中一個必不可少的重要組成部分,軟件測試不僅能夠對軟件的質量進行一個系統的評價,而且是目前確保軟件質量的主要途徑之一。并實現軟件產品整體質量與企業經濟效益的整體提高,進而提升軟件企業的核心競爭力。。
作者:欒新亮 單位:鄂爾多斯市特種設備檢驗所
1嵌入式軟件的特點
嵌入式系統的應用軟件是實現嵌入式系統功能的關鍵,其主要特點如下:
1.1軟件開發環境和運行環境不同
嵌入式系統軟件的開發通常采用交叉編譯方式,即軟件的開發在通用計算機上進行,而軟件的運行環境卻是在嵌入式專用設備上。開發環境被認為是主機平臺,運行環境為目標平臺,相應的測試被稱為主機測試和交叉測試。
1.2缺乏可視性
嵌入式軟件缺乏可視性主要表現在兩個方面:(1)數據的可視性方面:嵌入式系統通常沒有顯示設備和存儲設備,只有在線實時觀測或是將數據傳輸到主機上才能進行結果分析;(2)編程的可視性方面:由于嵌入式軟件的開發環境和運行環境不同,在進行開發時,一方面不能實時觀察程序的運行效果,另一方面程序在仿真環境和目標設備中的運行效果可能存在差異。
1.3實時性要求較高
多任務嵌入式系統中,對重要性各不相同的任務進行統籌兼顧的合理調度是保證每項任務及時執行的關鍵,單純通過提高處理器速度是無法完成和提高效率的,這種任務調度只能由優化編寫的系統軟件來完成,因此實時性是系統軟件的基本要求。
1.4軟硬件緊密結合
在嵌入式系統軟硬件體系結構內部,各層次、模塊之間的耦合度比通用計算機更強,這是嵌入式系統要求高效的結果,而通用計算機出于可擴展等要求更強調系統的模塊化、層次化和標準化。
2嵌入式軟件仿真測試環境
嵌入式軟件測試不同于傳統的通用軟件測試,由于其嵌入性、實時性、反應性、專用性等特點,它比一般的通用軟件測試更加困難。因此,根據不同測試階段的需求,建立恰當的測試環境是避免嵌入式軟件測試瓶頸、提高測試效率、保證測試質量的唯一出路。由于嵌入式系統通常采用軟硬件并行開發的方式,在進行軟件設計與測試時,真實目標設備常常不能及時提供,而且對于單片機、DSP這些深嵌入式系統來說,數據的顯示采集、測試用例輸入等都需要專門的軟件來實現,因此在進行嵌入式軟件測試前,必須首先建立嵌入式軟件仿真測試環境。嵌入式軟件是軟硬件耦合系統,把軟硬件分離開來,建立嵌入式軟件獨立的運行環境是建立嵌入式軟件仿真測試環境的關鍵。一個完整的嵌入式系統包括處理器、I/O接口以及各種外部設備,在建立嵌入式軟件仿真測試環境時,需要考慮軟硬件的分離原則,即哪些采用真實硬件設備,哪些需要用軟件仿真實現,哪些需要用硬件仿真實現,不同的嵌入式系統以及軟件測試階段,需要建立的仿真測試環境也不相同。
3嵌入式軟件仿真測試環境分類
根據運行環境和實際環境的差異,嵌入式軟件仿真測試環境可分為全數字仿真測試環境、半物理仿真測試環境和全物理仿真測試環境。
3.1全數字仿真測試環境
全數字仿真測試環境是指仿真嵌入式系統硬件及外圍環境的一套軟件系統。全數字仿真環境是通過CPU、控制芯片、I/O、中斷、時鐘等仿真器的組合在宿主機上構造嵌入式軟件運行所必需的硬件環境,為嵌入式軟件的運行提供一個精確的數字化硬件環境模型。
3.2半實物仿真測試環境
半實物仿真測試環境是利用仿真模型來仿真被測系統的外圍系統,而被測系統采用真實的系統。測試環境模擬被測軟件運行所需的真實環境的輸入和輸出,并且能夠組織被測軟件的輸入來驅動被測軟件運行,同時接收被測軟件的輸出結果。外部仿真設備:為目標機提供激勵信號輸入,接收并處理目標機輸出數據,保證軟件的連續、不間斷運行,實現自動化測試;可以采用軟件仿真或硬件仿真(ADS2等)。并不是所有的外設都采用仿真實現,可以隨著項目的進展以及根據外設的復雜性,有選擇性的加入真實外部設備。
3.3全實物仿真測試環境
在全實物仿真測試環境中,被測軟件處在完全真實的運行環境中,直接將整個系統和其外圍的物理設備建立真實的連接,形成閉環進行測試。全物理仿真測試環境是基于真實目標機的系統測試,是對整個嵌入式系統軟硬件的綜合測試,只有在系統研制的后期,所有硬件研制工作都已完成后才能進行。
4嵌入式軟件仿真測試環境的構建方法
根據嵌入式軟件及測試環境的特點,不同測試階段的測試環境搭建方法如下:
4.1單元測試
單元測試是針對軟件設計最小單位模塊而進行的內部測試。由于目標機環境資源少、實現難度大,因此嵌入式軟件的單元測試主要采用白盒測試的方法,一般在宿主機上,利用集成開發環境或測試工具(Clockwork、TestBed、Cantata++等)的全數字仿真模擬器來進行,找出單元編碼時產生的錯誤以及與軟件需求設計的偏差。在極特殊情況下,也可以在目標機上進行,利用單元測試中的驅動模塊和樁模塊進行。
4.2集成測試
集成測試是把經過單元測試的模塊按軟件的結構組合在一起作為一個軟件部件或部件集來進行的綜合測試。嵌入式軟件的集成測試可在宿主機環境上利用Clockwork、TestBed、Cantata++等測試工具來完成,也可在目標機上搭建仿真測試環境來完成,具體依賴于軟硬件耦合程度和集成級別。
4.3軟硬件集成測試
軟硬件集成測試主要是在軟件集成測試完成后,形成獨立的配置項,加載到相應的硬件平臺上測試其運行情況,以確定軟硬件能夠正確協調工作,實現軟件需求規定的功能、性能等要求。軟硬件集成測試必須在目標機環境下進行,交聯設備可以采用仿真模型替代。可以利用半實物仿真測試工具搭建測試環境來進行確認測試,比如:ADS-2、dSPACE等。
4.4系統測試
系統測試是將被測軟件和硬件資源都綜合起來構成完整的應用系統進行測試,確保整個系統達到研制任務書的要求。嵌入式軟件的系統測試對測試環境有嚴格的要求,必須在真實目標機環境下進行,包括運行平臺、交聯設備都要是真實的,目的是要確保嵌入式軟件能夠在最終的真實硬件環境下正確運行。
5結束語
嵌入式系統在人類生活中發揮著重要的作用,軟件所占的比重越來越大,也越來越復雜,保證嵌入式軟件的可靠性正面臨嚴峻的挑戰。由于嵌入式系統的實時性和嵌入式特性,使得嵌入式軟件的測試也面臨一些特殊的問題。根據嵌入式軟件設計過程中不同階段的測試需求,建立合適的測試環境,才能提高嵌入式軟件的測試效率,保證軟件設計工作的順利進行。另外,雖然日前已經有一些針對嵌入式軟件的測試和調試工具,但是在有些方面仍存在不足,需要進一步對嵌入式軟件的測試環境和測試技術進行研究,完善和研制更先進的測試工具。
作者:于慧媛 單位:中國人民解放軍91413部隊
1軟件測試對于軟件開發工作的重要意義
軟件測試是軟件開發中不可缺失的工作內容,通過有效的軟件測試步驟,能夠幫助軟件開發工程人員減輕工作負擔,在很大程度上提升了軟件的實用性能。因為電子軟件的生產過程極為復雜,在開發的過程中需要經歷許多環節,每個環節的數據要求都極為嚴格,很有可能因為極小的差異造成軟件應用的失誤。軟件測試就是為了實現對于軟件開發后的使用作出初步的評估,保證下一個生產環節能夠正常執行,也為了確認軟件的使用具有質量保證。軟件的測試能夠涉及整個軟件設計、開發,以及未來升級的過程。首先,能夠幫助軟件開發商確認軟件的使用質量。其次,還能夠為工程師提供有效的信息反饋,幫助工程師進行軟件系統操作的風險預警評估。還有,就是實現為未來軟件系統升級奠定基礎,能夠保證軟件在未來的開發計劃中添加有效的性能價值[1]。軟件測試的工作具有相當高的行業地位,能夠幫助工程師和開發商盡早發現問題,并且給予充足的時間去解決問題,進而提升了大眾對軟件的使用效果,滿足了推動科學技術進步的時代要求。
2軟件測試的具體步驟和方法
2.1軟件測試的對象
軟件測試的對象主要是針對于軟件使用過程中出現的邏輯操作,其中包含軟件的使用規則,還有在軟件應用中的程序設定是否滿足人們的應用習慣,還要考慮到軟件開發的初期設計是否能夠滿足社會大眾的需求,能夠實現廣泛的普及,并且獲得大眾的喜愛。因為軟件測試與其他方式的應用測試不同,軟件的測試需要遍布整個軟件的設計完成過程,要求軟件能夠實現具體使用的功能性。
2.2軟件測試的種類
軟件的測試工作也分成兩種形式,一種是靜態的檢測試驗,另外一種是動態的檢測試驗[2]。首先進行靜態種類的具體劃分解釋,其中的工作內容具體實施不必要展開軟件的運行功能,只要進行人力的代碼查詢工作審核就可以了。這期間可以對整個軟件的設計腳本進行分析,得到房中數據的編碼,保證在網絡中展開的數據時正確有效的。與此同時能夠展開對軟件編程的評估,其中的數據值都在控制范圍內,不能超過最低的數值要求。編寫數據程序的人員在結束初始工作后還要展開對程序的審查,其中的大部分工作內容需要依靠合作完成。專業的人員通過技術手段結束數據的參考值評估,要求在人工審查的途徑中實現數據的核對工作。總結的角度來評定靜態測試的作用,就是通過人工和數據參考工具實現對編程的審核。另外一種就是動態的測試種類,這種方式需要進行軟件的啟動,在運行的過程中通過既定的數據進行測試評估。按照專業的白盒與黑盒方式進行測試實驗,達到動態測評的目的。白盒的功能就是測試軟件的邏輯性,能夠滿足人們使用的正常運作,黑盒則更傾向與想軟件的使用功能,以及軟件的數據管理進行測試。白盒與黑盒的測試功能滿足了對于軟件測試的基本要求,實現了為軟件后續開發提供數據的重要任務。
2.3軟件測試的方法步驟
將軟件的測試方法進行歸納和綜合,發現主要的測試方法來源于對于測試種類的需求。將白盒和黑盒的測試程序運用到軟件的測試中去,實現人工和技術的雙層數據收集,實現對于軟件的數據編程、應用操作,以及未來升級的發展需求都進行監管。由白盒協助人工進行數據的整理,達成數據外接的基礎使用。再由黑盒的運行操作達成對于內置程序、數據的檢測和觀察,保證軟件進入正式使用中的功能性。軟件測試的整體步驟,都由數據的支持進行操作,具體的步驟首先是進行功能性檢驗,然后將外因排除后執行內因運行,之后找尋可能導致程序出現問題的原因,最后結合參數的運算和總結,達成軟件測試的目的[3]。
3軟件測試在軟件開發過程中的應用實施
軟件的開發是一個十分復雜的過程,為了成功的實現軟件的應用和升級,就需要工程師進行嚴密的設計、開發,以及研制,最后成就的科學技術產品。因為人們日益增長的科學需求,完美的軟件必須還要經過不斷的推敲和升級。
(1)軟件測試的應用主要考察軟件的實用性和需求。軟件的創作和制造都是為了滿足人們生活的需求,在開發的過程中要考慮產品的功能性,還要考慮開發商的開發成本是否能夠支持整個軟件的制作完成。
(2)軟件的整體設計是否合理,需要通過軟件測試得到論證。工程師進行軟件的數據編寫,是為了滿足人們的生活需要,各項開發和功能的深入研究都是為了實現軟件的實用性。軟件的測試能夠檢測出軟件開發中的問題,進行及時的補救工作實施,盡量做到不浪費開發成本的目的。
(3)要求在軟件測試應用實際作用于軟件的后期拓展。無論是學習軟件還是工作軟件,甚至于游戲軟件,都必須要滿足未來的發展和升級要求,實現能夠無限開發和研制的目的,保證軟件具有創新性。軟件測試很大程度上也是為了找尋軟件的功能延續性,促進軟件的再開發和再創造。
(4)軟件的測試需要應用到軟件的最終檢測和維護環節中去。每款軟件開發后都應該得到檢測,只有質量能夠達到標準才能保證軟件的出售。再者就是應用到軟件出售后的軟件維護,保證軟件高質量運行[4]。
4結語
在信息技術不斷摸索前進的過程中,軟件的應用托陳出新不斷進步,實現了人們生活、工作,以及學習的全面提速。為了保證軟件在人們生活中的使用質量,以及適用程度,進行軟件開發前期的軟件測試是必須嚴格執行的工作步驟。
作者:丁旻昊 單位:中國特種飛行器研究所
軟件測試是保證軟件質量的重要手段之一。目前社會上對軟件測試人才需求非常旺盛,據報道其人才缺口高達30萬人[1],高校學生畢業后直接從事軟件測試工作的占據了軟件測試行業從業人員的48%[2],許多高校都開設了軟件測試課程,如蘇州大學[3],北京工業大學[4]等,以培養相應的軟件測試人才。我校計算機科學與技術專業2008版教學設計中新增了軟件測評課程,含理論課28學時及實驗課8學時,于2011年首次在大四上學期開設。軟件測試主要是一門技能型課程[5],其理論性相對較弱,且和軟件工程概論課存在較多內容的重復。吸取了首次授課時重理論輕實踐的教訓,我們將軟件測試課程的目標定位為在一定理論基礎的指導下使學生熟練掌握軟件測試的技能,因此2012年第二次授課時將理論課減少為24學時,實驗課增加到12學時。借鑒同濟大學朱少民教授[6-7]的經驗,實驗課著重講述一些常用開源軟件測試工具的使用,包括功能測試工具Selenium和AutoIT,單元測試工具Junit,代碼覆蓋工具Emma以及性能測試工具Jmeter等。Jmeter是Apache組織開發的一個用于壓力測試和性能測試的純Java桌面工具,可用于對服務器、網絡或對象等模擬繁重的負載來測試它們的強度或分析不同壓力類型下的整體性能[8]。性能測試是保證應用程序后能夠穩定可靠運行的必要手段之一。以我們為某機場開發的戰略規劃管理系統為例,由于前未進行全面的性能測試,客戶使用一段時間后經常反映系統響應速度慢。利用Jmeter對主要模塊進行了性能測試,結合測試結果對數據庫進行了優化,此后客戶再也沒有反映過響應速度慢的問題。本著科研服務于教學的宗旨,以該系統為原型,完善了基于Jmeter的性能測試及數據庫優化實驗教學設計。
1Web應用程序性能測試實驗
這部分實驗目的是使學生熟練掌握使用Jmeter測試Web應用程序的一般流程和方法。實驗任務測試績效考核子系統中的評分模塊。評分人登錄系統后進入評分環節,選擇其未完成的評分項目(若有多個未評分項,則需要全部對其評分)。每個評分項中包含對多個部門的評分,部門數大于等于3個時需符合正態分布,如可評出優秀3個、良好6個、合格4個、基本合格2個,否則可任意評分。按照循序漸進的原則,設計了3個步驟:一是Jmeter的基本應用,包括腳本錄制、添加http請求、添加斷言以及查看測試結果等;二是Jmeter的邏輯控制結構,如分支和循環等;三是Jmeter的高級應用,如參數值可變以及參數個數可變等。
1.1Jmeter的基本應用
Jmeter可以手工添加腳本,但更方便的是使用腳本錄制軟件Badboy[9]。Badboy錄制的腳本可以保存為Jmeter格式,然后在Jmeter中直接打開和修改。腳本主要是一系列的http請求,其中可以設置請求的URL,請求方法(get/post)及請求參數等,如圖1所示。通過添加斷言(如是否含有特定字符串)檢查請求是否返回正確結果。添加查看結果樹并運行測試腳本查看程序的測試結果。
1.2Jmeter的控制結構
Jmeter具有豐富的邏輯控制結構,包括控制器,switch控制器,while控制器以及forEach控制器等。實驗重點練習控制器和forEach控制器。控制器判斷Jmeter變量是否滿足給定條件,若滿足則執行其包含的測試元素,否則不執行。ForEach控制器對Jmeter變量的每一個取值都執行一遍其包含的測試元素。圖2是一個控制器,其條件為變量COUNT小于10且變量VAR等于字符串“abcd”。圖2Jmeter的控制器圖Jmeter的變量引用使用${變量名}的方式,變量一般提取自返回頁面中的某些信息,如滿足特定條件記錄的行數或某個特定位置的字符串取值等。變量提取可采用正則表達式或Xpath進行匹配,講解其匹配原則并現場演示。圖3利用正則表達式提取需評選優秀的單位個數,其中引用名稱youxiu就是變量名。匹配失敗則取設置的缺省值0。如對于頁面中返回的html代碼“…您當前可以評出優秀<spanid="ltYSMsg">3</span>個…”可提取出優秀個數為3。
1.3Jmeter的高級應用
本部分著重解決實際測試過程中的一些常見問題,如參數內容可變及參數個數可變等。測試登錄環節時需模擬不同的用戶登錄行為,即圖1的http請求中txtUserName一項的值應是變化的。Jmeter提供的CSVDataSetConfig可解決這一問題,如圖4所示。將所有評分人的信息存儲在一個CSV文件中,把其中的列名填入VariableNames項,之后將圖1中的txtUserName值改為userAccount(即CSV文件的第1列)實現參數值的動態變化。進入評分項后需根據情況選擇優秀和良好等的個數,且要反映在http請求的參數中。由于參評單位的個數因評分人和評分項各異,因此無法在GUI界面中一一添加。需動態添加的參數包括評分列表中的name及其value,value的取值從優秀到基本合格依次為1234。為簡單起見,我們按順序對單位進行評分。如系統要求評出3個優秀,則測試中前3個部門打優秀,其余依次類推。由于同一部門的優秀良好等單選按鈕的name值相同(如圖5所示),我們選擇提取該組唯一的ID號,然后將其轉換為name,其對應關系是用$代替下劃線(如ID號為gbBSCExamList_ctl02_rbExamerLevel,name為gbBSCExamList$ctl02$rbExamerLevel)。Jmeter的Beanshellpreprocessor可在提交http請求前動態調整參數個數及參數值。下面給出了Beanshellpreprocessor的代碼。其中ExamerLevel_matchNr為Jmeter的系統變量,提供了正則表達式匹配項ExamerLevel匹配成功的個數(即參評單位的個數)。如前所述匹配數量小于3時可任意評分,為簡單起見我們均將其評為優秀。N=Integer.parseInt(vars.get("ExamerLevel_match-Nr"));(N>=3){YX=Integer.parseInt(vars.get("youxiu"));LH=Integer.parseInt(vars.get("lianghao"))+YX;HG=Integer.parseInt(vars.get("hege"))+LH;BHG=Integer.parseInt(vars.get("jibenhege"))+HG;for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");(i<=YX){sampler.addArgument(item,"1");}else(i<=LH){sampler.addArgument(item,"2");}else(i<=HG){sampler.addArgument(item,"3");}else(i<=BHG){sampler.addArgument(item,"4");}}}else{for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");sampler.addArgument(item,"1");}}設計了含35個并發線程的線程組,模擬實際35個評分人的評分過程。全部線程在1秒鐘之內啟動,比實際情況更嚴格。得到聚合報告如圖6所示,其中點擊考核評分頁面響應時間最長,為335毫秒。且測試過程中無錯誤發生,說明系統評分模塊可靠。
2數據庫性能優化實驗
除應用程序外,數據庫設計的優劣亦影響系統性能。這部分實驗目的是使學生熟練掌握使用SQLServer測試數據庫性能的一般流程和方法,并進行簡單的數據庫調優。為減少復雜性,設計一個簡單的由三張表組成的人員組織結構數據庫:user、or-gan及userorgan表。其中user表含4586條記錄,or-gan表含1722條記錄,userorgan表含6804條記錄(一人可在多部門任職)。實驗任務根據賬號查詢其姓名及所在單位信息。
2.1SQL語句執行計劃對應用程序中頻繁執行的SQL語句檢查執行計劃非常重要。初始時,三張表均未建立任何索引,下面SQL語句的執行計劃如圖7所示。由圖7知,三張表均采用全表掃描的方式。對大表全表掃描可能涉及多次磁盤I/O,非常費時,應盡力避免此種情況。SQLServer報告由于缺少索引影響了查詢性能,并給出了相關建議。selectA.vcAccount,A.vcName,C.vcNamefromtest.dbo.[user]Ainnerjointest.dbo.[useror-gan]BonA.vcAccount=B.cnvcempidinnerjointest.dbo.organConB.cnvcorgid=C.nNodeIDwhereA.vcAccount='testuser'為表格建立以下索引:indexIND_USERACCOUNTontest.dbo.[user](vcAccount)clusteredindexPK_ORGANontest.dbo.[organ](nNodeID)indexIND_USERORGANontest.dbo.[userorgan](cnvcempid,cnvcorgid)再次運行后顯示執行計劃如圖8所示。可見所有表掃描均已替換為相應的索引查找,且SQLServ-er未報告缺少索引影響查詢性能。兩次執行查詢的磁盤I/O和CPU時間見表1,可見為表添加正確的索引可提高查詢性能。
2.2索引建立原則總結
建立索引的一般滿足原則如下[10](篇幅所限,未給出實例):(1)為主鍵所在的列創建索引。為經常進行連接但未指定為外鍵的字段建立索引。(2)在頻繁進行排序或分組的字段上建立索引。(3)在條件表達式中經常用到的不同值較多的字段上建立索引,在不同值較少的字段上不建立索引,如性別字段。不在查詢很少引用的列上創建索引。(4)若經常同時使用多個字段排序,可在這些字段上建立復合索引。要盡量使關鍵查詢形成索引覆蓋,其前導字段一定是使用最頻繁的字段。(5)查看索引并刪除不使用的索引。需頻繁進行數據查入操作的數據庫應有較少的索引,需頻繁進行讀取操作的數據庫應有更多的索引。(6)在聚集索引中,避免包括不必要的列,盡可能使用較小的數據類型。(7)在支持排序和范圍查詢的字段上考慮使用聚集索引。(8)具有高選擇性的列是索引的好候選列,具有高密度的列是索引最糟糕的候選列。
3結語
軟件測試是保證軟件質量的關鍵步驟。在軟件正式前一般都需要經過性能測試,以保證軟件在一定負荷下的平穩可靠運行。Jmeter是一款優秀的開源性能測試工具,可測試繁重負載下的系統表現。軟件性能表現還取決于數據庫設計的優劣,建立適當的索引可減輕數據庫查詢和處理負擔,進而提高系統處理能力。通過本教學設計實驗學生普遍反映認識到了性能測試的重要性,了解了執行計劃在數據庫性能優化中的作用。
作者:張志遠馮興杰單位:中國民航大學
摘要:
在IT行業,人們對于軟件開發與測試關系的研究熱度不減;同時軟件的開發與測試,也一直是軟件項目團隊的中堅力量,要想保證軟件開發產品的質量,就要有測試人員對于質量進行驗證,所以測試人員也相當于質檢人員,但是兩者之間的關系還有更加深入的關系,對此本文就軟件測試與軟件開發關系展開分析,希望對于軟件設計水平的提升,起到積極促進的作用。
關鍵詞:
軟件測試;軟件開發;關系
0前言
軟件開發是一個系統性的過程,包括概念階段、計劃階段、開發階段等,而軟件開發工程與軟件測試工程師分別對應著軟件產品生命周期的開發與驗證階段。表面看似兩者是一個上下游的關系,但是不同工程師所占的立場不同們對于軟件的認識也呈現差異化,對此需要工程師共同討論等,繼而確定最佳的產品方案。
1概念分析
軟件開發與軟件測試是軟件工程的重要階段,前者是在客戶需求的基礎上進行軟件系統制造的過程,也包括系統設計、編碼程序等內容。而后者主要是將前者各個階段,存在的漏洞等利用測試用例找出,是對于軟件需求等的最終審核,也是對于產品的質檢。
2工作內容
2.1開發人員
其工作內容主要體現在以下幾點;第一、加強軟件需求分析,明確軟件開發方向。第二、編寫軟件詳細設計文檔,包括程序流程、函數等內容;還包括單元、集成測試等文檔的編寫。另外只有審核完寫好的文檔后,才能進行代碼的編寫。第三、代碼編寫是非常重要的,直接關系著軟件程序的功能發揮;而軟件開發不僅僅就是寫代碼,還包括很多其他的內容。第四、程序編碼結束后,需要由開發工程師,對其進行系統自測,保證程序正確編寫;自測合格后,以及文檔編寫好后,一并交給軟件測試人員進行檢測。
2.2測試人員
第一、通過對于軟件需求說明書的審核,明確軟件功能開發方向。第二、積極建立測試環境,也就是指軟件運行的條件,包括軟硬件設施的設置等。對于軟件實際工作環境的模擬,也是測試環境構建的主要內容,繼而保證軟件的實際應用不會出現問題,對此可見測試環節還原現場環境的重要性。第三、將配套軟件進行運行,檢查其是否存在缺陷、功能是否充分的發揮,對于檢查出來的問題,組織相關的工程師進行軟件問題的修正工作。第四、協助并指導工作人員安裝軟件程序。
3關系
軟件開發和軟件測試主要的工作目標在于用戶需求的實現,保證交付軟件的質量,開發與測試并存,首先由開發人員進行軟件實現,然后由測試人員找出軟件中存在的程序問題,最后提交開發修復,兩者之間是相互合作、相互影響的關系,繼而除去軟件開發中的的程序問題,保證軟件的高品質。兩者的工作交集,在于軟件缺陷,但是軟件開發工程師、軟件測試工程師,工作崗位不同、對于軟件的看法不同,對此難免會存在意見分歧,所以測試工程師加強與軟件開發師之間的關系處理尤為重要,繼而更好的形成向心力,保證軟件開發的高效性和該品質性。好的軟件開發,不僅僅要狠抓軟件開發與軟件測試兩個環節,更要注重產品開發的全過程;另外更不能傾向于某個環節,而要讓軟件開發和測試都要硬,從而更好的保證后續工作的順利進行。
4關系處理辦法
4.1尊重開發成果
測試人員的綜合素養、綜合技能等,直接影響著軟件開發的進度與質量等,為了更好地處理測試與開發之間的關系,測試人員要抱有一定崗位職責、職業素質,本著公平、公正的心理尊重軟件開發環節的工作成果;軟件開發會可能會存在一系列的隱藏程序漏洞等,這都是非常正常的,而測試工程師的主要職責就是找出這些漏洞,提高開發進行修正,從而另一個角度來說也是在幫助開發工程師成長;但是實際上,部分的測試人員在檢查開發提交的測試軟件時,會因為發現問題而出現一系列消極的情緒,對于軟件開發工程師進行謾罵侮辱等,不僅降低了軟件開發工程師的工作積極性,也影響了兩個工作層面的關系,最終延長了軟件交付的日期,以及軟件的質量。開發工程工作內容繁瑣且任務重,不可能全面顧及,導致程序開發存在一定的問題,而測試人員作為軟件品質完善的關鍵,要在尊重軟件開發作品的同時,積極的進行漏洞檢查,實現良好的團隊協作氛圍。
4.2缺陷技巧的提交
由于軟件開發與軟件測試工作埃的交集就是程序缺陷,對此測試人員就要做到以下幾點,繼而保證缺陷技巧的有效提交,保證軟件開發人員的更好接受。
4.2.1換位思考測試
人員在接受軟件開發提交的作品時,首要的就是了解軟件開發工程師對于測試結果的關注內容、范圍以及關鍵點等;一般軟件開發人員對于測試結果最注重的就是軟件邏輯、數據流轉等方面的內容,對此測試人員就要合理的采用測試技巧,有效的調整程序漏洞的提交方案。軟件測試也是一個復雜且繁瑣的過程,首先測試工程師要按照指定的測試流程,對軟件作品進行系統邏輯的測試,找出影響系統正常運轉的錯誤邏輯問題,將其第一時間反饋給開發工程師;測試環節接觸到的其他問題,但并不是影響系統邏輯的漏洞點,按照漏洞提交順序進行依次提交更容易被開發工程師所接受。
4.2.2漏洞描述要精準
測試人員的測試結果,是開發人員漏洞改進的關鍵,一個精準的的Bug描述,對于開發人員來說幫助性是非常大的,能夠幫助開發人員更加精準的進行漏洞定位。這就要求測試人員在進行Bug描述時,要注重語言的干練簡明,語氣要肯定,避免使用好像、不確定等詞匯,繼而模糊開發人員的工作思路。其次描述的內容要突出重點,忌諱全面開花。最后根據以往的經驗,給軟件開發人員提出一系列的建議,像可能會出現漏洞的部位等,繼而實現軟件的高品質。
4.2.3注重普遍問題的提交
軟件開發人員一般工作都非常的忙碌,而重復漏洞或是無效漏洞的提交,會大大的影響其工作的心情、工作量與工作進度等,對此測試人員在測試系統漏洞時,要養成Bug分析的好習慣,分清其問題的獨立性還是普遍性,若是普遍問題可以提交一個。這就要求測試時人員要加強對于軟件系統的熟練度,包括業務要求、操作以及使用等,當測試人員也不確定漏洞是否存在時,可以與其他測試人員進行溝通,或是與開發工程師進行溝通,繼而精準定位程序漏洞。
4.2.4加強有效溝通
考慮到測試人員與開發人員之間的矛盾問題,主要的原因在于缺乏溝通或是交流無效,對此首先測試熱源就要占到用戶的角度上,正確的表達出自己的想法,讓開發人員也占到用戶的角度進行討論。其次由于兩者工作理念不同,對此難免會存在爭議,對此測試人員保持自己觀點,可在下個版本中完善。最后加強兩者之間的溝通,明確對方的工作想法,保證系統認知的更加深入、全面,并靈活的運用測試手段,從而更好的保證軟件高品質。
5總結
綜上所述,通過對于軟件測試與軟件開發關系的分析,發現作為軟件產品全生命周期的關鍵環節,更要加強溝通合作,提升企業研發的凝聚力,做到就事論事奔著相同目標共同努力,從而更好的保證軟件產品的進度和質量。
作者:侯中原 單位:商丘醫學高等專科學校
[摘要]
隨著我國計算機網絡的不斷普及和發展,無論是人們的日常生活還是工作,甚至是休閑娛樂,都離不開互聯網的支持,可以說,計算機軟件已經受到越來越多人的應用,并且逐步成為了影響人們生活的重要技術。隨著人們對計算機應用軟件需求量的不斷增加,計算機應用軟件的開發也越來越頻繁,因此,要對其開發流程以及開發需求進行深入的分析。文章將對計算機軟件測試技術與開發應用進行了研究。
[關鍵詞]
計算機軟件;測試技術;開發應用;相關研究
計算機軟件測試技術對于軟件開發而言具有重要的作用,能充分保障軟件的精確性,為軟件開發工作帶來安全保證。筆者將從計算機軟件開發的重要性、計算機軟件開發流程、計算機軟件測試技術在軟件開發中的有效應用,三個部分進行闡述。
1分析計算機軟件開發的重要性
相對于應用軟件而言,計算機僅僅只是作為一種輔助工具,計算機之所以能夠幫助人們有效地解決這類問題,促進社會迅猛發展,最重要的就是計算機內的軟件應用,可見,軟件的開發極為重要。隨著國家經濟體系的不斷改革,各行各業已經逐步面向現代化發展,互聯網的普及無疑為人們的發展奠定了結實的基礎,也給應用軟件的進一步研究開發提供強有力的保障,計算機軟件的應用已經在人們的生活中得以普及,而人們的日常生活也已經離不開網絡的支持。計算機軟件的應用不斷豐富了人們的日常生活,使人們更加重視精神的自我培養,此外,計算機網絡也在不斷推動著人們前進。
2計算機軟件開發流程
2.1分析開發需求和設計概要
在開發計算機軟件之前,對其進行需求分析是開發應用軟件的首要環節,亦是最重要的環節之一。軟件開發需求分析質量,會直接對應用軟件開發造成影響,一般情況下研究人員要根據軟件需求內容,對軟件的概要進行設計,并且結合軟件的功能需求情況設計出軟件程序流程圖,若是利用類似于C語言等的高級語言實施程序編寫,還應當根據軟件模塊設計各模塊的應用功能。概要設計為軟件的開發提供了程序框架,后續的開發工作都是在這個框架基礎上進行操作,可見這個框架不但能夠決定計算機軟件程序功能,而且還能對軟件運行的效率產生一定的影響。在基于軟件程序具體的開發過程中,想要實現其特定功能,可選擇多個語句或者邏輯關系等來實現,但不同的邏輯關系與語句也會從一定程度上影響軟件。軟件開發及其需求越來越復雜,如何編寫簡潔而又不會存在漏洞的應用程序,已經成為了各軟件開發人員最終的目標,因此,在實際研究過程當中,研究人員要十分重視概要設計環節的工作,并且保持思路清晰,設計完程序流程圖之后要進行全方位的審核,不斷簡化軟件的邏輯關系,最終實現科學合理的軟件邏輯關系。
2.2詳細的編碼與設計
緊跟需求分析和概要設計后的一個環節就是進行程序的具體編寫工作。在編寫程序的過程當中,首先應當選擇計算機語言,經過長時間的發展,高級計算機語言出現提高了軟件的開發效率。人們按照開發軟件的實際需求,有針對性地研究了很多種類的計算機語言,例如:如常見有JAVA、C語言等,到了現在出現了VF與VB等可視化的編程軟件,這類軟件的研發使研究人員即便沒有專業知識也可完成簡單的軟件開發。此外,在實際編碼前,研究人員應進行詳細設計,在已設計的框架上,按特定的邏輯關系將軟件所需實現的一些功能進行設計,根據詳細設計流程進行編碼。目前,計算機軟件設計使用最多的是C語言,這種語言的模塊形式較為簡單、語句便于理解,所以非常適合在開發、維護軟件過程中運用,受到研發人員的青睞。
3計算機軟件測試技術在軟件開發中的有效應用
軟件程序的編寫完成之后,研發人員還要對其實施相應測試,監測這款軟件的應用效果以及功能等是否能夠達到預期效果,一般情況下,測試軟件的方法就是隨機輸入一些數據到計算機中,然后再看結果是否達到要求,為了能夠確保軟件功能的精準性,常常會選擇幾組隨機數據配合一些特殊參數進行檢測。如果檢測出來的結果和軟件功能相符合,那么則說明通過測試,反之,則不符合。近幾年以來,計算機的軟件開發技術得到迅猛發展,研究人員也開發了一些專門針對軟件測試的程序,但是由于受到技術水平因素的影響,使用測試軟件受到一定的局限,比如:一個測試軟件只能對一種軟件實施檢測,并且測試結果只能當作參考,測試結果的準確率還需要提升,但是不管怎樣,測試軟件的研發就足以標志著計算機軟件程序的未來發展方向。新開發軟件通過檢測以后,需要交予需求方進行使用,為了保證軟件能滿足人們的實際使用需求,使用方也會進行驗收,軟件驗收方要求極為嚴格,但是驗收方式基本和測試方法相似,同樣采取輸入參數來進行驗收,因此,就增加了不必要的驗收程序。研發人員還應當繼續研究,爭取研發出更多的測試軟件,使軟件的測試結果更加精確。軟件測試技術作為軟件開發過程中最為重要的組成部分,該技術主要目的是為了將軟件產品中存在的問題及時找出,并將測試報告交給軟件開發人員予以修改。可見,在軟件開發工作中,軟件檢測技術的應用是不可缺少的環節。
4結語
總而言之,計算機網絡技術已經在人們的生活中得以廣泛應用,而軟件就是應用計算機的關鍵,隨著人們各類需求不斷增加,開發計算機軟件已經成為了研究人員的日常工作,在具體的軟件研究過程中,軟件測試技術的使用是必不可少的,因此軟件開發人員還應切實做好相關工作,解決軟件開發所面臨的困境,不斷提升自己的開發水平,對軟件開發工作進行深入研究,促進軟件事業的持續發展。
作者:高俊 鄒金萍 單位:江西生物科技職業學院
摘要:
本文針對軟件測試課程的教育現狀,結合軟件測試的課程特點和培養目標,從面向應用型人才的培養方式出發,提出了以案例式教學為主導,走教學產業化發展的軟件測試改革方案。
關鍵詞:
軟件測試;應用型人才;案例式教學;教學產業化
隨著我國IT行業的發展,越來越多的企業意識到軟件測試的重要性,因此軟件測試人員成為當前IT業界亟需的熱門人才。面對軟件測試人員緊迫的需求形勢,應用型人才培養單位應該擴大軟件測試人員的人才培養規模,提高培養質量。
一、《軟件測試》課程教育現狀
我國軟件測試技術發展已有十余年,但IT市場對于測試人員仍然呈現出供不應求的勢態。目前國內高校對軟件工程專業幾乎都會開設軟件測試課程,甚至有些高校已經設置有軟件測試專業。2011年11月,教育部主辦了“2011年高等學校軟件測試課程教學論壇”,對測試人才的培養及測試領域的全面發展起到了積極地推動作用[1]。高校系統化的專業教育體系為學生奠定了扎實而科學的學科基礎,并對軟件測試技術的理論化和系統化發展起到了不可替代的作用。利弊相依,傳統的人才培養模式對軟件測試課程設置和培養方案上還是會存在以下不足。
1.重理論輕實踐在傳統的軟件測試課程設置中,大多采用教師在課堂上講授理論知識,學生上機時完成實驗操作的教學方式。實驗的目的只是為了檢查學生知識點的理解和掌握,實驗題目大多比較陳舊,不能與時俱進地與當前的最新技術或最熱門的應用相結合,使得學生的測試知識體系過于單薄。
2.重學生個體知識積累,輕團隊協作能力培養團隊協作在軟件工程中的重要性無須多述。軟件測試作為軟件工程中重要一個環節,貫穿于整個軟件生命周期,測試人員與系統分析員、軟件設計師、程序員、維護人員之間的溝通必不可少,良好的團隊協作才能有助于項目的進行,有助于高效、正確地開發出高質量的軟件產品。傳統的教學模式中,很少引入分組協作的環節去鍛煉學生的溝通和交流能力,更不能設計出測試人員和開發人員的溝通場景,不能滿足學生在項目中去加深理解、鞏固提高的需求。
3.重即有知識,輕科學創新一直以來,軟件測試課程在高校的課程體系中受到重視并不多,課程結束后并沒有延續測試知識的后續課程。因此,學生不能在后面的學習和實踐中進行總結提升。知識在母體中是要經過消化、適應、轉化、演進、創新、融合、活化,而后才稱為組織的“行動知識”,現有的教學模式不能很好的產生知識發酵效果。
二、《軟件測試》課程特點和培養目標
軟件測試是一門應用型較強的學科,應注重理論聯系實踐。一個合格的軟件評測師除了要掌握即有的測試理論和軟件知識外,還必須具備對軟件測試行業的深刻理解,必須具備對計算機專業知識,包括編程技能、數據庫、網絡、中間件等知識的系統掌握,必須具備溝通能力、團隊協作精神。軟件測試是為了盡可能多地發現并排除軟件中潛藏的錯誤,最終把一個高質量的軟件交給用戶,這并不是一項簡單的工作。要做好軟件測試,測試人員不僅需要站在客戶的角度思考問題,真正理解客戶的需求,具備良好的分析能力和創造性思維能力,完成功能測試和界面測試,而且要能理解軟件系統的實現原理和各種使用場景,具備扎實的技術功底,能使用測試工具完成相應的性能測試、安全性測試、兼容性測試和可靠性測試等更具挑戰性的任務[2]。從這個角度看,一個優秀的測試工程師需要掌握更多的知識和技能。
三、《軟件測試》課程教學改革方案
以上可以看出,當前高校對于測試課程的不重視,以及當前的軟硬件設施及教學方法都不能滿足對應用型測試技術人才的培養要求。為了適應軟件產業發展對測試人才的迫切需要,實現軟件人才培養的持續性發展,針對軟件測試課程調整培養方案,展開深入的教學改革和實踐活動十分迫切和必要。
1.加大師資力量,構建完善的軟硬件測試平臺教師素養的提高是軟件測試教學改革得以順利開展的前提。此前,國內對軟件測試并不重視,致使國內軟件測試人才短缺,大部分高校內雖然有計算機系,但多以重開發輕測試,測試教師的專業素質和數量都遠遠不夠。因此,不僅要重視對教師測試專業技術的培訓,提供更多的學習機會,也應該認真開展軟件測試教學研究,構造專業的軟件測試教學團隊。作為一門實踐性較高的課程,軟件測試必須建議專門的、完備的實驗教學體系和環境。目前,高校普遍缺乏軟件測試的軟、硬件環境,致使學生無法通過項目實踐來深入理解和提高測試相關知識和技能。
2.運用案例教學,豐富軟件測試項目實戰案例在教學活動中,學生總是對最新、最流行的項目和案例感興趣,陳舊的案例既不能滿足當前市場上對測試人才的技術需求,又不能很好的激起學生的興趣。運用案例教學最重要的環節就是豐富案例素材,保持案例的“鮮活性”與“生命力”。高校可以采用歷年本科畢業設計中運用了流行的技術、難度適中、功能較為完整的應用作為軟件測試課程的測試案例,不但可以保證素材的延續性,也使得學生畢業設計完成的質量有所提高。
3.加強校企合作,走教學產業化發展之路[3]企業需要人才,高校為企業輸送人才,校園中學習的技能最終要接收用人單位的考驗。所以與軟件企業合作,建立對口的學生實訓基地,是應用型人才培養的重要途徑。軟件測試技術的掌握與提高離不開項目實戰,讓學生在真正的軟件工程過程中從事測試工作,不僅能使學生深刻體會到軟件測試在整個項目中的作用,掌握測試方法和技巧,對于學生的溝通交流能力、團隊協作能力都有積極的促進作用。
四、小結
軟件測試是保障軟件質量,驗證軟件可靠性的重要環節,其重要性不言而喻。重視軟件測試應從企業用人的實際需求出發,高校應加強面向企業需求的軟件測試改革,切實培養學生的動手操作能力,使學生掌握最新的測試方法和技巧,讓企業需求促進和推動高校教學發展。
作者:于營 單位:三亞學院
1測試流程不合理
1.1測試設計重點偏離使用QC軟件測試發現bug統計,如表1所示。根據表1工作量統計,25人/日為5個中級測試工程師一周的工作量,但是根據測試用例發現的bug數量僅占bug總量的44.18%,該比例顯示測試用例的設計重點嚴重出現偏離。需要在測試用例設計的方向上進行調整。
1.2測試過程不可控QC軟件測試計劃中測試執行階段為2013.3.8-2013.3.27,執行三輪測試;實際測試時間為2013.3.23-2013.4.20,執行測試三輪,計劃完成時間嚴重偏離,表2為原計劃與實際計劃的對比。表2顯示測試計劃進行了較大調整,計劃截止時間比原計劃延遲23天。延遲原因經分析主要為開發提交測試時間延遲,開發提交版本問題較多,測試計劃安排不合理,在兩輪測試間為安排開發修改bug時間等。想要解決該問題,不僅需要對測試過程進行管理,同時也需要對開發提交的測試版本質量進行管理。
2軟件質量管理改進對策
2.1需求工程管理軟件開發過程中,需求不明確會帶來需求的頻繁變更,浪費了很多時間。針對此項問題,可對需求相關的活動進行統一管理,其需求管理結構圖如圖2所示。加強需求開發和需求管理的有機結合,不僅減少了需求的變更次數,還解決了工程師對需求不能理解到位的問題。需求開發和需求管理同樣重要,只有兩者互相配合才能做出用戶滿意的產品。
2.2立項管理為了使有限的資源發揮更高的價值,公司可通過立項管理流程進行立項管理,立項管理流程分為立項建議、立項評審和立項籌備三個階段,其具體流程圖3所示。
2.3測試流程管理針對測試流程中發現的問題,可對整體的測試流程做如下的改變:(1)測試部門可進行需求學習及需求討論,對理解不清楚及有疑問的需求,由研發設計部門進行解答,研發設計部門不能解答的由其聯系用戶確認后作出解答;(2)需求確認后,針對系統功能和性能等指標,由測試工程師進行測試測用例的設計,設計從兩個方面進行,一方面測試工程師根據需求進行測試用例的編寫,另一方面測試工程師可根據用戶反饋問題進行分析匯總;(3)使用QC功能測試工具對應用軟件兼容性、操作系統兼容性進行測試,以便于使用測試工具完成多種環境下的功能和兼容性測試;(4)進行自由測試以便于對系統測試用例進行補充,分析測試用例未覆蓋問題的原因;(5)定期分析缺陷庫中的問題,分析問題產生的原因,進行測試用例的修改。
3結論
本文指出了軟件質量管理過程中可能會引起軟件質量問題的原因,對軟件質量管理的相關問題進行了分析,歸納和總結,這些問題在軟件開發人員中具有一定的普遍性。實踐表明,通過對這些問題進行分類,開發人員可以清楚地知道在軟件設計中容易出現的問題,能夠及時采取相應的措施,推動軟件質量的全面提高。
作者:翁婕丁鐵喬揚單位:南京萊斯信息技術股份有限公司質量與技術管理部
根據權威機構統計部門調查數據顯示可知,在常用的軟件開發項目環節中,軟件測試工作大約能夠占到軟件開發工作總量的42%以上,而軟件測試所需投入的研究經費成本也將占到總額數的50%。由此可知,軟件測試環節對于整個軟件工程開發應用具有十分重要的意義。然而,如何建立一支高效軟件測試團隊對于構建更加完善的軟件工程起著直接導向性作用。BarryBoehm曾闡述了人的因素在軟件測試中的重要作用,人為所占因素甚至超過了其他環節性因素,其代表理論構造性成本模型認為由于軟件測試分析師與程序員的原因會導致其工作效率相差數倍。因此,加強軟件測試團隊的高效率建設對于構建高質量軟件應用程序具有重要作用。
1高效軟件測試團隊建設的可行性策略
1.1軟件測試團隊的特質建設
軟件測試團隊的素質建設對于整個軟件工程質量而言具有非常重要的作用,人是測試工作中最具價值也是最重要的資源。因此,應該積極構建合格的、高質量的合作團隊。(1)軟件測試以及軟件工程開發都需要程序員具備足夠的自信心,對軟件檢測結構以及程序的缺陷要如實匯報。對于軟件項目工程中出現的各種問題要認真處理,以此減少客戶可能遇到的種種問題。(2)軟件測試人員還要具備足夠的懷疑精神,對可能存在的漏洞性錯誤要及時予以檢測和糾正,進而提高其自我創造力。(3)軟件測試團隊要積極構建溝通協調能力。可以通過與客戶進行必要的溝通來及時發現軟件運行中存在的不足之處,其中測試者可以針對模擬環境下用戶對于軟件環境的應用情況進行科學分析,以此對軟件編寫過程和總結文檔進行反復檢查檢測,提高軟件的運行效率和正確性。(4)必備的檢測技術能力。軟件測試團隊必須具備重要的專業技能,需要精通數據庫、通信、網絡、GUI測試、測試工具、自動化測試腳本和相關業務領域等,以此全面提升他們的測試能力和測試積極性。
1.2軟件測試團隊的制度性建設舉措
一個優秀的軟件測試團隊必定擁有一套完善的團隊管理制度,擁有明確的職責分工和高端測試人員,通過不斷規范團隊管理制度,做到揚長避短,及時提升整體測試質量。其中,軟件測試團隊需要不斷加強匯報制度建設、工作總結制度建設、獎懲制度建設、測試審核制度建設、會議制度建設等,通過科學合理地分配職責關系來進一步強化團隊成員的素質建設。在此過程中,還要注重對于資深測試人員的正確引導和建設,加強彼此間的溝通交流,不斷豐富團隊的測試知識庫,通過科學吸收先進的測試管理知識來提升整體測試技能和技巧,以此減少開發團隊協同工作中的一些領域瓶頸。
2結語
綜上所述,本文對目前國內軟件工程的發展應用現狀以及其中出現的漏洞不足之處進行了分析。只有不斷加強對軟件測試團隊的整體素質和綜合開發技能的教育,才能從根本上提升其軟件測試技能,要在不斷建立健全團隊管理制度的基礎上加強相關軟件工程建設,以此全面提高測試人員的軟件工程技術水平。
作者:段煉單位:鄭州銀行科技開發部
1軟件工程提升軟件健壯性分析
軟件工程目前一直缺少一個明確的定義,但是目前業內專家都一致認為軟件工程一般分為需求分析、設計、編碼及測試4個環節。其中前面3個環節是整個軟件的編寫,而最后1個環節的軟件測試,則是通過各種專業測試方法來測試軟件是否滿足軟件工程下的10種特性:可修改性、有效性、可靠性、可理解性、可維護性、可重用性、可適應性、可移植性、可追蹤性和可互操作性。
2當前軟件測試的現狀
從對軟件工程的分析來看,軟件測試是保證軟件最終健壯性的最后一個工序。但是,當前很多軟件設計公司,在軟件測試方面投入的人力物力都非常低,甚至沒有專門的軟件測試部門,而是由一些軟件設計人員兼職。雖然這樣也有了所謂的軟件測試這道工序,顯然因為軟件設計人員本身的先入為主,所以在軟件測試的過程中,往往不容易發現潛在的問題。另外有的軟件測試人員僅僅把軟件推到市場上,部分使用人員來進行測試,雖然這也是一種測試方法,但是這種由用戶測試的軟件測試環節,更多的是在軟件的操作體驗的測試,并不能夠發現軟件潛在的bug,正確的軟件測試流程,應該設計專業的測試軟件,通過白盒測試的方法來針對軟件代碼進行測試。而上述的僅僅測試界面和操作,那只是軟件測試中的黑盒測試法,只有綜合白盒和黑盒,才可能獲得更好的軟件測試效果。但是,目前能夠綜合這2種測試方法的專業軟件測試部門,還是非常稀缺的。這自然導致了國內整個軟件行業的軟件健壯性存在缺陷的主要原因之一。
3軟件測試重要性分析
3.1軟件危機下凸顯軟件測試的重要性
軟件危機一直是IT行業的最重要的話題,其實在軟件危機這個名詞出來之前,軟件工程就已經初步有了核心流程,不過正是因為很多專家有著自己的理論,所以讓軟件工程這門技術的解釋出現了很多不同的版本,不過在眾多版本中,軟件測試始終占據一個重要的模塊。軟件危機常見的表現就是因為軟件在開發的過程中,成本失控、時間跳水、穩定性和兼容性欠缺等諸多問題,而不得不一而再再而三的重新開發,特別是軟件在設計的過程中,對于可維護性、可修復性不重視,導致維護的成本占據了整個軟件生存周期的90%以上,這很明顯是不正常的。通常而言,軟件維護的成本應該是軟件生存周期的70%以下,超過70%,這個軟件最終的結局一定會失敗。軟件測試的過程,除了針對軟件的運行是否穩定,同樣也會對軟件的可維護性進行有效的判斷,盡可能的避免軟件危機的產生,所以從軟件危機的角度上來看,軟件測試在軟件工程中的地位無疑是非常重要的。
3.2軟件測試的必要性
(1)是交流的問題,容易導致軟件接口處的錯誤。現代軟件設計已經不是單人作戰的模式,已經上升到團隊甚至全球軟件工程師通過互聯網這個大平臺進行合作,這種方式顯然對軟件工程規范要求更高。其中交流往往就成了一個很重要的問題,很多軟件工程師在設計的過程中,盡可能的將自己負責的模塊做到完美,甚至也能夠考慮到模塊間的借口問題。但是因為交流上的不便,或者忽視交流,往往會產生2個模塊接口不兼容,甚至還會發生軟件需要重新改寫的問題。
(2)軟件結構有越來越復雜的趨勢。雖然軟件開始實施模塊化設計方式,將一個軟件整體拆解成無數個小的系統模塊進行設計,然后將設計好的模塊進行統一封裝。這種化整為零的軟件設計方式的確有效的改善了軟件復雜性的問題,但是同樣也面臨著模塊間的兼容問題,不同設計師的設計風格可能會導致軟件可維護性降低及可移植性降低,特別是一些軟件開發公司,根本就沒有軟件工程的概念,其研發的軟件產品,更是漏洞百出,自然很難保證軟件產品的健壯性。
(3)程序代碼的設計問題。目前一個軟件的誕生,往往會有好幾千萬行的代碼,而且在軟件正式代碼編寫之前,還需要撰寫概要設計代碼和詳細設計代碼,這些往往都給錯誤埋下伏筆。如果程序設計代碼撰寫不規范,沒有相應的注釋,沒有相應的模塊設計,往往計算式發現了軟件的錯誤,最終維護起來,也很難讓維護工程師定位,甚至連測試工程師也很難找到錯誤的地方。
(4)設計文檔的組成非常少。一個軟件產品的誕生,除了優秀的代碼設計之外,還要一份完善的代碼文檔,包括軟件的可行性研究、需求分析、詳細設計、代碼編寫,以及軟件測試等工作流程中所需要的一切的代碼文檔。如果代碼文檔貧乏,甚至沒有,那么一旦在軟件測試環節,或者在軟件使用環節,出現錯誤時,那就很難進行維護調試了。這時候的維護成本往往會比重新編寫一款軟件的成本還要低,可見設計文檔的錯誤撰寫給軟件健壯性的影響。
(5)一些軟件測試工具和開發工具本身的問題,往往導致軟件出現嚴重的bug。而且在設計階段,還很難發現,因為是本身軟件測試工具和軟件開發工具引起的,因為軟件測試工具和開發工具實際上也是一種軟件,如果這些軟件的健壯性有問題,自然也會導致測試結果出現偏差,最終影響到軟件的健壯性。
3.3軟件測試成本過半證明了軟件測試的重要性
軟件工程雖然在很多專家和權威機構的定義有所偏差,但是無一例外,對于軟件成本構成的分析上,軟件測試的成本一直占據了主要部分,最低的認為,軟件測試成本要占據30%,最高的則認為占據到50%。如果將后期維護成本也放在軟件測試板塊中,那么這個測試成本就會變得更高。因為軟件進入維護期時,一旦出現軟件需要進行調試,那么修復后的軟件依然要進行軟件測試,否則很難保證調試后軟件依然能夠保證健壯性。作為一個軟件系統的所有代碼,都是牽一發而動全身,修改了某處代碼,可能會影響到另外一個模塊的功能,所以在維護期內,對軟件的任何變動,都需要進行軟件測試,才能夠保證軟件接下來的健壯性。但很明顯,如果將軟件測試工作放在軟件推出市場之前,就來進行有效的測試,那么對于軟件整個生命周期的成本,將能夠得到有效的降低。軟件測試的成本的高低,往往和軟件的質量成正比,而軟件質量提升了,后期的維護成本就能夠有效的降低,所以綜合起來,軟件測試這部分的成本支出是非常有必要的。
4軟件測試流程分析
(1)建立獨立的軟件測試部門,測試部門領導應該對這個專業非常精通,而不是簡單的由開發人員兼職,這個測試部門需要從可行性研究開始就應該著手對軟件研發進行測試,可行性研究的最終確認應該也有軟件測試主管部門的簽字確認才能夠進行下一步的工作。
(2)軟件測試工作不是等到軟件全部開發完畢才來進行測試,而是跟隨軟件設計的整改生命周期,針對每一個環節進行測試,軟件測試部門應該擁有獨立的物理部門和獨立于開放環境的測試環境,這樣才能夠提供更加完善的軟件測試,盡可能的將軟件bug扼殺在搖籃里。
(3)軟件模塊測試,因為現在軟件設計都已經進入模塊化設計標準,比如一個完整的軟件是S,它有A、B、C、D等模塊構成,那么對于A模塊的軟件設計過程中,就應該有獨立的軟件測試人員進行跟蹤,直到A模塊被測試證明沒有隱患。以此類推,分別對B、C、D等模塊分別進行測試,合格以后,組裝后的軟件依然進行測試,這樣才能夠最終提升軟件健壯性。在軟件設計的過程中,其實測試人員是和軟件開發人員并行工作的,而不是等到軟件設計完畢之后,再來對模塊進行測試,這種方法才能夠提升軟件測試的效果。
5結語
軟件測試隨著軟件系統復雜性的不斷提升而變得越來越重要,如果現在的軟件設計公司依然按照傳統的軟件研發,只注重軟件的功能設計,而忽視軟件測試,通過不斷的壓縮測試成本,希望以此來提升軟件最終的利潤作法已經行不通了,只有將軟件測試做好、做精,才能夠提升軟件的健壯性,才能夠提升軟件的生存周期,才能夠降低軟件的整體成本。
作者:董倩范亞斌單位:石家莊學院
1關于軟件測試的認識
在軟件開發的每一個階段中,人員的參與都是離不開的部分,而人的工作以及人們之間的通信質量有很難做到完美無缺,這就導致了錯誤是不可避免的。另外,伴隨著計算機控制對象越來越復雜,且軟件的功能及規模也在不斷的提升,這也使得錯誤相對而言更容易發生,比如對于WindowsNT操作系統來說,其代碼約為3200萬行。總體來看,在軟件設計階段,人們所犯的錯位是引起軟件失效的主要原因,而軟件缺陷的根源則在于軟件的復雜性。在確保軟件可靠性以及質量的過程中,軟件測試屬于最為主要的手段,以當前的軟件工程來看,多以結構化分析及設計作為核心,因此在開發階段,需求分析以及設計都是以工程管理以及技術評審作為質量的保障手段,而工程管理以及技術評審又存在著主觀上的缺陷,很容易遺漏錯誤使其延續至開發階段。客觀來說,軟件測試在發掘軟件中隱藏缺陷的過程中的確有著很好的效果,以英國的SHOLIS項目來看,這一項目使用形式化方法對軟件規約進行描述及證明,而且利用程序正確性證明方法對前期的很多缺陷進行排除,但是通過軟件測試卻依舊發現了整個過程15.175%的缺陷。此外,隨著人們對軟件測試重要性的認識越來越深,其所在軟件開發周期中所占的比例也越來越高,當前很多軟件開發機構已經將其40%的研制力量投放到了軟件測試中,而對一些比較重要的軟件來說,其測試的費用往往會高達其他階段費用的3至5倍,由此可見,不管從哪個角度出發,軟件測試都是非常重要的。
2軟件測試分類
當前的軟件測試技術主要可以分為動態測試以及靜態測試,其中,靜態測試主要是指在不執行程序代碼的情況下找到程序中有可能存在的缺陷或者對程序代碼進行評估的過程中,廣義上看,靜態測試還包括軟件需求分析以及技術評審。至于動態測試,則是通過抽樣測試數據對程序進行運行以起到檢查程序中存在的缺陷。在動態測試的過程中,其核心內容主要包括測試用例、運行正與以及對于程序運行結果進行驗證這3部分內容,此外還包括一些數據管理、文檔編制、操作規程等輔助方面的工作。
3軟件測試的對象
在軟件測試的過程中,不單單進行一些比較簡單的程序測試,也就是說僅對程序能否運行進行測試是遠遠不夠的。具體來看,軟件測試要貫穿在軟件定義以及開發的整個過程中,因此軟件測試的對象包括需求分析、系統設計、程序編碼以及各階段說明文檔。此外,因軟件開發過程中各個階段之間有著非常金敏的銜接,因此如果前一階段出現問題必然會對下一階段段的工作造成影響,所以為了確保每一個階段的正確性,我們要做好確認及驗證工作。具體來看,確認主要是對需求規格以及程序進行確認,這既含有靜態確認,又有動態確認,其中靜態確認大多數是由人工進行分析,而動態確認則是利用動態分析以及程序測試對程序執行的情況進行檢查。至于驗證,則主要是采取一定手段對程序執行情況進行檢查,進而證明軟件各階段中的完備性、正確性以及邏輯協調性。舉例來說,我們驗證的對象包括測試用戶需求和系統分析員報告是否想和、設計說明書和測試需求說明書是否匹配等。
4軟件測試目的及原則
4.1軟件測試目的
測試目前因立場的不同又可以分為兩種,從客戶角度來看,總是會希望通過測試來發現軟件中的缺陷及隱蔽錯誤。而從軟件開發者角度來看的話,則是希望產品少出現錯誤,對軟件已經符合客戶需求進行驗證,在這種思路下,測試人員會使用一些導致程序失效概率小的測試模塊進行測試,并對容易導致錯誤暴露的測試用例進行回避,而且對于有可能出現副作用的語句也并不會去刻意的檢查。基于此,在程序中,還存在很多預料不到的問題,而這類問題往往要在一些比較特殊的環境之下才能夠表現出來。從以上分析我們可以看出,在對軟件進行測試的過程中還是要更多的站在用戶角度對問題進行考慮。
4.2軟件測試原則
(1)“盡早和不斷的進行軟件測試”,只有時刻牢記這一原則才能夠降低軟件開發中由于工作多樣化、人員配置復雜化所帶來的不利影響。具體實踐的時候,我們首先要端正態度,對各階段技術審核要認真進行,另外,我們還要將軟件測試貫徹到每一個環節中,進而早對錯誤進行發現和預防。
(2)測試用例選擇的過程中要有輸入數據和以及和輸入數據相對應的預期輸出結果,具體來看,在我們進行軟件測試的過程中要選擇比較適合程序段的測試用例,這些用例可以對程序員所編制的程序是否存在錯誤進行分析,而給出預期的輸出結果則可以對程序段是否存在錯誤進行更為快捷的判斷。
(3)要避免程序員對自己的程序進行測試,在軟件測試的過程中,冷靜的情緒以及客觀的態度是不可避免的,而人又很難對自己的勞動成果進行否定,因此在程序員對自己程序進行檢查的過程中會從主觀上出現偏差,導致測試結果不準確、不客觀。
(4)設計測試用例的過程中要注意使用不合理輸入套件,所謂不合理輸入條件主要包括輸入異常或者會導致異變的條件。在軟件正常使用的過程中,不合理輸入是不可避免的,輕則會導致運算錯誤,嚴重的時候甚至會使軟件失效。
(5)對測試工作中的群集現象進行注意,針對測試過程中錯誤較多的程序段,要對其進行詳細認真的檢查,這是因為從經驗上看,程序段中殘存的錯誤于已發現的錯誤往往會成正比。
(6)對測試要認真執行,這是指我們要做好一個詳細的規劃,具體來說,規劃主要包括:軟件功能、輸入、輸出以及每一功能測試的進度安排等。
(7)對測試計劃、用例、出錯統計以及分析報告等進行妥善的保管,進而為日后的軟件維護提供更為便捷的服務。總體來看,在我們的工作中如果能夠把握住以上原則必然能夠對提升測試工作的效果起到很強促進作用。
5結語
在軟件開發工程中,軟件測試屬于一個重要的環節,一旦缺乏了這一環節,所開發出的產品必然難以滿足用戶的要求。本文關于軟件測試必要性的分析還存在很多不足之處,也希望各位測試人員能夠對其進行補充及指正,進而共同促進這方面研究水平的提升。
作者:樓煒單位:同濟大學軟件學院
按照軟件特征分類,軟件測試可分為:功能測試和性能測試。功能測試是黑盒測試的1個方面,它檢查實際軟件功能是否符合用戶的需求。一般分為:邏輯功能測試、易用性測試、安裝測試和兼容性測試等。性能測試主要有時間性能測試和空間性能測試2種。通常還包括:一般性能測試、可靠性測試、負載測試、壓力測試。其它分類還包括:回歸測試、冒煙測試、隨機測試。回歸測試是指對軟件的新版本測試時,重復執行上一版本測試時的用例。冒煙測試是指對一個新版本進行系統大規模的測試之前,先驗證一下軟件的基本功能是否實現,是否具備可測性。隨機測試是指測試中所有的輸入數據都是隨機產生的,其目的是模擬用戶的真實操作,并發現一些邊緣性的錯誤。
軟件測試過程一般來說,軟件測試工作從立項后就開始了,主要經歷以下幾個主要環節,如圖1所示。需求分析是軟件測試的1個重要環節,測試人員對這一環節的理解程度將直接影響后續測試工作的開展。一般而言,需求分析包括軟件功能需求分析,測試環境需求分析,測試資源需求分析等。測試計劃的依據主要是項目開發計劃和測試需求分析結果而制定,測試計劃指導整個測試過程。測試設計在測試活動的各個階段,對測試策略、測試方法、測試用例進行制定和編寫。測試環境搭建要盡可能模擬實際應用場景,滿足項目的設計要求,從而達到理想的測試效果。測試執行和測試記錄由測試工程師完成,主要是查找軟件的錯誤和缺陷,并記錄測試活動中出現的問題。缺陷管理是對測試活動中出現的BUG進行管理和跟蹤,保證每個BUG得到及時修復。軟件評估是在測試活動的最后,對軟件進行全面地分析和總結。
鐵路產品開發過程中容易忽視軟件測試
鐵路產品供應商普遍重視占領市場份額,追求利益的最大化,提升產品的服務質量,但是卻容易忽視保證產品質量的軟件測試,這給鐵路安全運輸帶來巨大安全隱患。項目的開發過程通常是確定項目負責人和項目參與人、項目的方案以及項目需要完成的時間,然后投入項目的開發。研發過程中采用團隊協作,項目分工到人,經過程序編寫、調試,最后集成為產品,并在實驗室和現場環境下進行測試實驗。對于項目進展情況的掌握是通過不定期的召開會議和單獨詢問主要開發人員以及研發人員匯報來實現的。
在這種開發模式下,因為項目的開發過程中沒有系統和獨立的測試過程,所進行的測試也是以正向思維為主,重點驗證軟件是否實現了相應的功能,而不是軟件在異常情況下的響應和處理。軟件開發和軟件測試本來就是不同的活動,開發人員的工作目標是創建相應模塊,實現特定功能,從而會不自覺地朝這個方向努力,挑選那些使程序出錯可能性較小的測試數據和手段,無法保證軟件被全方位進行測試,會給項目帶來隱患。正是認識到這一情況,才大力主張產品開發應進行科學和規范性管理,加強軟件測試隊伍建設,任命專職人員從事測試工作。利用軟件領域中的相關技術,對軟件進行科學、合理的測試。
如何在企業內部實施軟件測試
企業想要在產品開發過程中,對產品軟件展開相關測試,首先應建立合適企業特點和開發模式的測試流程;其次,對不同測試階段和不同產品的軟件和硬件的特點,擬采用不同的測試技術和策略。另外,在產品開發過程中,項目的配置管理、質量保證的等方面都應形成明確的制度。
1測試流程
企業應全面規范項目開發管理流程,對項目進展的各個階段進行明確劃分。軟件測試是建立在軟件開發的成果之上,即測試的對象就是軟件開發的階段性成果,如設計文檔、程序代碼和可執行的程序。
軟件測試和硬件測試的側重點有所不同。對于軟件測試,采用比較通用的測試流程,如圖2所示。軟件項目的開發從項目立項開始,測試人員介入項目組,明確需求分析階段的用戶需求,針對不同測試階段的工作重點,制定各階段的測試計劃。在設計測試階段,測試人員需要確定各測試階段的測試方法和必要的測試工具,搭建測試環境,編寫相應的測試用例。接下來,按照測試計劃分別進行單元測試、集成測試和系統測試,形成各階段的測試報告,對測試過程中發現的缺陷進行跟蹤,保證缺陷得到及時修復。為了保證軟件在現場環境下能夠正常運行,測試人員針對現場實際情況,制定現場驗收計劃,確定現場驗收策略,對軟件進行現場驗收和評估。當軟件通過了各階段的測試,且全部缺陷得到修復,將進入到軟件的階段。軟件階段通過對軟件版本的管理和控制,實現軟件、維護和升級等。
對于硬件測試,需要面向硬件編程,即在硬件環境下,編寫代碼,實現采集、控制、通訊等功能。由于硬件產品的開發不能脫離硬件環境,因此,測試活動與硬件產品開發、過程調試、硬件聯調都是密不可分的,軟件測試作為硬件產品開發過程中的重要環節,“驗證”和“確認”產品滿足項目的設計需求,硬件產品開發流程如圖3所示。硬件產品的開發,首先要明確硬件需求,預計產品達到的效果。在硬件總體設計階段,獲取硬件需求,并根據功能進行模塊劃分,定義模塊之間的接口。在詳細設計階段,對各模塊進行編程,搭建相應的硬件電路。過程調試可分為:軟件過程調試和硬件過程調試兩種,軟件過程調試指的是在硬件電路的環境下,進行軟件調試的過程,保證軟件能夠正確控制硬件電路和讀取相應數據;硬件過程調試指的是產品電路部分的調試過程,驗證電子器件之間邏輯是否符合系統設計要求,保證硬件產品穩定、可靠,不受干擾。各硬件功能模塊調試成功后,需要進行整體硬件聯調,各硬件模塊被連接成1個整體,形成產品的雛形,在此階段,主要驗證各模塊之間的接口是否符合設計要求,是否能夠實現系統設計的各項功能。硬件產品經過整體聯調后,形成樣機。測試工程師根據產品的硬件需求說明,制定測試計劃,確定測試方案和測試方法,并搭建測試環境,對樣機進行硬件測試,確認產品符合硬件產品設計要求。
2軟件測試技術在各階段的運用
在軟件測試實施的各個階段,所采用的測試方法和測試策略也各不相同。下面對于測試過程的各階段進行分別敘述。
2.1設計和代碼審查
設計審查是由項目組和測試組成員組成評審組對軟件設計和開發的輸出進行評價,以判斷確定設計和開發的輸出能否實現軟件產品預先定義的規格,同時通過審查標識出與項目需求之間的偏差。設計審查按《項目計劃》所規定的評審點進行。因臨時變更引起的突發性的評審隨時進行。代碼審查實際上屬于靜態測試。在代碼審查之前,首先要對代碼進行靜態分析,其目的是通過對源程序分析、目測,但不執行程序,找出源代碼中可能存在的錯誤和缺陷,對程序設計的結構屬性,如分支、路徑、轉移等進行審查,盡可能地掌握程序的結構,為單元測試的測試用例的設計和執行提供信息。代碼審查的目的是檢查源程序編碼是否符合詳細設計的編碼規定,確保編碼與設計的一致性和可追蹤性。檢查的方面主要包括:書寫格式、子程序或函數的入口和出口,數據,參數,程序語言的使用,存儲器的使用,可讀性,邏輯表達式的正確性,代碼結構合理性等。靜態分析和代碼審查通常可以同時進行,通過靜態分析掌握源程序結構,通過代碼審查,盡量減少書寫錯誤和隱含的邏輯錯誤,為單元測試提供比較穩定的環境。
2.2單元測試
單元測試是軟件測試的基礎,集成測試、系統測試都是建立在單元測試之上。單元測試是用來檢驗每個軟件單元能否正確地實現其功能,滿足性能和接口要求,還要驗證程序和詳細設計說明的一致性。從廣義上來講,單元測試包括靜態測試和動態測試。靜態測試就是上面介紹的“代碼審查”,而動態測試則是通過測試用例、測試工具來執行程序,檢驗程序是否存在缺陷的過程。單元測試一般采用白盒測試方法,手工測試和自動測試相結合,針對程序內部的結構和邏輯來展開,單元測試工具一般針對不同編程語言和開發環境而設計開發的,種類很多。我們利用白盒測試進行代碼測試,利用黑盒測試進行功能性測試,利用回歸測試保證維護代碼的完整性。單元測試工具固然有用,更重要的是測試策略,以及測試用例的設計。這也提醒我們在做單元測試的過程中,不可避重就輕,要抓住項目核心,進行科學、有效的測試,只有這樣才能達到事半功倍的效果。
2.3集成測試
集成測試階段采用白盒測試和黑盒測試相結合的方式,將每個獨立的功能模塊進行關聯和集成,便于進行功能測試、界面測試、結構測試、數據正確性測試等。在進行集成測試前,測試工程師要搭建測試所需的硬件和軟件環境,盡量模擬設備實際的工作環境。結合項目的不同特點,測試過程可以采用手工或自動測試。在進行多次重復測試和回歸測試的情況下,可采用自動化測試工具對軟件進行功能性檢測。
2.4系統測試
在系統測試階段,不僅要進行功能測試,還要對系統的性能、安全性、兼容性和可靠性等進行測試,系統測試涉及人機交互和復雜邏輯,因此系統測試多采用黑盒測試的手工測試方法。系統兼容性測試要考慮軟、硬件的兼容性。項目開發的硬件和軟件要在指定的環境下,進行多次反復的安裝和反安裝測試,以驗證接口數據調用和驅動程序是否達到設計標準。安全性測試和軟件的安全策略密切相關,安全性測試主要包括:用戶訪問權限、數據庫安全性、文件安全性等。性能測試、負載測試等必須借助測試工具來實現。過分強調測試工具的作用,極力追求各種軟件測試工具,是軟件測試本末倒置的表現。實際上,測試過程中80%以上的缺陷是手工測試發現的,僅有不到20%的缺陷是靠工具測試發現的,而且這還得要求測試人員合理地使用工具。
3采用的測試模型
企業對產品開發應重點關注產品開發的過程控制,以及測試、管理。保證產品質量從源頭開始。因此,測試過程更適合采用W模型,如圖4所示。在W模型中,測試過程和開發過程都貫穿項目開發過程的整個生命周期,兩者同時開始,同時結束,相輔相成、始終保持著同步的關系。這樣做的原因是:測試工作盡早介入,軟件存在問題的可能性就會降低。項目正式立項后,測試人員既可參與到項目組中,通過學習和閱讀相關文檔,加強對項目的了解,對項目有個整體認識,形成初步的測試思路。同時測試越早介入項目就能夠越早發現問題,解決問題所花費的成本越小。如果在軟件的最后階段進行測試,發現功能設計不合理或性能不好,需要修改需求和設計,不得不返工到系統設計或需求定義階段,會造成很大的代價,所以有必要將軟件測試延伸到需求、設計階段,對需求、設計進行驗證。有資料表明,60%以上的軟件錯誤不是程序錯誤,而是分析和設計錯誤。若把軟件分析、設計上的問題遺留到后期,可能造成設計、編碼的部分甚至全部返工,從而增加軟件開發成本及延長開發周期等后果。同時,需求和設計階段所產生的缺陷具有放大效應,嚴重地影響軟件質量。因此,為了更早地發現并解決問題,降低修改錯誤和缺陷的代價,有必要將測試延伸到需求分析和設計階段中去,使軟件測試貫穿于整個生命周期,提倡軟件生命周期測試的理念,即軟件測試是對軟件形成過程中的所有工作產品(包括程序以及相關文檔)進行的測試,而不僅僅是對程序的運行進行測試。測試在對需求和設計階段的測試活動主要是通過需求評審和設計評審來實現,可以更早發現問題,及時修改問題。即對軟件開發階段中的階段性產品進行評審、走讀或者回憶評審,發現其中的問題,是一種靜態測試。通過靜態測試,可以更早地發現問題,把問題消滅在萌芽中,將每個階段產生的缺陷及時清除。
總結
軟件測試作為專業性比較強的技術在我國起步較晚,受重視程度不夠,但它是保證軟件質量的終極手段,目前越來越受到了人們的關注。鐵路行業的生產企業,認真做好產品質量把關,合理運用相關檢測技術,將軟件缺陷消滅在萌芽階段,保證鐵路運輸和人們生命財產的安全。
作者:朱劍輝單位:哈爾濱鐵路局科學技術研究所