茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1670315 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00016.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

軟工藝術 : [分享]邁向軟體品質之路-談軟體開發過程與軟體測試

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]邁向軟體品質之路-談軟體開發過程與軟體測試

http://www.dsc.com.tw/newspaper/43/43-3.htm

邁向軟體品質之路-談軟體開發過程與軟體測試

第三事業群研發工程師 王舜民

  軟體品質在過去幾年,一直是被國內軟體業所忽略的一環,因為過去為了搶占國內市場,各廠商皆將心力放在軟體的功能及價格上面,對於品質的要求也就力有未逮了。而近一兩年來,由於與國外廠商的競爭壓力及消費者的品質意識抬頭,使得軟體品質的觀念也逐漸受到大家的重視。然而,軟體品質這條路要怎麼走呢?讓我們先瞭解一下軟體公司所面臨的軟體危機(Software Crisis)。

軟體危機
  軟體危機是指在軟體開發及維護的過程中所面臨的嚴重問題,這些問題皆可能導致軟體產品的壽命縮短、甚至夭折,常見的問題如下:

1. 專案的時程估計錯誤,專案不斷地延遲、進度不如預期
2. 開發好的系統問題(Bug) 一堆,抓不甚抓
3. 修改一個問題產生另外兩個問題,新功能加愈多,新的問題就愈多
4. 沒有系統分析與設計的文件
5. 軟體的生產力低,投入的時間與產能不成比例
6. 程式版本混亂,沒有控管

  會造成上述問題,主要是因為軟體開發及維護的進行沒有「方法」。沒有方法的開發模式就是,開發時沒有制訂的開發過程,分析和設計不是被忽略就是時間被壓縮,大部份的時間都在寫程式,但不會要求程式設計師寫程式時要寫註解,而測試的工作和分析設計一樣,不是被忽略就是時間被壓縮。
  如此開發系統,系統很快就完成了,但後來維護所花的時間及成本卻是開發時的好幾倍,但很少有公司會去估算一個系統完成後,又花了多少成本與時間去把它調整成「真正完成」的系統,所以這些問題就這樣在每個軟體專案中不斷地出現。

軟體工程
  為了要克服軟體危機,於是有了軟體工程(Software Engineering)的出現,其目的是希望能透過工程化的方式來開發出功能與品質兼具的軟體。軟體工程所涵括的範圍很廣,包括軟體開發過程(Software Development Process)、軟體型態管理(Software Configuration Management)、軟體專案管理(Software Project Management)等主題。本文針對其中最關鍵的主題-軟體開發過程及軟體開發過程中的測試活動做更深入的探討。

軟體開發過程
  軟體開發過程是軟體工程中最重要的一環,因為它定義了進行軟體開發時所會經歷的階段活動及產出(artifact)。因此,落實軟體工程的第一步,就是制訂出合用的軟體開發過程。現今已有許多方法論闡揚各自的軟體開發過程,主要可以分成傳統的瀑布式開發過程(Waterfall Development Process)及往覆式開發過程(Iterative Development Process)。

瀑布式開發過程
   瀑布式開發過程在過去是最普遍的開發形式,主要分成需求、分析、設計、實作、測試(包括整合測試及系統測試)等階段(如圖1),階段間都是線性前進的,也就是在系統全部的需求分析完後再進行設計,全部的功能設計好後再進行實作,各子系統實作完再進行測試,屬於先廣後深的開發方式。

  此種開發過程的缺點在於開發較大型的系統時,失敗風險較高。因為它在分析及設計階段是進行整個系統的分析設計,當對象是大型系統時,便得花掉非常多的時間進行分析與設計,而且許多分析上或設計上的問題,往往要到了整合測試階段、系統測試階段,甚至是交給客戶手上時才會發現。而發生問題後,則必須再重覆整個開發過程以進行修改,此時修改的困難度與成本都會比第一次開發時還要高。所以,如果能讓早期發現分析和設計上的問題,那就能有效地降低軟體開發失敗的風險,接下來要介紹的往覆式開發過程便具備這樣的優點。

往覆式開發過程
  往覆式開發過程是近幾年隨著物件導向分析設計的發展所產生的一種開發過程,其彌補了瀑布式開發過程的一些缺陷。往覆式開發過程概念如圖2所示,專案開始時,將整個系統的開發週期切分成一個一個的循環週期(Iteration),而每個循環週期皆進行一次小型瀑布式開發過程,第一個循環週期完成後再進行第二個循環週期,依次類推下去直到所有的循環週期完成後,專案也就完成了。


