時間:2022-03-24 09:28:07
導言:作為寫作愛好者,不可錯過為您精心挑選的10篇測試計劃,它們將為您的寫作提供全新的視角,我們衷心期待您的閱讀,并希望這些內容能為您提供靈感和參考。
一、測試范圍
1.尚未參加普通話水平測試或已參加普通話水平測試尚未達到規定級別的國家公務員、機關工作人員、各級各類學校的教師、教學管理人員、教學輔助工作人員、播音員、節目主持人、出鏡記者、節目主持人、影視劇演員、話劇演員、導游員、講解員、話務員、廣播員及其他直接面向公眾服務的相關服務部門(如:稅務、工商、商貿、交通、金融等行業)窗口服務人員。
根據國家有關規定,上述范圍內在年6月15日以前測試并取得等級證書的有關人員,均需要重新參加測試。
2.按照市教育局《關于加強學校語言文字工作的基礎地位全面推進學校語言文字工作規范發展的通知》要求,年齡在35歲以下、應參加升級測試的教師。
3.按照《省實施〈國家通用語言文字法〉辦法》和省人民政府辦公廳《關于進一步加強語言文字工作的意見》的有關規定,師范類、中等職業學校、高校的應屆畢業生應參加測試并達到二級乙等以上水平。
二、計劃提報
1.區教體局負責提報所屬各中小學、民辦學校的教職員工的測試計劃。
2.區人力資源和社會保障局負責提報區內國家公務員、機關工作人員、媒體工作人員、窗口服務人員及社會其他人員的測試計劃。
三、有關要求
1.市語委辦根據各單位計劃提報情況,統籌安排測試時間。
2.未提報計劃的單位,原則上年不予安排測試。
1.1 自動化關鍵技術簡介
自動化測試的核心就是對象識別技術。腳本錄制的主要目的是采集對象信息并生成相應的腳本。回放的過程就是根據這些信息進行對象的識別和執行相應的腳本。
對象識別本質是根據關鍵屬性來確認對象,然后在該對象上執行相應的操作。如下圖所示:
1.2 自動化測試框架的作用
減少冗余代碼、提高代碼生產率、提高代碼重用性和可維護性。提高開發速度,提升測試代碼的執行效率。
提高軟件代碼質量,同時引入重構概念,讓代碼更干凈和富有彈性。
1.3 自動化測試框架的主要類型
數據驅動測試框架
數據驅動測試是測試腳本從數據文件(數據池,CVS文件,Excel文件等)中讀取輸入和輸出數值并載入到錄制的或手工編寫的腳本變量中的一種框架。在這種框架里,輸入數值和輸出數值都使用變量。測試數據包含在數據文件里而不是在腳本中被硬編碼。不同的數據文件對應不同的測試用例。在這種模式下數據和腳本分離,腳本的利用率、可維護性大大提高。
關鍵字驅動或表格驅動測試測試框架
關鍵字驅動和表格驅動測試在是數據驅動基礎之上,進一步提高自動化測試的靈活性和擴展性的框架解決方案。在關鍵字驅動框架下,除了要設計應用程序的測試數據表,還要生成一個關鍵字數據表。這個關鍵字包含了程序的特性,或者是有關程序的操作。
基于UI功能的自動化測試
圖形用戶界面(Graphical User InterFace, GUI)就是使用圖像,輸入的文字,帶有圖標的計算機界面。GUI可以讓用戶通過圖標和鼠標與計算機進行交互,而不是在命令行中輸入文本。 一般來說,應用程序(包括桌面程序和web應用)有一些基本的界面控件, 如窗口, 消息對話框, 菜單, 按鈕, 復選框, 組合框, 列表框, 文本輸入框, 組選框, 樹形視圖, 瀏覽器, 日期選擇控件等。它們有些是屬于Windows桌面應用程序, 有些是屬于Web DOM對象。
所有軟件的指令都通過這些控件以事件或消息的形式傳遞給后臺處理程序。自動化測試腳本的開發過程就是一個工具模擬人工操作的過程。人員要通過工具去操作(錄制), 工具要能“學習”并掌握這個過程(對界面控件的識別能力),最終能夠獨立完成測試(回放)。
2.1 利用HTML DOM編程接口實現UI自動化測試
HTML DOM(HTML Document Object Model)文檔對象模型定義了訪問和處理HTML文檔的標準方法。所有的WEB瀏覽器都內嵌了DOM解析技術,包括IE和FireFox等。要改變頁面的某個元素或節點,瀏覽器中的JavaScript就需要獲得文檔中所有元素進行訪問來獲得每個對象的入口。這個入口,連同對HTML元素進行添加, 移動, 改變或移除的方法和屬性,都是通過文檔對象模型來獲得的(DOM)。
我們來看下,如何用HTML DOM接口來實現在百度的首頁(見下圖)上完成自動搜索。
“文本輸入框”源碼:
“百度一下按鈕”源碼:
如果想通過DOM接口來完成自動搜索的過程,則VBScript代碼如下。以下代碼保存在VBS文件里, 雙擊運行。
Set WshShell=WScript.CreateObject("WScript.Shell")
Set ie=CreateObject("internetexplorer.application")
ie.visible=1
ie.navigate("http://")
Do while (ie.busy=True)
wscript.sleep 1000
Loop
Set docRoot=ie.Document
docRoot.getElementById("kw").value="163"
docRoot.getElementById("su").click
DOM對象接口就是對WEB UI實施自動化測試的技術基礎, 理論上,只要獲得DOM的根節點,依次遍歷,就可以對根下所有的對象進行操作了。但它的缺點是過于低層,需要自動化測試開發人員對DOM非常的精通,而且要開發大量的遍歷函數,才能完成一個基本功能的操作。
2.2 QTP測試工具
QTP(Quick Test Professional)是HP公司提供的自動化測試工具,其腳本語言為VBScript, 目前最新版本為11。 主要為GUI自動化測試提供解決方案。 QTP提供了VB Object, Windows Object, Web Object等對象接口, 生成的VB Script腳本好具有可讀性好,面向對象等優點。
使用QTP錄制百度搜索的操作, 生成的腳本如下:
QTP在錄制的過程中, 捕捉頁面上的元素,錄制生成了4個QTP對象(如下圖)。這些對象以樹狀的組織形式存儲在QTP的對象庫里。每個對象的屬性存儲了此對象的相關信息,對象的層次關系代表對象在界面上的隸屬關系,即DOM的層次關系。
當腳本回放時, QTP會從對象庫中讀出對象的屬性, 按對象層次結構, 依次與頁面上的各個元素進行比較。如果匹配成功則執行QTP腳本里的動作, 完成回放, 否則,腳本將會報錯, 停止運行。
因此,可以看出QTP是在HTML DOM的基礎上封閉了一套強大的QTP對象, 使得用戶對DOM的操作更加直觀和方便。
2.3 QC簡介
QC(Quality Center)是HP公司的一個基于 Web 且支持測試管理的所有必要方面的應用程序。QC測試流程包括四個階段(指定需求,計劃測試,運行測試,跟蹤缺陷)。
指定需求階段, 您可以創建一個“需求樹”,用于定義您的總體測試需求, 針對需求樹中的每個需求主題, 創建詳細的測試需求列表; 計劃測試階段, 創建“測試計劃樹”, 向計劃樹中添加每個測試的基本定義, 對于確定要自動化測試的, 使用測試工具創建測試腳本; 運行測試階段, 計劃測試執行并將任務分配給測試人員, 自動或手動執行測試集中的測試;跟蹤缺陷階段, 可以添加缺陷,查看新缺陷, 修復打開的缺陷。
QTP + QC + 測試數據管理工具 框架實例
測試管理平臺: 管理腳本的開發;管理腳本的執行;管理腳本的維護;管理測試的任務; 管理測試的報告
Quick Test Professional (QTP):讀取測試數據及全局環境變量;生成測試腳本 (對象識別); 執行測試腳本 (腳本回放);報告測試結果
測試數據管理工具(JAVA):從數據庫提取自動化測試數據;將測試數據存入測試數據管理文件;多線程并發提取數據
Excel(測試數據驅動): 保存測試數據 (輸入參數);保存測試結果 (輸出參數)
XML(全局環境配置): 保存全局環境變量
構建測試數據文件實例
建立外部測試數據文件(Test_Data.xls)。QTP腳本需要從此配置文件里讀取測試數據,需要將輸出參數寫回該配置文件。實現腳本與測試數據的分離。
此數據文件包含三張表(General, SQL, Other)。 第一張表(General)存放全局性的配置信息(如數據庫連接串,站點URL,是否“下載測試時所需動態鏈接庫文件”標志等);第二張表(SQL)存放所有QTP腳本需要讀取的測試數據和需要保存的輸出參數;第三張表(Other)保存一些其它的信息。一般情況下腳本開發人員需要使用“SQL”表。在該表內定義輸入參數的名稱(供腳本讀取),定義輸出參數的名稱(供腳本寫入),相應的SQL(供腳本運行此SQL,從DB里自動獲取測試數據)。如下面的圖片所示:
管理測試數據工具研發實例
通常對于大型項目的回歸測試來說, 一般自動化測試數據比較多;有的時候,測試數據需要實時從數據庫里提取, 這時候就需要有方法在啟動腳本前能夠快速的準備好測試數據,因為QTP本身對多線程支持的不是很好,所以可能需要開發另外的多線程的工具來支持快速的獲取測試數據。這很重要,不然手工維護大量的測試數據將會是令人沮喪的一件工作。
可以將該配置文件存于MQC的固定路徑下(自動化回歸測試腳本\通用\下載全局配置文件),在QC里建立測試集的時候,“下載全局配置文件”腳本應該首先被選中運行,腳本運行后,該配置文件將被下載到測試機上(c:\temp\目錄)供QTP使用。
研發工具工作流程的基本思路為:讀取測試數據配置文件(Excel) 加載配置文件中的SQL語句到內存 查詢SQL需要連接的數據庫的類型 連接對應的數據庫(并發) 執行SQL查詢(并發) 返回查詢結果(并發) 將結果寫入數據配置文件(Excel)關閉數據庫連接、關閉系統文件連接
腳本的復用實例
為提高QTP腳本的復用度, 盡可能將常用功能以函數庫的形式提供出來,或二次封裝常用的函數接口以方便調用,或編寫常用的Action供別的腳本調用。基本上可以將代碼大致分成三類,如下圖所示:
6.1 構建底層庫函數實例
6.2 構建公共庫模塊腳本實例
“登錄腳本”:用于登錄系統
“退出腳本”: 該腳本用于退出系統
“獲取訂單腳本”: 該腳本用于從頁面獲取訂單號
腳本規范實例
在腳本最前面加上基本信息: IE版本,QTP版本,項目名稱,腳本編寫人, 腳本創建時間,腳本修改時間,修改說明,輸入參數,輸出參數,功能描述, 調用庫函數說明,調用共享對象庫說明,調用場景恢復文件說明,調用存在的Action說明,更改默認Action的名稱,業務流程說明,其它說明。舉例如上。
輸入,輸出參數: 原則上,所有的輸入參數需要定義在配置文件內(Test_Data.xls)供腳本讀取; 所有的輸出參數需要保存入配置文件內(Test_Data.xls)供其它腳本視需要讀取。
檢驗點: 一般情況,腳本里應該需要加上必要的校驗點; 業務完成后,需要在頁面上對業務結果進行校驗; 有訂單產生的,需要在數據庫里校驗訂單是否竣工。
常量命名規范: 常量的命名應該全部用大寫,使用"_"作為單詞間的分隔符,單詞盡量使用全名稱. 如: Public Const MSG_EMPTY_ROW As String = "有空行存在"。
變量命名規范: 變量命名大小寫:盡量使用錯落有致的大小寫字母命名變量,錯誤的命名如STRNAME,正確的命名如strName.用標志性的前綴來指明一個變量的數據類型,如:strName, intQuantity, blnFound, dteNow, objCurrent。如果是一般的臨時性變量定義,應該盡可能地簡單 (如for循環:for i=0 to 5).
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)1120059-01
任何長期的軟件項目的測試工作最終都會進入自動測試階段。軟件開發的過程中在不斷的更新舊的功能增加新的功能,在此基礎上必須保證不影響原有的正常功能。自動化測試的引入使測試人員從繁重而枯燥的工作中解放出來,同時還能保證精確性。
隨著Adobe Flex編程技術的流行,基于Flex的軟件項目應運而生。然而,其美觀的界面卻相應帶來了測試的復雜性,它不同于數據驅動測試只顧輸入輸出,也不同于事件驅動測試只關注行為與結果,Flex產品與Flash一樣可作出動態的美麗的外觀效果,在事件處理上也及其復雜,這對測試帶來一些極大的挑戰。本文將介紹基于Flex的自動化測試框架。
一、自動化測試框架
首先讓我們看一下自動化測試框架,如圖1:基于自動化測試工具的測試過程不外乎三步:自動化測試初始化;自動化錄制;自動化回放。即測試工具能夠識別Flex的控件,通過錄制用戶的操作步驟模擬用戶操作,生成測試腳本,回放錄制的步驟,檢測結果,以達到自動化測試的效果。
二、Flex與測試工具交互框架
然而自動化測試工具如何能夠識別用戶各種操作并進行模擬呢?讓我們再來看一下Flex事件流框架(如圖2):
Stage相當于樹的根部為枝葉輸送養份而服務的,一個事件的觸發必須首先通過這個平臺進入,在對象的顯示列表中找到基類,再順延找到子類,在相應的地方去實現一個事件的處理程序。所有的顯示對象都有一個Stage的屬性用于指向應用平臺。每當事件觸發時,都會經歷從Stage到目標節點再從目標節點返回Stage的過程:抓獲階段,這個過程會抓獲在Stage上的所有節點的父節點;目標階段,查找到目標子節點;浮出階段,將查獲的子節點通過其父節點返回至Stage平臺上。
自動化測試工具對Flex事件的支持便是按照其事件流處理框架的標準來實現的,首先必須能夠找到所謂的Stage,然后識別Stage上的所有對象,進而找到那個唯一的子對象去獲得它的屬性及事件處理方法,自動化測試工具通過記錄用戶UI上的操作然后觸發事件流達到自動化操作的過程,再由用戶添加檢查點以達到測試的目的。因而,測試工具要模擬用戶操作必須要求能夠識別對象,而且用戶操作的事件流也必須按照如上圖所示的事件流來操作,即必須通過一個Stage平臺到Flex對象。
Flex在技術上又是如何與自動化測試工具交互的呢?為了支持Flex的自動化,Flex特提供了一個重要的包,即Adobe Flex自動化包(mx。automation。*):這個包為開發者創建Flex測試案例提供了自動化編程的接口。此包包含了:自動化庫-automation。swc與automation_agent。swc這兩個庫用于幫助實現Flex框架的組件的派生類。Automation_agent。swc文件以及與其相關的包提供普遍的機制。,如SilkTest,是建立在這些庫之上的。有了這些支持才便于測試工具去模擬Flex處理機制。而對于自動化工具本身也提供了支持Flex的接口,以達到自動化工具與Flex的通信與交互。如SilkTest也提供一個支持自動化的SDK,它是基于Flex自動化的API的。SDK以與Flex的AutomationAPI同樣的方式為Flex組件提供自動化支持。SilkTest的開放(Open Agent)使用了Adobe的Flex自動化庫。FlexTechDomain。swc文件即包含了SilkTest的具體實現實現方法。
Flex測試工程的準備工作與其它項目類似:開啟支持Flex應用程序測試的接口;創建可測試的Flex應用程序;編譯Flex容器(相當上面提到的Stage);使Flex事件與組件工具化(目的是為了使測試工具能夠識別Flex對象,并模擬其事件處理程序)。
三、測試維護框架
為了提高自動化測試套件的可維護性,還需要采取一些措施。推薦采用測試腳本模塊化框架。通過創建獨立的腳本來代表被測試應用程序的模塊、對象或函數,利用抽象和封裝的原則將過程對象與源應用脫離開來,增強測試腳本的重用性,可維護性,降低由源代碼的改變而帶來的腳本大量的變動、失效。由此,才得以更為有效的提高自動化測試的效率與可用性。例如,SilkTest將一項工程分為四類文件來管理,即測試計劃文件(.pln),由測試腳本與參數構成,類似于Function的一個實例,可用于分類管理測試案例;測試腳本文件(.t),可分類管理各類各個測試案例的過程描述;包含文件(.inc),可用于管理各種封裝后的函數;配置文件(.ini)。這種規劃管理一個復雜的工程項目得以有序清晰方便的進行管理。
四、結束語
由此,回顧整個過程,二個方面是我們在實現自動化測試的過程不可不關注的,它是自動化支持的瓶頸,是開啟自動化的鑰匙,即被測應用程序與測試工具的相互支持及測試腳本的有效維護。
參考文獻:
[1]《Programming ActionScript 3.0》,2008 Adobe Systems Incorporated.
中圖分類號: TP 31文獻標識碼: Adoi: 10.3969/j.issn.10055630.2013.02.004
引言隨著計算機應用日益普及和深化,用戶對軟件的需求越來越多,對軟件要求也總是在不斷變化[1]。AutoCAD產品在軟件國際化的過程中,每次修改都需要對大量的測試用例進行反復測試,還要在不同語言版本的操作系統平臺上測試,這就使得該項目的測試工作極為繁瑣。軟件自動化測試作為保證軟件質量和可靠性的關鍵技術手段,正日益受到廣泛的重視。但如何進行測試,如何提高測試的質量和效率,仍然是許多人深感困擾的問題[2]。根據對AutoCAD軟件測試項目研究與實踐的體會,介紹軟件自動化測試技術的概述、基本過程和實現。結合實用的Silk Test工具以及可擴展標記語言技術(extensible markup language,XML),給出整個自動化測試框架。1自動化測試概述整個自動化測試平臺包含兩部分:測試平臺和服務器平臺。測試平臺包含不同語言版本或者不同操作系統的平臺;服務器平臺主要含有源代碼版本管理庫和測試結果的關系數據庫[3]。一個規范化的軟件自動化測試過程通常包括以下幾個基本的測試活動:(1)自動化測試用例選擇對于Silk Test工具而言,它對Java的支持很好,所以如果是多模塊、多軟件測試,首先要盡量選擇和Java相關的部分來設計用例[4]。(2)自動化測試環境準備開啟windows遠程控制,設置文件的擴展名可見,安裝待測試AutoCAD系列產品,安裝測試過程所需的自動化測試軟件(Silk Test軟件)等等一系列配置。光學儀器第35卷
第2期商林霞,等:基于XML的軟件自動化測試
(3)自動化測試腳本開發Silk Test自動化測試工具支持簡單的捕獲同放功能,但是這并不是自動化測試。測試工具直接錄制產生的腳本是不能直接使用的,所以對于利用Silk Test工具編寫的腳本來說,通常是通過捕獲對話框圖形,抓到測試對象。然后利用Silk Test所提供的4Test語言來添加函數、控制結構等[5]。 (4)自動化測試報告生成分析腳本運行的結果是否符合要求,決定每個用例自動化測試是否通過。對測試結果進行分類整理,生成測試報告。對于不能通過的測試結果要進行分析、記錄和通報,方便相關的測試人員和開發人員了解測試結果。2自動化測試系統過程為了取得自動化測試效率和效益的最大化,現選取當前最適合自動化的測試用例。例如自動化測試腳本編寫異常復雜的用例、運行自動化測試腳本很難發現軟件缺陷的用例等等,都可以不運用自圖1自動化測試系統實現框圖
Fig.1Automation testing system
realization block diagram動化測試,而運用手動測試代替。同時在兩個測試版本的間歇進行新的腳本的開發,當有了一定數量的腳本之后,就讓腳本運行起來,發揮作用[6]。現只要保證自動化運行的環境足夠充足,那么每個測試版本所需的時間就會足夠短,節省了大量的人力。軟件自動化測試是一個極為復雜的過程。在不同的測試環境下,測試的流程也會有所不同。一般都要根據實際情況,制定相應的測試流程。從軟件測試對象出發,軟件自動化測試系統實現框圖,如圖1所示。對于不同語言版本的本地化測試,測試過程大體是相似的。首先根據AutoCAD軟件的功能特征選擇和設計測試用例,然后就是由測試用例編寫測試腳本,接著就是將這些測試腳本作為輸入運行程序,將通過測試得到的結果與先得到的英語版本的結果進行比較,最后就是將兩者的比較結果寫成測試報告,軟件開發者根據測試報告再決定對軟件如何處理[7]。3系統實現
3.1腳本生成根據測試設計中的每個測試用例,利用 Silk Test軟件進行編程,完成自動化測試腳本。腳本編寫完成,進行不斷地調試,直至完成的腳本符合測試用例驗證的要求。編程語言是4Test語言,整個腳本的思路是基于AutoCAD軟件對話框對象來實現的。函數中執行圖像錄像功能的語句,把整個自動化測試的windows平臺界面上的執行過程錄制下來,方便判斷軟件是否存在缺陷。針對每個自動化測試的測試用例,編寫測試腳本。每個測試用例都有數個測試確認點,測試腳本要保證每個測試確認點都能被執行自動化測試,生成測試結果。測試腳本程序示例如下:
3.2結果信息讀取軟件本地化測試的對象是本地化的軟件,需要在本地語言的操作系統上進行。以Windows中文語言操作平臺為例,用Silk Test工具運行該對話框對應的測試腳本,生成XML的結果信息文件,該XML記錄了該對話框上的所有信息:文字信息、控件位置信息、控件屬性信息。圖2中所示的AutoCAD軟件對話框的XML部分信息示例如下:
在獲取對話框信息之后,接著就要進行XML結果的分析。讀取XML文件信息的程序片段為:
其中,利用XPath的路徑表達式來選取XML文檔中的節點或者節點集[8]。如要讀取出對話框的標題信息“選擇樣板”,則正確的XPath語句是“/DIALOG/CONTROL[1]/Texts_LIST/@Texts_00000”。類似地,對話框上各控件的位置、大小、屬性等信息都可獲取到。如圖2中的截斷錯誤,都用紅色線框標示出來,提升了后期錯誤分析的效率。
3.3結果對比國際化軟件自動化測試包括軟件國際化測試和軟件本地化測試。軟件的國際化測試一般是英語版本的測試,必須在本地化測試之前進行。首先進行國際化軟件測試有助于判斷軟件國際化的設計程度,確定軟件支持的國家區域,以及本地化是否容易[9]。本地化測試過程中,以源程序軟件結果(標準英語版本)作為本地化軟件的主要參考。運行英語版本和本地化版本的結果比較程序,本地化版本對話框都將與標準英語版本對話框的各項信息進行對比。經對比本地化軟件存在缺陷時有三大類情況:(1)本地化軟件對話框的某項XML信息(控件的位置、大小、屬性等)是空值;(2)本地化軟件對話框的某項信息值的長度和標準英語版本的不一致;(3)本地化軟件對話框的某項信息內容(控件的位置、大小、屬性等)和標準英語版本的不一致。結果比較程序的部分示例:
3.4結果分析在實際的項目測試過程中,每一步都有很具體的內容。例如在報告測試結果的同時,實際上還包含了對測試結果的統計和分析,測試工程師通過對結果進行分析來判斷是否存在缺陷,將缺陷上傳至Test Desk網站進行管理。表1對話框界面的典型錯誤類型
高質量且高可靠性的企業應用程序系統是數字化時代非常重要的元素[1]。測試團隊在確保企業應用程序系統滿足既定標準或需求時會發揮非常重要的作用。隨著系統的規模和復雜性升級,其可靠性和質量要求必然成倍增長,這意味著測試團隊需要開發更有效的測試方法。一個完整的測試過程包括數據記錄、數據維護、數據驗證等多個方面。測試數據管理策略對于測試數據的記錄必須是全面的,這也為后期的數據分析挖掘提供了支撐。
陳翔等人在文獻[2]中重點闡述了回歸測試中用例優先排序(test case prioritization,簡稱TCP)問題。從源代碼、需求和模型三個角度對TCP問題進行分類,重點分析了回歸測試中測試資源缺乏時的TCP問題。另外,潘偉豐等人在文獻[3]中提出了基于錯誤傳播網絡的測試用例排序方法。該方法在類粒度將軟件抽象成加權類依賴網絡(weighted class dependency network, 簡稱WCDN)模型,并基于WCDN分析錯誤在網絡上的傳播行為,構造錯誤傳播網絡(bug propagation network,BPN)。實例研究表明,基于錯誤傳播網絡的測試用例排序方法在錯誤檢出率上相比于其他經典方法有一定的提高,并且具有較好的穩定性。一個全面的用例排序方法,能準確地將當前的軟件質量反映到執行用例的優先級上[4-5]。通過使用正確的TCP策略測試團隊能夠提供及早發現缺陷,在整個產品開發過程中,為提供更簡單的方法去解決系統缺陷提供支撐。因此,擁有正確的TCP策略對測試團隊乃至公司都至關重要,能加快系統周期并大幅削減成本。然而在現有的研究工作中,TCP策略問題主要集中在回歸測試階段,但是回歸測試處于整個測試過程的末端[6]。由于回歸測試時對于本系統缺陷分布情況有非常清晰的概念,但是由于處于末端,對于測試團隊的優化畢竟有限。同時測試團隊與研發團隊往往是單線交流,即研發團隊待測系統,測試團隊極少參與提高研發團隊的開發質量。
因此,可以從測試用例執行策略和測試結果反向優化開發策略兩個方面展開研究,并提高系統可靠性。測試用例執行順序問題是測試執行策略中非常重要的部分,在測試項目中持續優化測試用例執行順序可以提早發現潛在的缺陷。同時由于測試團隊對于項目整體的理解更為透徹,對缺陷的總體分析可以幫助研發團隊在類似問題上處理地更為妥善。測試團隊在需求分析階段的有效介入,將從源頭上提高系統的質量和可靠性。
1 測試執行策略優化
測試中的關鍵問題是第一時間發現被測系統不符合規范要求的內容。測試經理在測試規劃時是通過大量的測試用例保證測試的覆蓋率。持續優化測試用例執行順序是在保障測試覆蓋率的同時,合理地安排測試用例地執行順序,即TCP問題。文章提出將項目測試分為三個階段,在項目測試的初期、中期、后期三方面分別進行優化TCP,最終優化整個測試執行策略。
如圖1 所示,項目測試初期,分析測試用例的歷史數據得到測試用例的執行潛在價值,優先執行潛在價值高的測試用例。比如在其它項目中執行某些用例時,發現了系統不符合規范要求的部分,并提交了缺陷。在新的測試用例執行時,應首先執行這類測試用例以便快速發現系統缺陷。項目測試中期,分析本項目當前缺陷情況得到各個系統功能模塊的缺陷發生概率。優先執行缺陷分布較多的功能模塊相關的測試用例。項目測試后期,即回歸測試階段,需結合各個系統功能模塊在本項目和歷史項目中的缺陷發生概率,在保證一定回歸比率的情況下,綜合考慮本項目和歷史項目的分析,優先回歸測試缺陷發生概率較高的模塊。
2 需求分析優化
項目測試工作通常被安排在項目研發工作之后,測試團隊的主要工作也僅僅是將測試結果中發現的缺陷情況報告給研發團隊,并沒有對缺陷情況進行分析,可能使得類似的缺陷在不同的項目中反復出現。因此測試團隊在提供測試報告的同時,對各個功能模塊中所發現的缺陷進行分析,并在新項目立項初期給出系統模塊開發時的缺陷概率,幫助研發團隊在需求分析階段重點考慮高缺陷概率的模塊開發和模塊間的協作,從源頭上降低缺陷發生的概率。測試團隊與研發團隊的雙向反饋將優化產品設計的需求分析階段,提高系統的可靠性,如圖2所示。
圖2 測試團隊和研發團隊雙向通道
3 結束語
文章從優化測試用例執行順序和測試結果優化需求分析兩個方面,闡述了現在系統開發中提高系統可靠性的重要方法。測試數據的管理是一座金礦,對測試數據的深入分析可以讓整個測試過程不再是靜止的,而是可以動態調節以應對更復雜的情況,同時深入分析測試結果也可以建立測試研發的雙向通道,形成良性循環。最終可以超預期地提交高質量的系統,節約運營成本,完成市場搶占。
參考文獻
[1]K.Krishna Murthy, Janardhana S Channagiri, "test data management: Enabling reliable testing through realistic test data"Building Tomorrow's Enterprise, Oct 2009.
[2]陳翔,陳繼紅,鞠小林,等.“回歸測試中的測試用例優先排序技術述評”[J].系統軟件與軟件工程,2013(8).
[3]潘偉豐,李兵,周曉燕,等.“基于錯誤傳播網絡的回歸測試用例排序方法”[J].計算機研究與發展,2016(3).
一、策劃書名稱
盡可能具體的寫出策劃名稱,如“×年×月××公會××活動策劃書”,置于頁面中央,當然可以寫出正標題后將此作為副標題寫在下面。
二、活動背景 :
這部分內容應根據策劃書的特點在以下項目中選取內容重點闡述;具體項目有:基本情況簡介、主要執行對象、近期狀況、組織部門、活動開展原因、社會影響、以及相關目的動機。其次應說明問題的環境特征,主要考慮環境的內在優勢、弱點、機會及威脅等因素,對其作好全面的分析(SWOT分析),將內容重點放在環境分析的各項因素上,對過去現在的情況進行詳細的描述,并通過對情況的預測制定計劃。如環境不明,則應該通過調查研究等方式進行分析加以補充。
三、活動目的、意義和目標:
活動的目的、意義應用簡潔明了的語言將目的要點表述清楚;在陳述目的要點時,該活動的核心構成或策劃的獨到之處及由此產生的意義(經濟效益、社會利益、媒體效應等)都應該明確寫出。活動目標要具體化,并需要滿足重要性、可行性、時效性。
四、資源需要:
列出所需人力資源,物力資源,包括使用的地方,如教室或使用活動中心都詳細列出。可以列為已有資源和需要資源兩部分。
五、活動開展:
作為策劃的正文部分,表現方式要簡潔明了,使人容易理解,但表述方面要力求詳盡,寫出每一點能設想到的東西,沒有遺漏。在此部分中,不僅僅局限于用文字表述,也可適當加入統計圖表等;對策劃的各工作項目,應按照時間的先后順序排列,繪制實施時間表有助于方案核查。人員的組織配置、活動對象、相應權責及時間地點也應在這部分加以說明,執行的應變程序也應該在這部分加以考慮。
這里可以提供一些參考方面:會場布置、接待室、嘉賓座次、贊助方式、合同協議、媒體支持、校園宣傳、廣告制作、主持、領導講話、司儀、會場服務、電子背景、燈光、音響、攝像、信息聯絡、技術支持、秩序維持、衣著、指揮中心、現場氣氛調節、接送車輛、活動后清理人員、合影、餐飲招待、后續聯絡等。請根據實情自行調節。
六、經費預算:
活動的各項費用在根據實際情況進行具體、周密的計算后,用清晰明了的形式列出。
七、活動中應注意的問題及細節:
內外環境的變化,不可避免的會給方案的執行帶來一些不確定性因素,因此,當環境變化時是否有應變措施,損失的概率是多少,造成的損失多大,應急措施等也應在策劃中加以說明。
八、活動負責人及主要參與者:
注明組織者、參與者姓名、嘉賓、單位(如果是小組策劃應注明小組名稱、負責人)。
注意:
1、本策劃書提供基本參考方面,小型策劃書可以直接填充;大型策劃書可以不拘泥于表格,自行設計,力求內容詳盡、頁面美觀;
2、可以專門給策劃書制作封頁,力求簡單,凝重;策劃書可以進行包裝,如用設計的徽標做頁眉,圖文并茂等;
3、如有附件可以附于策劃書后面,也可單獨裝訂;
4、策劃書需從紙張的長邊裝訂;
5、一個大策劃書,可以有若干子策劃書。
網站策劃書策略
一、策劃前的思考
很多朋友,特別是個人站長,經常都是大腦一熱就建了個網站,新鮮兩天半后,又放棄了,最后往往自己被把自己打敗了。為了避免這種情況,在策劃網站前,我們一定先要想清楚一些問題!
1、建站的目標。是純興趣做著玩玩,還是為了賺錢。
2、精力有多少。是利用業余時間玩玩,還是全身心的投入。
3、投資有多大。是拿點零花錢隨便搞搞,還是把身家性命都賭上。
4、人員有多少。是一個人、三五好友組成的小團隊還是公司運營。
5、能堅持多久。這條主要是針對投資較大,以盈利為目的的。在不賺錢的情況下,能堅持多久?
二、確定大概方向
這里說的方向類型,是指網站大概涉及到的領域,就是你想從那方面入手,IT、音樂、還是其它領域。這里筆者提醒大家盡量選擇自己熟悉的、能玩得轉的領域,否則不但做起來非常吃力,而且很難成功!其實這步看起來容易,但并不容易。因為想一下就選擇到正確的方向太難了,這不但需要對整個互聯網有大概的了解,還要對所在領域有深刻的認識,同時還要掌握網站運營的相關知識。這些東西,都是需要時間去積累、沉淀的,否則很難有正確的判斷。
三、數據調查分析
確定方向后,我們還需要做一些調查,搜集一些數據。所謂知已知彼,百戰不殆。這方面包括的內容很多,比如受眾分析、市場現狀、競爭對手分析等,不同類型的站,需要搜集的東西是不同的,這個主要根據自己需求來。這里列幾個比較通用的項目:
1、搜集同領域內做的最好的十個網站。
2、分析他們的網站數據。包括排名、注冊會員數、欄目數(包括具體名稱)、文章數、每天更新量等。
3、分析他們的背景。包括建站時間、是否公司運營、團隊規模等。
4、分析他們的優缺點。比如他們的特點是什么、成功的地方在那里、失敗的地方在那里等。
5、最好列一個EXCEL表出來。
這些數據的作用很大,能夠幫助我們在接下來的工作中正確分析形式,做出判斷。所以切記切記,前期的相關調查和數據一定做細。
四、明確用戶定位
用戶定位說白了就是你的網站到底要干什么,為那些用戶提供什么內容和服務。這個是至關重要的,如果你的定位和面向的用戶群不明確、涉及的方面競爭太激烈、提供的內容不吸引人,肯定是沒有什么前途可言的。所以這步一定要想細、想透,圍繞用戶需求來想,多從不同的角度去想。建議大家思考時拿一張紙和一去筆,把想到的東西一條一條寫下來。這里強調一下,做網站一定不要貪多、貪大,要禁得住誘惑,不要動不動就說要做門戶。如果能把一個很小的點做好、做精,也是大網站。
五、確定內容服務
定位確定后,開始確定提供的服務,也就是欄目設定及功能模塊的設計。()這些主要還是基于用戶需求來考慮,盡量體現出特色二字。由于此條涉及的東西很多,所以筆者會專門撰文說明。
六、真能玩得轉嗎
通過以上的思考過程,網站大概的架構已經在腦海里成形了。但是我們在憑空想像時,總是把事情想的非常完美,而脫離實際,所以此我們還需要再思考一下“剛剛策劃出來的東西是否真的能玩得轉”!主要從以下幾點去思考:
1、網站涉及的領域真的是自己擅長的嗎?
2、網站的定位和內容,真的是用戶確實需要,而不是自己想像出來的嗎?
3、以現有的技術水平,能實現預期的效果嗎?
4、以現有的資金情況,能滿足網站的需要嗎?
5、如果是個人,真的有足夠的時間和精力去維護、更新嗎?
6、如果是團隊或公司,人員足夠嗎?
7、如果想賺錢,這個站有賺錢的點或是盈利模式嗎?
8、一旦失敗,能接受后果嗎?
七、執行
這個時候是落地實施的階段了,開始建團隊、設計網站頁面、程序等,具體的執行過程就不說了。
八、實戰
以上只是理論,大家可能會感覺不直觀,太抽象,下面筆者來模擬一個網站的策劃過程,給大家一個直觀的印象。
1、做網站的目的。筆者想利用業余時間,做一個個人網站,投入不大,就是個域名和空間的錢。賺不賺錢無所謂,將來能有所發展最好。涉及到的領域無所謂,關鍵是做起來別太吃力。
2、確定大概方向。從筆者做過好幾年個人站長,現從事互聯網行業的實際情況來看,對于網站建設、運營等方便的東西最了解,做起來也最順手。所以網站大概的方向就確定為站長站,專門為站長服務。
3、數據調查分析。現在我們來了解一些其它站長類網站的現狀,目前站長類的網站,做的成功的主要有以下幾個:
落伍者:ALEXA排名7147。這是一個社區型網站,整站就一個社區,沒有商業化。他的主要特點是有經驗的站長比較多,原創的內容比較多。其旗下還有一個站長SNS站。
中國站長站:ALEXA排名5050。這是一個老牌的站長站,知名度非常高,已經公司化運營。最早是以資源下載為主,現在還是他的主打內容,目前資訊方面做的也不錯。論壇一般,不如落伍,旗下有一個提供統計服務的站,非常不錯。
admin5:ALEXA排名22091,公司化運營。站長站中的后起之秀,內容做的非常不錯,深受站長喜愛。
其它:還有其它方面的網站,這里就不細舉了。
注:不做個人站長好多年,以上市場分析純粹瞎寫的。
從以上分析可以看出,雖然同類站點很多,但成功的也就這么幾家,如果我們不求大,只求精,還是有機會的。
4、明確用戶定位。現在我們拿出紙和筆,從不同角度去把網站用戶的需求一條一條寫出來:從建站的過程可以分為:建站前、建站中、建站后;從運營需求可以分為:SEO優化、賺錢技巧、市場推廣、內容建設等;從網站類型可以分為:論壇站長、地方站長、下載站長等。
建站前:主要包含空間的選擇、域名的選擇、程序的選擇、源碼的下載等。
建站中:主要包含網頁的設計、欄目的設定、內容的建設、一些免費的資源等。
建站后:網站的盈利、網站的推廣等。
1、古典風格(豪華富裕)
在裝修剛興起的年代,裝修大多追求的是較為豪華富裕的風格。尤其是在20世紀80年代和90年初,室內裝修往往是炫耀自己身份的一種特殊形式。業主們會要求把各種象征豪華的設計嵌入裝修之中,例如彩繪玻璃吊頂、壁爐、裝飾面板、裝飾木角線等等,而且基本上以類似于巴洛克風格結合國內存在的材料為主要裝飾方式。
2、樸素風格(隨心所欲)
20世紀90年代,在一些地區出現一股家裝熱。由于受技術和材料所限,那時還沒有真正意文上的設計師來進行家裝指導,因此隨心所欲就是當時的最大寫照。業主們開始追求一種整潔明亮的室內效果。時至今日,這種風格仍然是大多數初次置業者裝修的首選。
3、精致風格(高貴莊重)
在經過近10年的摸索,隨著國內居民的生活水平的提高、對外開放的增多,人們開始向往和追求高品質的生活。大約是從20世紀90年代中期開始,人們開始在裝修中使用精致的裝飾材料和家具,尤其是在這個時候,國內的設計師步入家裝設計行列,從而帶來了一種新的裝飾理念。
4、自然風格(藝術休閑)
20世紀90年代開始的裝飾熱潮,帶給人們眾多的裝飾觀念。市面上大量出現的臺灣、香港的裝飾雜志讓人們大開眼界,以前大家所不敢想像的諸如小花園、文化石裝飾墻和雨花石等裝飾手法紛紛出現在現實的設計之中。尤其是大家看慣了紅櫸大量使用所造成的“全國裝修一片黃”的裝飾現象之后,親近自然、返璞歸真也就成為了人們所追求的目標之一。
5、輕快風格(豪爽大方)
20世紀90年代中期開始,家居的設計思想得到了很大的解放,人們開始追求各種各樣的設計方式,其中現代主義、后現代主義等一系列較為完整的設計體系在室內設計中形成。人們在談及裝修時,這些“主義”頻繁地出現在嘴邊。這種風格基本上以櫻桃木作為主要的木工飾面。
6、柔和風格(平穩獨立)
在上世紀未本世紀初,一種追求平穩中帶點豪華的仿會所式的設計開始在各式房地產樓盤的樣板房和寫字樓中出現,繼而大量出現在普通的家居裝飾之中。這種風格比較強調一種較為簡單但又不失內容的裝飾形式,逐步形成了以黑胡桃為主要木工裝飾面板的風格。其中,簡約主義和極簡主義開始浮出水面。
7、優雅風格(恬靜溫柔)
這是出現在上世紀未本世紀初的一種設計風格,它基本上基于以墻紙為主要裝飾面材、結合混油的木工做法。這種風格強調比例和色彩的和諧。人們開始會把一堵墻的上部分與天花同色,而墻面使用一種帶有淡淡紋理的墻紙。整個風格顯得十分優雅和恬靜,不帶有一絲的浮躁。
8、都市風格(獨立個性)
進入21世紀,房改的進行,眾多年輕的初次置業者的出現,為這種風格的產生注入了動力。年輕人剛剛買了房子,很多都囊中羞澀,而這個時候的房地產基本上又都是以毛坯房(一種不帶基本裝修的風格)為主,這些年輕人被迫進行了裝修的革命。受財力所限,人們開始通過各種各樣的形式來強調已經“裝修”的觀感,其中大量使用明快的色彩就是一種典型的例子。人們會在家居中大量使用各種各樣的色彩,有時候甚至在同一個空間中,使用三種或三種以上的色彩。
9、清新風格(輕淡寫意)
關鍵詞: 測試用例;前置條件;粒度設計
Key words: test case;pre-conditions;granularity design
中圖分類號:TP39 文獻標識碼:A 文章編號:1006-4311(2012)20-0195-03
0 引言
軟件測試是軟件能否通向市場的最后也是最重要的一關,手工測試作為一種傳統的測試方式,其特點就是簡單。但存在很多問題,如大量重復性的工作導致成本較高,人員積極性下降,人員操作失誤引起的輸入錯誤等。
針對手工測試的缺點,自動化測試應運而生。但并不是所有的項目都適合引入自動化測試,也不是引入了自動化測試就會提高測試效率,降低測試成本。實際上自動化測試更需要開發和搭建測試框架,設計測試用例,這就意味著成本的投入。
1 自動化測試的設計原則
為了更好的體現自動化測試的優勢,當進行自動化測試設計時,需要考慮到當前項目并計劃到未來的項目。一個優秀的自動化測試設計,必須具備如下原則:①易于維護性-減少更新修改的工作量;②可靠性-測試結果精確,能夠真實反映當前項目問題;③復用性-測試腳本可以復用,包括在未來的其他項目里。
自動化測試中,自動化測試用例是一個重點中的重點,如何設計自動化測試用例是決定自動化測試成敗的關鍵。
2 自動化測試用例的設計
2.1 自動化測試用例設計特點 手工測試用例的執行實施是測試人員,在用例設計中所描述的行為主要使得測試人員能夠按照測試設計者的思維去執行測試。自動化測試用例編寫者是測試設計師而執行實施是計算機,自動化測試用例設計時必須滿足如下兩個原則:①測試用例能夠體現測試設計師的設計思維,并且盡量提供便捷的方式編寫用例,提高測試用例的編寫效率;②測試用例能夠被計算機所解析。自動化測試用例如果要被計算機所能解析,那么自動化測試用例必須有一套可以計算機識別解析的規則,并且需要涵蓋測試用例需要填寫的相關元素,盡量降低編寫的榮譽和提升編寫的效率。
2.2 手工測試用例要素 自動化測試所有活動都來源于手工測試活動,那么用例規則的提煉主要數據源將來源于現實工作中的測試用例。如表1所示手工測試用例。
傳統手工測試用例一般涵蓋元素:①測試用例名稱:區分不同的測試用例。②測試前提條件:這個目的主要是標識執行這個測試用例的之前,必須要完成的事情,這個事情可以是一個測試用例,也可以是其他的事務,比如說環境重置、數據清理等等。可選項。③測試步驟ID:這個目的是標識測試操作的先后順序。在一個用例中一般都是串行工作的,必需項。④測試的操作路徑:這里主要描述系統的操作過程,使得被測系統進行到可以檢測的位置或者檢測狀態,必需項。⑤測試數據:這里主要指的過程數據,即使得測試用例能夠通過測試數據的驅動,使得被測系統進入到可檢測的狀態,可選項。⑥期望結果:系統進行到檢測狀態后,系統應展現的出來的行為而應該出現正確的結果,如果系統所展現的結果與期待結果不符,標識為系統的缺陷。必需項。
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)06-1231-04
計算機的應用越來越多地深入到人們的日常生活中,然而計算機軟件還遠沒有達到零錯誤的要求。提高軟件質量已經成為軟件工程領域亟待解決的重要問題。軟件測試,作為一種提高軟件質量的重要手段而備受重視。在軟件的開發生命周期中,軟件測試是一個耗時耗力的過程,已成為軟件開發的瓶頸之一[1]。據統計,軟件測試約占軟件開發和維護成本的50%~75%[2],因此,改進和改善軟件測試技術變得十分迫切與重要。模糊測試[3]是一種通過提供非預期的輸入并監視異常結果來發現軟件漏洞的技術。模糊測試一般是一個自動或半自動的過程,這個過程包括反復操縱目標軟件并為其提供處理數據。近年來,有很多學者在不同類型軟件的軟件測試中都證實了模糊測試技術的有效性和自動化的特點。模糊測試技術針對不同類型的測試環境有不同的測試策略。例如,張等人[4]提出了一種針對網絡協議及模糊測試框架。沈等人[5]提出了一種基于文件規范描述的文件模糊測試算法,有效避免“無效”測試用例的生成,提高效率同時也增加了測試的全面性。
上面提到的模糊測試的研究重點主要集中在模糊器的設計與實現上,幾乎沒有涉及到錯誤定位的技術。基于頻譜的錯誤定位方法是基于實際執行的動態錯誤定位技術的具體應用。Harrold等人證實了程序頻譜與程序行為之間的關系,論證了通過研究運行失敗測試用例得到的頻譜信息與運行成功測試用例得到的頻譜信息之間的差異性可為定位出錯語句提供幫助[6]。該文調研了模糊測試技術和自動化錯誤定位技術的研究進展;第2節論述了自動化錯誤挖掘與定位技術可行性,并解釋本文技術的動機;第3節介紹自動化錯誤挖掘與定位技術的實現方法;模型的實現將在第4節給出;第5節總結并展望未來的研究方向。
1 研究動機
在軟件的生命周期中,軟件的維護成本所占比例特別大,所以一個好的軟件測試方法是非常必要的。一種優秀的測試方法可以發現軟件中存在的大部分漏洞,從而可以降低軟件的維護成本,提高軟件的質量。模糊測試是1989年由Bartoon Miller教授首先提出的,并通過模糊測試在UNIX存在的大量漏洞。在1999年Oulu大學開發PROTOS測試集,這標志著模糊測試發展歷程的一個重要里程碑。2002年PROTOS開始成熟,在2004年文件模糊測試開始興起,AxtiveX模糊測試在2006年開始流行。到目前為止模糊測試取得了一定的發展,已經是軟件漏洞挖掘中不可或缺的技術,但是這項技術仍然不是特別成熟[3]。圖1給出了模糊測試的過程。
軟件錯誤定位技術是通過運行測試用例得到程序的各條語句被測試用例覆蓋的信息,然后利用覆蓋信息計算出程序中語句的出錯可疑度[7]。在實際的測試過程中,有很多情況是測試用例導致程序的崩潰,程序崩潰時寄存器中的信息也是非常重要的。所以利用程序的覆蓋信息與程序崩潰是寄存器存儲的信息共同來定位程序的出錯信息可以提高定位的精度和速度。利用GCC中的GCOV命令可以收集C程序的運行的詳細信息,包括覆蓋率、代碼的執行路徑、程序的執行結果等信息。利用GDB調試器可以查看程序運行時CPU寄存器的狀態。
隨著計算機的不斷發展,程序的代碼越來越龐大,基于源代碼審核的白盒測試需要大量的人力和時間,這會大大增加軟件開發的成本。軟件測試的自動化是未來軟件測試發展的主要方向,通過把模糊測試技術和軟件錯誤定位技術結合起來,可以實現軟件測試的自動化,提高軟件維護的效率。
2 自動化錯誤挖掘與定位技術
在這一節將介紹自動化錯誤挖掘與定位技術的總體結構,以及對結構中各主要模塊的功能與實現。
2.1 自動化錯誤挖掘與定位技術的總體結構
為了實現軟件測試的自動化,所提出的解決方案由一下幾個模塊組成:模糊器模塊,測試結果記錄模塊,錯誤位置分析模塊。圖2為自動化錯誤挖掘與定位技術的流程圖。
圖2 自動化錯誤挖掘與定位技術的流程圖
2.2 模糊器模塊
模糊器模塊的主要作用是生成測試用例,并把測試用例提交給被測軟件,是模糊測試的核心結構。模糊測試可分為兩類[8]:基于變異的模糊測試和基于生成的模糊測試。對于不同的測試目標有不同的模糊器,其中主要的分類有:
1) 環境變量和參數。測試對象主要是命令行參數和環境變量,主要的模糊器是iFuzz。
2) Web應用程序和服務器。針對Web服務器的存在漏洞的模糊器有Dave Aitel開發的SPIKE和WebScarab。
3) 文件格式。針對特定的文件格式,用于挖掘客戶端文件解析漏洞,主要的模糊器有notSPIKEfile、SPIKEfile和FileFuzz。
4) 網絡協議。通過特定的Socket形式將變異或者含有錯誤的數據包發送給目標程序,相應的模糊器有SPIKE和ProtoFuzz。
此外對于特定的測試目標,我們也可以手動構造模糊器,在構造模糊器時要充分考慮程序中可能存在的問題,例如:拒絕服務、整數處理問題、簡單的棧和堆溢出、格式化字符串和目錄遍歷等。對于不同的問題確定模糊器不同的用例生成規約。例如,對于整數處理問題,我們可以設計這樣的用例規約:生成邊界值附近的測試用例0,-1,1,2,3,0XFFFFFFFF-1,0XFFFFFFFF-2等測試用例。此外,我們還可以直接在網上下載有用的工具和庫,具體請查看文獻[12]。
2.3 測試結果記錄模塊
我們的目標是實現軟件測試的自動化,所以就不能依賴人工識別錯誤。為了實現這個目標,我們需要一種可靠的,可編程的方法。有一種方法是檢查程序的返回代碼[9],在現在的UNIX和Linux系統中,如果一個應用程序因為一個為處理的信號而中止,那么Shell的返回代碼將等于128加上該信號數字。可以利用這個值來判斷不同的錯誤。還有就是把應用程序連接到調試器,錯誤處理機制將阻止由模糊測試所導致的許多錯誤的明顯標記,但是這些錯誤一般可以通過使用一個調試器來發現。在Linux操作系統中,GDB就是一個特別好的調試器,一般來說,GDB主要幫助你完成下面四個方面的功能:1)啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序;2)可讓被調試的程序在你所指定的調置的斷點處停住;3)當程序被停住時,可以檢查此時你的程序中所發生的事;4)動態的改變你程序的執行環境。對于有些應用程序,我們也可以通過見識其運行日志帶識別程序的運行結果。
測試用例執行路徑是用于錯誤定位分析的主要數據,檢測程序的主要方法是在程序的源代碼中進行插樁,根據程序的執行結果來得到一個測試用例的執行路徑。但是這種方法是基于語句的,在前期對源代碼的處理中費時費力,效率低下。在這里提出了一種新的插樁策略,在程序運行的時候,有很多語句塊只要語句塊的第一條指令被執行,其后面的所有語句都會被執行,把這樣的代碼塊稱為基本塊。在插樁時以基本塊為單位,這樣可以減少前期的準備工作,又可以提高程序的運行效率。
對于每個測試用例的結果都進行保存,用于最后的定位分析。我們把用例執行的相關信息保存到數據庫中,其中數據庫有三個標,分別用為:
1) 代碼表(codes),用來存儲程序的源代碼;
2) 用例執行信息表(info),用來存儲用例執行的各種信息,主要用,測試用例、執行路徑、執行結果等;
3) 異常表(abnormal),存儲導致程序出現異常時CUP各寄存器以及堆棧中的信息。
下面是記錄模塊的結構圖。
圖3 記錄模塊結構圖
2.4 錯誤位置分析模塊
錯誤位置分析模塊的功能是根據數據庫中的測試數據計算可能出錯或存在漏洞的語句。因為數據庫中記錄了每條測試用例的執行路徑和執行結果。可以利用數據庫強大的數據處理能力,計算出錯路徑中每條語句的可疑度,其計算公式如公式(1):
[RESULTi(s)=TFi(s)TFi(s)+TP(s)] (1)
其中,TFi(S)經過語句S出錯(錯誤類型為i)的測試用例個數,TP(S)是正常經過語句S的測試用例數。最后得到的結果為一系列語句可疑度的列表,其中可疑度最大的,出錯的可能性也最大。
3 模型實現與實驗
實驗模型是建立在ubuntu 13.04 操作系統上,應用的開發語言是Python 2.7.4,數據庫是Mysql Server 5.5.31。在實驗模型中主要用到的軟件有GCov 4.7.3和GNU gdb (GDB) 7.5.91.20130417-cvs-ubuntu。GCov用于收集用例執行路徑,Gdb用于查看測試軟件的執行細節。實驗用的目標程序是從SIR[10](http://sir.unl.edu)網站上下載的grep。實驗中數據庫表結構如下表。
表1 目標程序代碼表
表2 用例執行路徑表
表3 用例執行路徑表
通過簡單的模擬實驗,驗證了該方法在軟件測試中代碼覆蓋率、漏洞定位準確性有明顯的提高,并且為發現的漏洞提供了相應的信息。并且在整個軟件測試過程中,需要人干預的地方很少,基本實現了從用例生成、錯誤檢測和錯誤定位的自動化。
4 總結與展望
本文中提到的軟件測試方法實現了軟件測試中用例生成、測試與錯誤定位分析的自動化,提高了軟件測試的效率,加快了軟件開發的周期,降低了軟件維護的成本。同時該方法也存在一定的局限性,不能測試出軟件中存在的邏輯錯誤,也不能能驗證軟件功能的完整,只對軟件中存在其他錯誤(非法引用、堆棧溢出、格式化字符串等)有效。
在以后的研究中,應探索新的軟件錯誤定位的方法和技術。可以從一下幾個方面展開研究:
1) 利用動態的二進制插樁。在軟件測試中,有很多錯誤不能直接被發現,例如:函數的堆棧溢出,如果溢出只是覆蓋了函數中的一些變量,沒有覆蓋函數的返回地址,即EIP的值。這種情況程序是不會報錯的,根據程序的運行結果很難定位錯誤。所以利用動態二進制插樁來實時監控程序的運行狀態是一個不錯的研究方向。
2) 利用人工只能,實現軟件錯誤定位與自動修復。隨著計算機技術的發展,軟件規模越來越大,Binkley 估計到 2025 年人們開發的代碼將達到萬億行[11]。面對數量龐大的代碼,數據挖掘、機器學習等人工智能技術將會在故障定位方面得到很好的應用。
參考文獻:
[1] Zhang Yu-Qian,Zheng Zheng,Ji Xiao-Hui. Markov Mpdel-Based Effectiveness Predicting for Software Fault Location[J].Chinese Journal of Computer, 2013,36(2):445-448.
[2] Yu Kai,Lin Meng-Xiang.Advances in automatic fault localization techniques.Chinese Journal of Computer,2011,34(8):1411-1422.
[3] Sutton M,Amini A G P.Fuzzing: Brute Force Vulnerability Discovery[M]. 黃隴,于莉莉,李虎,譯.北京:機械工業出版社,2009:13-20.
[4] 張寶峰,張斌,許源.基于模糊測試的網絡協議漏洞挖掘[J].清華大學學報:自然科學版,2009,49(S2):2113-2118.
[5] 沈亞楠,趙榮彩,王小芹,等.基于規范生成的文件模糊測試[J].計算機工程與設計,2010,31(16):3591-3594.
[6] Harrol M J,Rothermel G,Wu R,Yi L.An empirical investigation of program spectra[C].Proceedings of the ACM SIGPLAN/SIGSOFT Workshop Program Analysis for Software Tools and Eng (PASTE' 98). Montreal, Quebec,Canada,1998:83-90.
[7] 譚德貴,陳林,王子元,等.通過增大邊際權重提高基于頻譜的錯誤定位效率[J]. 計算機學報,2010,33(12):2335-2338.
[8] 陳衍鈴,王正.模糊測試研究進展[J].計算機應用與軟件,2011,28(7):291-293.
[9] Sutton M,Amini A G P.Fuzzing:Brute Force Vulnerability Discovery[M].黃隴,于莉莉,李虎,譯.北京:機械工業出版社,2009:65-66.
測試一 自信心爆棚還是自卑心籠罩?
1.和朋友相比,你覺得自己對父母更孝順嗎?
2.和其他家庭成員相比,你是否覺得自己對家庭的貢獻最大?
3.你的工作取得了成功,主要原因是你努力勤奮或者天賦出眾嗎?
4.面對難題,只要你愿意,就一定可以找到解決方案嗎?
5.購物時,你總能買到價廉物美的東西嗎?
6.你覺得自己的衣著品位比朋友高一籌嗎?
7.玩牌時,你會指責牌友嗎?
8.你覺得自己要比大多數人聰明一點點嗎?
9.要是你來做老板,你會比他干得更好嗎?
10.你對社會焦點問題的看法往往是符合社會主流觀點的嗎?
這一組題目測試的是你的交際心理,診斷如下:
70-100 亞健康
你在人際交往中處于超強自信狀態。在獲得成績以后,你會把功勞歸于自己,樂于接受各種榮譽,并認為這是理所當然的;在遭受挫折時,則把失敗歸咎于他人以推托責任。你認為自己看待世界的方式是最正常的,別人也應該和你保持一致。你覺得自己的才智和品德是異乎尋常的,一些很困難的事情,即使別人都失敗了,你也可能獲得成功。
你要認識到:
1.不管你是不是天才,人人都討厭永遠不會犯錯,動輒對別人指手畫腳的人。
2.每個人的思想觀點和生活方式都值得尊重,不要把自己的標準強加于人。
新年調理計劃:
在新的一年里,你可以完成以下三件事
1.每次做完一件事,就把一張白紙一折為二,在一邊寫上自己的原因,在另一邊寫上別人的原因,這樣有助于你客觀地評價自己。
2.每天自嘲三次,嘲笑別人是刻薄,嘲笑自己就是幽默,先拿自己開涮吧!
3.給自己的交際活動錄一段音,找出那些自我膨脹的話語,如“這事我在行”,“要是我來做就沒問題了”,“這件事不怪我”,“你怎么就不能像我一樣呢”……努力“消滅”它們。
35-65 健康
恭喜!你對自己的評價是客觀的,在交際中你總能擺正自己的位置。
0-35 亞健康
你在人際交往中處于不自信狀態。你總是認為別人比自己強,因而養成了萬事依賴他人的習慣。在任何場合你都依附別人的觀點,沒有自己的想法,有時難免被人利用。你常常覺得自己一無是處,心情非常沮喪,但獨當一面的機會來臨時,又會猶豫不決,最后總是臨陣脫逃。
你要認識到:
1.天生我材必有用,你肯定有比別人強的方面。2要對自己充滿信心,否則別人怎么會對你有信心呢?
新年調理計劃
在新的一年里,你可以完成以下三件事:
1.在征求家人、朋友的意見后,對自己的才能做一個正面評價,然后寫下來,情緒低落時看一看,給自己一個良好的心理暗示。
2.每天獨立完成一件事,事無大小(可以是購物、看電影、逛街),但要堅持。
3.每次完成一個工作都小小慶祝一下,請客吃飯或者分發一些小禮物,和別人分享成功能使你自信十足,并且對更大的成功充滿希望。
測試二 交際過度還是交際匱乏
1.每次在街上遇到一個熟人,你都要聊十分鐘以上嗎?
2.參加婚宴,餐桌上很沉悶,你會主動挑起一個話題嗎?
3.一個人坐長途車,你會主動和鄰座聊天嗎?
4.每次同學聚會你都參加嗎?
5.每周都要和朋友或同事共進晚餐嗎?
6.你每天撥打的電話超過10個嗎?
7.出門忘帶手機就渾身不自在嗎?
8.別人給你的有趣E-mail你每次都轉發嗎?
9.經常給別人做媒嗎?
10.在集體活動中做過主持人嗎?
這一組題目測試的是你的交際心理,診斷如下:
70-100 亞健康
這一組題目測試的是你的交際心理,診斷如下:你熱情外向,口齒伶俐,人緣很好,是一個天生的外交家。在陌生的環境中,總可以在第一時間交到新朋友。每一次朋友聚會都不能離開了你,否則各種活動都會遜色不少。但你投人在社交活動中的精力和時間過多了一點,常常被人譏笑為“言語的巨人,行動的侏儒”。
你要認識到:
1.“交際過度”會使你失去和家人的情感交流,同時會使你覺得時間總是不夠用,經常不能做自己喜歡的事。2、有時候沉默是最有力的交際武器,孤獨也是可以用來享受的。
新年調理計劃
在新的一年里,你可以完成以下三件事:
1.獨身旅游一次,多欣賞自然歷史之美妙,這是一種和天地、歷史、文化的交際。
2.每月至少閱讀一本書,這是和古今中外名人的交際。
3.每天回顧做的事情和說的事情,不斷總結,讓做實事的時間超過說空話的時間。
35-65 健康
恭喜!你的交際態度是合宜的,面對不同交際場景你總能找到合適的交際態度。
0-35 亞健康
你是一個沉默寡言的人,喜歡孤獨,也許沉溺于虛擬的網絡世界。你可能認為家人最重要,家是最讓人舒服的地方。朋友很少,從不公開表達自己的意見,厭惡參加社交活動。別人誤解你,你也懶得和他們解釋。在公眾場合往往更顯得緊張,一開口經常結結巴巴。
你要認識到:
1.朋友多一個好一個,即使是泛泛之交,也隨時有可能為你提供重要的幫助。
2.請相信你的想法很有意思,和別人交流意見很重要。
新年調理計劃
在新的一年里,你可以完成以下三件事:
1.參加更多的集體活動,比以往至少多一倍。更重要的不是次數,而是要在每一次活動中尋找屬于自己的樂趣。
2.交更多的朋友,在通訊錄上至少增加20個人的聯系方式。
3.每次集體討論都大膽地說出自己的想法。
測試三 語無倫次和索然無味?
1.在公開發言的時候,是不是經常聲音顫抖、不知所云呢?
2.在參加討論時,是不是想開口但總是找不到好的時機?
3.和別人溝通時,常常因為表達不清而遭人誤解嗎?
4.經常聽不懂別人的言外之意,以至于搞錯別人的用意嗎?
5.每次聊起自己感到有趣的事情,別人總是不以為然嗎?
6.回應自己不感興趣的邀請時,經常得罪邀請者或者只好違心地:
7.經常自以為說的是真心話卻反而得罪人嗎?
8.和陌生人交往,經常說不上幾句就冷場嗎?
9.經常被推銷員打動,買下一些事后后悔的東西嗎?
10.別人對你的評價是“人還不錯,就是不會說話”嗎?
這一組題目測試的是你的交際心理,診斷如下:
60-100 亞健康
這一組題目測試的是你的交際心理,診斷如下:你為說話問題而苦惱,經常說錯話,弄錯別人的意思。不知什么原因,你總是在不恰當的場合說出不恰當的話語,因而成為別人嘲笑的對象。在你嘴里,簡明的道理亂成一團漿糊,精彩的經歷讓人摸不著頭腦,好玩的笑話變得味同嚼蠟。
你要認識到:
1.說明事件要按照時間順序,注意精彩的細節:說明道理要按照因果順序,注意邏輯連貫:說明計劃要按照輕重順序,注
意依次展開。2.有些話語是有言外之意的,它們比字面意義更重要。
新年調理計劃
在新的一年里,你可以完成以下三件事:
1.每次游玩歸來都把最精彩的事件告訴別人,不妨打一下腹稿,一次失敗就換一個人再試,直到聽眾聽得津津有味為止。
2.觀看電視訪談節目,閱讀訪談文章,領會其中的問答技巧,在潛移默化中提升交際水平。
3.找一些情景喜劇或話劇的劇本,把一些有弦外之音的對話找出來。在聆聽別人交談時,注意捕捉這樣的隱含意義:在自己說話時,也嘗試著使用這樣的含蓄語言。
0-60 健康
首先要恭喜你已經擁有了良好的言談技巧!
你要認識到:
交際技巧沒有最好,只有更好,如果你還需要進一步提高的話,可以從兩方面人手:1提高公開演講能力,雖然對公開演講感到緊張是人之常情,但要成為一個社交家,這是必須要過的一關。2.提高身體語言表達能力。有很多意見并不需要滔滔不絕的宏篇巨論才能表達,很多時候,只要一絲微笑、一個手勢、一種身姿就行了。
新年調理計劃
在新的一年里,你可以完成以下三件事:
1.多欣賞話劇和啞劇,話劇演員的面部表情和啞劇演員的身體動作完全脫離語言就“說出”了復雜的意思,這是最高級的