圖2. 往覆式軟體開發過程

  相較於傳統瀑布式開發過程採用分析全部、設計全部、實作全部、測試全部的「先廣後深」策略,往覆式開發過程則採用分析一點點、設計一點點、實作一點點、測試一點點的「先深後廣」策略。先深後廣的好處是我們可以在前幾個循環週期開發時,把整個系統架構實作出來,以驗証架構設計的可行性,所以能將技術風險轉移到開發初期,提早發現架構上的問題。

  每個循環週期皆進行一次改良型瀑布式開發過程,改良型瀑布式開發過程和傳統瀑布式開發過程的差異在於測試階段活動是支援開發過程所有的階段活動。以往測試只著重在實作階段,但事實上許多問題都是在需求、分析、設計等階段就發生了,所以各階段的產出皆應進行測試。

  一個循環週期是多久的時間呢?又如何將整個系統切分成多個循環週期呢?一個循環週期大多會訂在一個月到二個月之間,太短可能來不及進行一個瀑布式開發過程,太長又會失去往覆式開發的好處,所以一到二個月間最合適。至於如何將整個系統切分成多個循環週期?這和開發時所採用的開發方法有密切的關係。

  如果採用物件導向分析與設計的開發方法,一般會以使用案例(Use-Case)為單位做切分,一個循環週期可能是一到數個使用案例,數量多寡要視一個循環週期的時間長短而定。此外,由於使用案例也具備先深後廣的特性,所以每個使用案例在分析、設計及實作時都能將整個系統架構走過一遍,可以讓我們早日將系統架構確認下來。所以,物件導向分析與設計的開發方法與往覆式開發過程搭配,通常是有加乘的效果。

  如果採用傳統分析與設計的開發方法,可以考慮以子系統為單位做切分,不過要以子系統為單位做切分的前題是,整個系統必須已經切割出多個子系統了,所以這地方可能會有一些矛盾的地方,因為傳統的分析與設計如果沒有把整個系統的分析設計做完,實在很難切割出子系統,除非過去已有類似系統的開發經驗。

  傳統分析與設計的開發方法和往覆式開發過程在搭配上會有一點問題。我的建議是,試著採用物件導向分析與設計的開發方法,如果仍必須採用傳統的分析設計方式,那可試著在系統分析完成之後,做概略的系統設計將子系統先切割出來作為循環週期的單位,這是一個折衷的方法。

結論
  瀑布式開發過程是以往較常採用的方式,但經驗告訴我們,這種方式對於中、大型的系統專案而言,風險仍相當地高。而往覆式開發模式能避免掉瀑布式開發過程的缺點,並有效降低風險,所以現今主流的軟體開發方法論幾乎都是以往覆式開發模式為基礎來發展的。

  不論是哪種軟體開發過程都有其優缺點,也沒有一個軟體開發過程是適合所有軟體公司的,所以不要為了不知道要選擇哪種開發過程而躊?不前,先制訂一個軟體開發過程並依循它,慢慢地就會演化出合適的軟體開發過程了。

軟體測試
  軟體測試(Software Testing)只是軟體開發過程中的一個階段活動,特別把軟體測試當作一個主題是因為它與軟體品質有相當密切的關係。

不再只有實作後才做測試
  新的軟體測試概念不再只是實作後的測試了,大家較熟悉的單元測試、整合測試、功能測試、效能測試及壓力測試都是實作後所要進行的測試,那分析結果不需要測試有沒有與需求相符嗎?設計結果不需要測試有沒有與分析結果相符嗎?所以在物件導向世界裡,有一個名為Full Lifecycle Object-Oriented Testing(簡稱FLOOT)的測試方法論,主張測試應該要支援開發過程的所有活動。

  如圖3所示,需求、分析、設計階段皆有相對應的測試活動,每個測試活動裡都定義一些不同測試目的的測試方法。如程式碼測試(Coding Testing)就包括單元測試(Unit Testing)、整合測試(Integration Testing)、程式碼審核(Code Review)等測試方法。測試要能支援開發過程的所有階段活動,才能確保每個階段產出的正確性及一致性,早期發現各個階段產出的問題,而不會通通等到實作出系統後才發現系統好像與需求不符的或發現一堆分析設計上的問題。

  這裡所要傳達的一個觀念是 - 測試不再只是寫程式碼後才做的事了。光是在寫程式碼後才做測試是不夠的,唯有在軟體開發的每個環節都有考慮到測試,軟體的品質才能大幅的提昇。

設計時要考慮到測試
  雖說測試應該要落實在軟體開發過程中的每個階段活動上,但對於本來就沒有確實在做軟體測試的軟體公司而言,這簡直是天方夜譚!所以要落實測試,比較實際的作法是先把實作後(即寫出程式碼後)的測試工作做好,因為實作後的測試是品質的最後一道防線,所以至少要做好這部份的測試工作。
  實作後的測試包括單元測試、整合測試、功能測試、效能測試、壓力測試、使用者測試等,其中單元測試、整合測試及功能測試是最基本也最重要的三種測試,三種測試簡單定義如下:

‧單元測試,測試程式碼單元本身是否依據其所設想的方式執行及執行結果是否合乎預期的結果。單元測試通常是由程式設計師自己進行測試。
‧整合測試,測試各程式碼單元間能否相互合作完成某種功能。整合測試可以由程式設計師或軟體品保工程師進行。
‧功能測試,測試系統是否能待合預期的功能需求。功能測試通常由軟體品保工程師進行。

  在進行系統設計時,應該要把測試的需求考量進去,如此,將來在進行上述三種測試時才不會勞心又勞力。舉例來說,我們在設計類別時,可以採用五層式的類別架構設計(如圖4),那麼將來會比較容易進行測試的工作,怎麼說呢?先簡單地說明一下五層式類別架構的概念。

五層式類別架構是將類別由內而外分成下列五種層次:

  • Persistence Layer 一些負責存取儲存體(如資料庫、檔案)的類別。
  • System Layer 一些工具類別或與負責網路存取、與作業系統溝通等類別。
  • Domain Layer 此層的類別稱為領域類別,代表系統的領域概念及資料實體。
  • Controller Layer 此層的類別稱為控制者類別,實作企業邏輯以協調領域類別間的互動。
  • User Interface Layer 此層的類別稱為使用者介面類別,負責呈現介面與使用者進行互動。

  如圖4所示,層次間的箭頭代表著單向的相依關係,如User Interface Layer相依於Controller Layer,Controller Layer相依於Domain Layer及Persistence Layer。如此分層的好處在於能減少類別變動所造成的影響,如Domain Layer若有變動,所影響的範圍僅限於Controller Layer,若Persistence Layer有變動,所影響的範圍也僅限於Domain Layer及Controller Layer,所以分層架構提供相當好的設計彈性。


圖4. 五層式的類別架構圖

  類別分層架構的設計在測試上又有什麼好處呢?一般來說實作時我們會先從較底層的類別開始,如System Layer,在System Layer類別撰寫完並完成單元測試後,我們寫Persistence Layer,Persistence Layer 完成後會進行單元測試,此時對Persistence Layer而言雖然是單元測試,但因為Persistence Layer有用到System Layer的類別,所以對System Layer而言是在進行整合測試;同樣地Domain Layer的單元測試會是對Persistence Layer及System Layer的整合測試,依此類推,整個類別層次的測試關係如圖5所示。


圖5. 五層式類別架構的測試關係圖

   所以,我們不會把所有層次的類別都寫完才進行整合及測試,在開發過的過程中就進行整合了,當某一層次所有類別的單元測試結束也就代表已完成該層次以下類別的整合測試。那User Interface Layer的整合測試呢?在User Interface Layer完成單元測試後,接下來就要進行系統的功能測試了,而功能測試也就是User Interface Layer的整合測試了。所以,如果設計時能將測試考慮進來,將來會比較容易進行測試工作。

結論
  軟體測試是軟體品質保証的一種方法,也是軟體品質的最後一道防線,如果能落實軟體測試,軟體品質便能控制在一定的水準之上。而進行系統設計時,若能考量到測試的需要,將來進行實作後測試的工作時,才能事半功倍。

總結
  近一兩年,CMM(能力成熟度評量)認証熱已經燒到亞洲來了,中國大陸也十分積極地朝取得CMM認証做努力,而國內也開始有軟體公司計劃去取得CMM認証,這是件好事,代表國內軟體產業也開始把關愛的眼神放在軟體的品質上了。

  其實,有沒有取得CMM認証並不是那麼地重要,重要的是軟體公司本身有沒有真的落實軟體工的每一環節?有沒有制訂軟體開發過程並依循之?有沒有落實軟體測試?有沒有做好軟體型態管理?有沒有做好專案管理?如果這些都有做到,將來要取得CMM認証並非難事。

邁向軟體品質之路,過程也許崎嶇難行,但路的盡頭卻將會是一條康莊大道。

冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]軟體測試 - 維基百科,自由的百科全書

軟體測試

維基百科,自由的百科全書

軟體測試 英語software testing),描述一種用來促進鑑定 軟體正確性完整性安全性
品質的過程。據此,您可能會想,軟體測試永遠不可能完整的確立任意電腦軟體的正確性。然而,在 可計算理論(計算機科學的一個支派)一個簡單的數學證明推斷出下列結果:不可能完全解決所謂「 當機」,指任意電腦程式是否會進入 無窮迴圈,或者罷工並產生輸出問題。換句話說,軟體測試是一種實際輸出與預期輸出間的稽核或者比較過程。

軟體測試的經典定義是:在規定的條件下對 程式進行操作,以發現 程式錯誤,衡量
軟體品質,並對其是否能滿足設計要求進行 評估的過程。

軟體測試有許多方法,但對複雜的產品執行有效測試不僅僅是研究過程,更是創造並嚴格遵守某些呆板步驟的大事。測試的其中一個定義:為了評估而質疑產品的過程;這裡的「質疑」是測試員試著對產品做的事,而產品以測試者腳本行為反應作為回答。雖然大部分測試的智力過程不外乎回顧、檢查,然而「測試」這個詞意味著產品動態分析──讓產品流暢運行。程式品質可能,而且通常會,隨系統不同而有差異;不過某些公認特性是共通的: 可靠性穩定性輕便性
易於維護、以及 實用性。請參照至 ISO標準 ISO 9126有更詳盡的說明。

軟體測試介紹

軟體測試一度被認為是編程能力偏低的員工的工作,直到今天,仍然有許多公司把優秀的人才放在編碼上,也有更多公司讓優秀的人才進行設計,可是很少公司讓優秀的人才進行測試工作。實際的軟體工程實踐證明,讓對軟體思想有深刻理解的工程師進行軟體測試的,可以大幅度的提高軟體品質。


測試的進程

Alpha測試

Alpha測試通常是階段性的開發完成後所開始進行,一直持續到進入Beta測試階段前的階段。Alpha測試是一種驗證測試,在模擬的環境中以模擬的資料來執行。

在這個階段中,通常是在開發單位由開發人員與測試的測試人員,以模擬或實際操作性的方式進行驗證測試。

Beta測試

在系統測試中通常先進行Alpha測試以驗證資訊系統符合使用者以及設計需求所期望的功能。當Alpha階段完成後,開發過程進入到Beta階段,由公眾參與的測試的階段。Beta測試可稱為確認測試,在一個真實的環境中以實際的資料來執行測試,以確認效能,系統執行有效率,系統復原與備份作業正常,透過測試讓資訊系統日後可以更趨完善。

封測與公測

封閉測試(Closed Beta,常簡作封測CB)是 軟體服務等產品在開發完成後、將公開上市前的測試過程。相對於
公開測試,封閉測試的主要用途是測試軟體的功能和檢查 程式錯誤等等,因此通常只提供給少數人進行測試。有些公司會要求參與測試者簽署 保密協定,以避免測試的產品提前外流。 MMORPG的封測結束之後,遊戲公司常會將角色資料刪除,但也有少數不刪的。

公開測試(Open Beta,常簡作公測OB),一般常指 軟體服務等產品在正式上市前開放給不特定人試用,雖然原意是希望試用者能夠提報
bug,但並不是把試用者當做真正的驗證人員。由於通常為免費性質,故常常能夠吸引到大批的試用者參與,可視為另一種 行銷策略。另一方面也節省下測試人員的成本,和驗證穩定度(對於多人使用的頻寬及機器是否能負載,又稱 壓力測試)的時間。

Gamma測試

Gamma測試是一個很少被提及的非正式測試階段,該測試階段對應的是對「存在缺陷」產品的測試。考慮到任何產品都可以被稱為「存在缺陷」的產品(測試只能發現產品中存在的問題,不能說明產品不存在問題),因此這個概念存在一定的不確定性。 對Alpha和Beta測試常見的一個誤解是「Beta測試=黑盒測試」。實際上,Alpha和Beta測試對應在軟體產品發布之前的Alpha和Beta階段,而白盒、黑盒和灰盒測試技術是從技術和方法層面對測試的描述,不應該將這兩部分概念混淆。

測試的方法

軟體測試一般分為白箱測試和黑箱測試。

黑箱測試


黑箱測試(black-box testing),也稱黑盒測試,是軟體測試方法,測試應用程式的功能,而不是其內部結構或運作。測試者不需具備應用程式的程式碼、內部結構和程式語言的專門知識。測試者只需知道什麼是系統應該做的事,即當鍵入一個特定的輸入,可得到一定的輸出。測試案例是依應用系統應該做的功能,照規範、規格或要求等設計。測試者選擇有效輸入和無效輸入來驗證是否正確的輸出。

此測試方法可適合大部分的軟體測試,例如整合測試(integration testing)以及系統測試(system testing)。

白箱測試

白箱測試(white-box testing,又稱透明盒測試glass box testing、結構測試structural testing等)是一個測試軟體的方法,測試應用程式的內部結構或運作,而不是測試應用程式的功能(即黑箱測試)。在白箱測試時,以程式語言的角度來設計測試案例。測試者輸入資料驗證資料流在程式中的流動路徑,並確定適當的輸出,類似測試電路中的節點。


白箱測試可以應用於單元測試(unit testing)、整合測試(integration testing)和系統的軟體測試流程,可測試在整合過程中每一單元之間的路徑,或者主系統跟子系統中的測試。儘管這種測試的方法可以發現許多的錯誤或問題,它可能無法檢測未使用部分的規範。

測試的類型

功能測試按照測試軟體的各個功能劃分進行有條理的測試,在功能測試部分要保證測試項覆蓋所有功能和各種功能條件組合。
系統測試對一個完整的軟體以使用者的角度來進行測試,系統測試和功能測試的區別是,系統測試利用的所有測試資料和測試的方法都要模擬成和使用者的實際使用環境完全一樣,測試的軟體也是經過系統整合以後的完整軟體系統,而不是在功能測試階段利用的每個功能模組單獨編譯後生成的可執行程式。
極限值測試對軟體在各種特殊條件,特殊環境下能否正常執行和軟體的效能進行測試。
特殊條件一般指的是軟體規定的最大值,最小值,以及在超過最大、最小值條件下的測試。
特殊環境一般指的是軟體執行的機器處於CPU高負荷,或是網路高負荷狀態下的測試,根據軟體的不同,特殊環境也有過不同。
效能測試效能測試是對
軟體效能的評價。簡單的說, 軟體效能衡量的是軟體具有的響應及時度能力。因此, 效能測試是採用測試手段對軟體的響應及時性進行評價的一種方式。根據軟體的不同類型,效能測試的側重點也不同。

壓力測試與效能測試

壓力測試常常和
效能測試相混淆。它們主要不同點是,壓力測試要求進行超過規定效能指標的測試。例如一個網站設計容量是100個人同時點擊,壓力測試就要是採用120個同時點擊的條件測試。

壓力測試的通常判斷準則:

  1. 系統能夠恢復。
  2. 壓力過程中不要有明顯效能下降。

測試的階段

單元測試

單元測試是對軟體組成單元進行測試,其目的是檢驗軟體基本組成單位的正確性,測試的物件是軟體設計的最小單位:函式。

整合測試

整合測試也稱綜合測試、組裝測試、聯合測試,將程式模組採用適當的整合策略組裝起來,對系統的介面及整合後的功能進行正確性檢測的測試工作。其主要目的是檢查軟體單位之間的介面是否正確,整合測試的物件是已經經過單元測試的模組。

系統測試

系統測試主要包括功能測試、介面測試、可靠性測試、易用性測試、效能測試。 功能測試主要針對包括功能可用性、功能實作程度(功能流程&業務流程、資料處理&業務資料處理)方面測試。

回歸測試

回歸測試指在軟體維護階段,為了檢測代碼修改而引入的錯誤所進行的測試活動。回歸測試是軟體維護階段的重要工作,有研究表明,回歸測試帶來的耗費占軟體生命周期的1/3總費用以上。


與普通的測試不同,在回歸測試過程開始的時候,測試者有一個完整的測試用例集可供使用,因此,如何根據代碼的修改情況對已有測試用例集進行有效的復用是回歸測試研究的重要方向,此外,回歸測試的研究方向還涉及自動化工具,物件導向回歸測試,測試用例優先級,回歸測試用例補充生成等。

測試用例、測試指令碼和測試場景

測試過程範例

軟體測試活動

代碼覆蓋率


代碼覆蓋率原本是種白箱測試活動。目標軟體通過特殊選項或者函式館編譯並且/或者在特殊環境(程式裡每個函式都被對映回原始碼裡函式起點)下執行。這個過程允許開發員與品管員檢視系統中在正常情況下極少或從未被讀寫的部分(例如:例外處理之類)並且幫助測試員確認最重要的情況(函式點)都被測過了。

測試員可檢視代碼覆蓋率測試結果來設計測試個案、相對應的輸入或者設定組以增加重要函式的代碼覆蓋率。兩種測試員常用的代碼覆蓋率形式:陳述式覆蓋率(或稱行覆蓋率)以及路徑覆蓋率(或稱邊覆蓋率)。行覆蓋率回報到測試完成時,執行過哪些行,或者記憶體大小。邊覆蓋率回報到測試完成時,哪些分支,或者程式決定點被執行過。正如覆蓋率的「率」字所言,這兩個都以百分比為單位。

通常代碼覆蓋率的工具與函式館要求的效能、記憶體、或者其他資源開銷不為正常的軟體營運接受。因此它們通常只存在實驗室裡。又,你可能會想到軟體裡的許多類無法一一通過這些代碼覆蓋率測試,雖然代碼覆蓋程度可通過分析但不是直接測試。

有些瑕疵也會受這些工具的影響。個別來說某些 競態條件(race condition)或者類似的對 即時(real time)敏感度高的操作幾乎不可能在代碼覆蓋率測試環境下偵知;相反的這類的瑕疵只會帶來更多的測試碼開銷。


自動化的測試

使用軟體工具和既定程式,對軟體所進行的測試活動。

參考文獻

  • 鄭人傑,《计算机軟體測試技術》,清華大學出版社



原文出處:軟體測試 - 維基百科,自由的百科全書
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]黑箱測試 - 維基百科,自由的百科全書

黑箱測試

黑箱測試軟體測試的主要方法之一,也可以稱為功能測試、資料驅動測試或基於規格說明的測試。測試者不了解 程式的內部情況,不需具備應用程式的程式碼、內部結構和程式語言的專門知識。只知道程式的輸入、輸出和 系統的功能,這是從使用者的角度針對軟體介面、功能及外部結構進行測試,而不考慮程式內部邏輯結構。測試案例是依應用系統應該做的功能,照規範、規格或要求等設計。測試者選擇有效輸入和無效輸入來驗證是否正確的輸出。

此測試方法可適合大部分的軟體測試,如 整合測試(integration testing)以及系統測試(system testing)。

參見


原文出處:黑箱測試 - 維基百科,自由的百科全書
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]白箱測試 - 維基百科,自由的百科全書

白箱測試

維基百科,自由的百科全書

白箱測試white-box testing)又稱透明盒測試(glass box testing)、結構測試(structural testing)等, 軟體測試的主要方法之一,也稱結構測試、邏輯驅動測試或基於程式本身的測試。測試應用程式的內部結構或運作,而不是測試應用程式的功能(即 黑箱測試)。在白箱測試時,以程式語言的角度來設計測試案例。測試者輸入資料驗證資料流在程式中的流動路徑,並確定適當的輸出,類似測試電路中的節點。測試者了解待測試 程式的內部結構、 演算法
資訊,這是從程式設計者的角度對程式進行的測試。

白箱測試可以應用於 單元測試(unit testing)、 整合測試(integration testing)和系統的軟體測試流程,可測試在整合過程中每一單元之間的路徑,或者主系統跟子系統中的測試。儘管這種測試的方法可以發現許多的錯誤或問題,它可能無法檢測未使用部分的規範。

白箱測試設計技術包括以下代碼覆蓋標準:

  • 控制流測試
  • 資料流測試
  • 分支測試
  • 語句覆蓋
  • 判定覆蓋
  • 修正條件/判定覆蓋
  • 主要路徑測試
  • 路徑測試

基本步驟

白箱測試的基本步驟包括測試者對被測試的原始碼有一個深層次的理解。程式設計師必須對應用有一個深度理解,以清楚的知道應建立哪種測試用例,從而使得測試中的所有可見路徑都可以被執行。原始碼被理解之後才可以被分析,以創造測試用例。以下是白箱測試建立測試用例的三個基本步驟:

  • 輸入包括不同種類的需求,功能方面,文件中的詳細設計,合適的源碼,安全方面。 [1]這是白箱測試列出所有基本資訊的準備階段。

  • 過程包括風險分析來導向整個測試過程,合適的測試計劃,執行測試用例和交流過程。 [1] 這是建立測試用例的階段,以確保他們徹底的測試了應用程式,並且記錄下了相應的測試結果。
  • 輸出包括準備最後報告,其中包含了以上所有準備材料和結果。 [1]

優點

白箱測試是當今使用的兩個最大的測試方法之一。 它有幾大優勢:

  1. 在測試過程中掌握有關原始碼的知識是有益的。 [2]
  2. 通過揭示隱藏的錯誤進行的代碼最佳化,可以消除可能存在的缺陷。 [2]
  3. 開發人員需仔細地進行接下來的開發,白箱測試可以為程式設計師提供反饋。 [2]
  4. 從原始碼層面測試提供了可追溯性,簡化了將來軟體改動帶來的測試改動。 [3]
  5. 白箱測試容易實作自動化。
    [4]
  6. 關於測試的停止時間,白箱測試給出了明確的工程學上的規定。 [5] [4]

缺點

儘管白箱測試具有很大的優勢,它並不完美,並包含一些缺點:

  1. 白箱測試複雜,因為測試員必須有編程知識,算得上是一個程式設計師。根據測試層面的複雜性,白箱測試需要知識水平更高的程式設計師。 [2]
  2. 在某些情況下,要測試程式中的所有可能情況是不現實的,因此會有一些未被測試的情況。 [2]
  3. 白箱測試著眼於以存的軟體,可能無法發現遺漏的功能。

駭客

滲透測試中,白箱測試是指其中一個方法,即
白帽駭客已經充分了解了被攻擊的系統。 白盒滲透測試的目的是模擬出對系統有基本了解或和擁有基本身分惡意的內部人員。

參見

參考文獻

  1. ^
    1.0 1.1 1.2 Ehmer Khan, Mohd. Different Approaches to White Box Testing Technique for Finding Errors. International Journal of Software Engineering and Its Applications. July 2011, 5: 1–6 [12 February 2013].
     
  2. ^ 2.0 2.1 2.2 2.3 2.4
    Ehmer Khan, Mohd. Different Forms of Software Testing Techniques for Finding Errors. IJCSI International Journal of Computer Science Issues. May 2010, 7 (3): 12 [12 February 2013].  

  3. ^
    Binder, Bob. Testing Object-oriented Systems. Addison-Wesley Publishing Company Inc. 2000.  
  4. ^ 4.0 4.1 Ammann, Paul;
    Offutt, Jeff. Introduction to Software Testing. Cambridge University Press. 2008. ISBN  9780521880381.

     
  5. ^ Myers, Glenford. The Art of Software Testing. John Wiley and Sons. 1979.
     

原文出處:白箱測試 - 維基百科,自由的百科全書
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]『黑箱』與『白箱』測試的區別

「黑箱」與「白箱」測試的區別


原文詳見,本文僅供記憶輔助使用。
軟體測試
英文 Software Testing ),描述一種用來促進鑑定軟體 正確性
完整性 安全性 、和 品質 的過程。
換句話說,軟體測試是一種實際輸出與預期輸出間的 稽核 或者 比較 過程。

                                                                                                                                                                   
就測試的模式而言,「黑箱」與「白箱」在測試領域是很通俗的說法。 白箱測試(White-Box Testing)是以測試的深度為主,可分為 資料流程面(Data Flow Coverage)
控制流程面(Control Flow Coverage) 等兩個層面,資料流程面就是測試資料在程式內所經過的流程;而控制流程面,是測試程式在執行過程中每個階段的流程。 白箱測試也稱為 結構性測試(Structural Testing)、 透明盒測試glass box testing ,測試時,測試人員必須掌握程式原始碼,瞭解其內部運作,包含資料流程及程式控制流程,常見的白箱測試工具有原始碼掃瞄,如Fortify、CodeSecure等。

在白箱測試時,以程式語言的角度來設計測試案例。測試者輸入資料驗證資料流在程式中的行動路徑,並 確定適當的輸出 ,類似測試電路中的節點。

白箱測試可以應用於 單元測試(unit testing) 整合測試(integration testing) 系統的軟體測試流程
,可測試在整合過程中每一單元之間的路徑,或者主系統跟子系統中的測試。儘管這種測試的方法可以發現許多的錯誤或問題,它可能無法檢測未使用部分的規範。
                                                                                                                                                                  

黑箱測試(Black-Box Testing) 則不需要對軟體的內部結構有深層的了解,直接就功能面來驗證。所以在程式碼的安全性檢測方面,黑箱就是所謂的「動態程式碼安全性檢測」,其中「動態」是指應用程式處於執行期的狀態,黑箱的手法則是模擬駭客的攻擊,測試系統有沒有漏洞。而 白箱就是「靜態程式碼安全性檢測」 ,它直接掃描程式寫法。 黑箱測試 使用已知的 攻擊樣板(Pattern) 進行檢測,如IBM AppScan與HP WebInspect。

測試應用程式的功能,而不是其內部結構或運作。
測試者只需知道什麼是系統應該做的事,即當鍵入一個特定的輸入,可得到一定的輸出。
測試者選擇有效輸入和無效輸入來驗證是否正確的輸出。

黑箱測試
方法可適合大部分的軟體測試,例如 單元測試(unit testing)、整合測試(integration testing)以及系統測試(system testing)

                                                                                                                                                                  

在早期黑箱與白箱模式,都是透過人工進行驗證。白箱就是人工審查(Code Review),由資深的工程師或顧問檢視寫法是否有不安全的寫法。而黑箱就是「滲透測試」,請專家模擬駭客的入侵模式,測試系統的安全性強度。
不過,人工的成本較高、效率較低,而檢驗的成效與檢測者當時的專注力、情緒及功力強烈相關,而且不容易做到全面的檢查。因此自動化工具應運而生,企業假如導入此類方案,可以頻繁且效率化地檢測系統的安全性。

                                                                                                                                                                 
------------------------------------------------------------------------------------------------------------
參考:
1.
2.
3.
4.維基


原文出處:JUF學習紀錄本: 「黑箱」與「白箱」測試的區別
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]白箱測試與黑箱測試(上)

白箱測試與黑箱測試(上)

May 29 06:58~08:06

螢幕截圖 2014-05-29 08.05.28

 

今天和明天這兩集來談一個老掉牙的主題: 白箱測試(white-box testing) 黑箱測試(black-box testing)。白箱測試又稱為,
透明箱測試(glass box testing)
,鄉民們可以想像一下,把 待測物(程式碼)放在一個白色(透明玻璃)盒子裡面,測試者在可以看到待測物內部結構的情況之下來執行測試。因為可以看到待測物,也就是程式碼的內部結構所設計與執行的測試,因此白箱測試又稱為 結構測試(structural testing) 邏輯驅動測試(logic-driven testing)--看著程式的結構與邏輯來設計與執行測試案例。

在討論要寫多少(白箱測試)測試案例才足夠的問題時( test case adequacy criteria),可以從測試案例涵蓋多少待測程式的 控制流(control-flow) 資料流(data-flow)來判斷。前者衍生出 敘述涵蓋率(statement coverage) 分支涵蓋率(branch coverage)
等測量測試案例走過多少程式 執行路徑(execution path)比例的方法。後者關注資料的 定義(definition) 使用(use) 釋放(kill)之間的各種路徑,包含All-du-paths(所有定義-使用路徑)、All-uses(所有使用路徑)、All-defs(所有定義-釋放路徑)、All-c-uses(所有計算使用)、All-p-uses(所有斷言使用)、All-c-uses/some-p-uses(所有計算使用/部分斷言使用)、All-p-uses/some-c-uses(所有斷言使用/部分計算使用)等一堆奇奇怪怪的涵蓋率 挑眉質疑


***

看到這邊要考鄉民們一個問題: 「從白箱測試的角度來看,如果測試案例很難寫怎麼辦?」

因為白箱測試要想辦法涵蓋程式各種可能的執行路徑,所以 測試案例很難寫,通常也就隱含著程式的複雜度(complexity)太高,例如過於複雜的控制流程(很長的if-then-else條件式、三層for迴圈、設計不良的例外處理結構等)。要讓白箱測試比較好做,首要之務就是要 降低 結構複雜度(structural complexity)。其次,則是要 避免不可決定性(non-determinism),也就是要避免時好時壞的測試案例(請參考〈 對付時好時壞的測試案例(1):還沒痊癒,就先隔離〉、〈
對付時好時壞的測試案例(2):Lack of Isolation〉、〈 對付時好時壞的測試案例(3):Asynchronous Behavior〉、〈 對付時好時壞的測試案例(4):Remote Services〉、〈 對付時好時壞的測試案例(5):Time〉)。

***

友藏內心獨白:白箱要代碼。


原文出處:搞笑談軟工: 白箱測試與黑箱測試(上)
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]白箱測試與黑箱測試(下)

白箱測試與黑箱測試(下)

June 02 08:32~10:16

image

最近談到「黑箱」會讓人想到立法院XD。

 

黑箱測試(black-box testing)又稱為功能測試(functional testing),顧名思義就是把 待測物(程式碼)
放在一個黑色盒子裡面,測試者在看不到待測物內部結構的情況之下執行測試工作。因為不知道待測物內部結構,只能以控制輸入資料為主要的測試途徑。因此黑箱測試又稱為 資料驅動測試(data-driven testing) 輸入/輸出驅動測試(input/output driven testing)

***

上集提到的白箱測試,由於測試者可以看到程式碼,因此可以依據程式邏輯來決定測試資料的輸入值要如何設計。黑箱測試由於看不到程式碼,因此只能依據 規格(specification)來設計測試案例。這觀念很直覺、簡單、重要,但實際上卻經常被忽略。Teddy有個開發Android App的朋友經常被公司的測試人員測出「bug」而要求他改功能,回報bug的原因是他的App與其他類似iPhone上的App有著不一樣的操作方式,而測試人員「自己覺得」iPhone上的App「比較好用」,因此「判定」朋友所開發的Android App「有bug」。


看到這樣的bug,朋友當然很氣,因為他只是按照「需求」所要求的去開發,測試人員在執行黑箱測試的時候,並沒有參考需求來測試,而是依據「自己的經驗、感覺、喜好」,在內心中自己創造出一份關於需求的規格。這份測試人員心中的規格,當然與開發人員心中的規格不一致,因此所謂的「bug」就此產生。

其實這也不能怪測試人員不依據「規格」來測試產品,因為大部分的產品都沒有非常明確、詳盡的「規格」,因此存在著很多「模糊空間」。

開發人員:手機聯絡人資料要能夠匯出…嗯,把它匯出成XML格式的文字檔好了。

測試人員:手機聯絡人資料要能夠匯出…什麼,XML文字檔!這是什麼鬼,客戶怎麼可能看得懂?人家iPhone都可以把聯絡人資料備份到雲端,這樣做才對啊。讓我回報一個bug來修正我們產品問題。

測試人員內心獨白:能找出這樣的bug,我真是百年難得一見的 練武測試奇才啊。

開發人員:靠…近一點仔細看這個bug,備份到雲端這是新需求吧,我們只是匯出手機聯絡人資料而已耶,這是哪個天才回報的「bug」啊!


開發人員內心獨白:我的棍子哩!

***

鄉民甲:既然黑箱測試是依靠控制輸入資料,把所有可能的輸入值都測過一遍不就好了?

Teddy:理論上是這樣沒錯,但是因為輸入資料的可能性太多,因此如果要用「暴力法」來執行黑箱測試會花太多時間,可能到測試者往生之後的1000年測試案例都還沒跑完 挑眉質疑

寫到這裡補充一點關於白箱與黑箱測試的「殘酷現實」:

  • 白箱:用暴力法來測試每一條程式執行路徑是行不通的(exhaustive path testing is not possible)
  • 黑箱:用暴力法來測試所有的輸入值是行不通的(exhaustive input testing is not possible)

因為用暴力法來測試所有可能的程式行為是行不通的(會耗費非常、非常久的時間),在討論需要多少測試案例才足夠的問題時,白箱測試就衍生出了Teddy在上集介紹的各種測試涵蓋率,開發團隊可以藉由訂定各種不同測試涵蓋率的標準來判定測試案例是否足夠。至於黑箱測試面對著是龐大的輸入資料範圍,因此黑箱測試案例的設計焦點則是關注於如何簡化各種可能的輸入資料,設計出「具有代表性」又比較可能找出bug的測試案例。

有幾種設計黑箱測試案例的常見技巧:

  • 等價劃分(equivalence partitioning) 把輸入資料劃分成幾個不同的區域,每個區域具有相同的特性。例如,原本的輸入資料範圍是「全人類」,目前地球有超過70億人口,可能性太多。因此,可以把「全人類」依據人種分成黑人、白人、黃人、紅人等,在每種人之間最少挑一筆資料出來測。也可以依據國家、地區、性別、年齡等條件去劃分。
  • 邊界值分析(boundary value analysis):
    害蟲通常會躲在角落(邊界)的地方,程式的bug也容易出現在資料邊界處,例如一個接受整數的函數,當輸入值大於或等於最大正整數、小於或等於最小正整數,會不會出問題?
  • 狀態機測試(state-based testing):有些功能具有很清楚的狀態,例如販賣機、提款機、遙控器等,只要能夠畫出這些功能的狀態圖,依據狀態去測試即可。有上過Teddy的〈 設計模式這樣學就會了:入門實作班〉的學員們,應該還記得Teddy在介紹State模式的時候提過,畫出State Transition Diagram之後可以依此實作與測試State模式。


螢幕截圖 2014-06-02 09.56.01

 

  • 劇本測試 (scenario-based testing):依據Use Case或是story來測試功能是否正常(迷之音:看起來可以動就好了啊 挑眉質疑)。

***

最後請問鄉民們一個問題: 「從黑箱測試的角度來看,如果系統很難測怎麼辦?」

如果黑箱測試很難測,通常表示 不容易控制與觀察待測程式的狀態,因此可以設計專供測試或診斷問題所使用的特殊介面。以Android手機為例,測試者有時需要將系統切換到所謂的「工程模式」,才比較容易測出問題。

***

友藏內心獨白:黑箱要規格。


原文出處:搞笑談軟工: 白箱測試與黑箱測試(下)
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|