1. 軟件開(kāi)發(fā)過(guò)程
軟件項(xiàng)目成員及其職責(zé):
- 項(xiàng)目經(jīng)理:自始至終驅(qū)動(dòng)整個(gè)項(xiàng)目,通常負(fù)責(zé)編寫(xiě)產(chǎn)品說(shuō)明書(shū)、管理進(jìn)度、進(jìn)行重大決策。
- 體系架構(gòu)師或者系統(tǒng)工程師:產(chǎn)品小組中的技術(shù)專(zhuān)家,一般經(jīng)驗(yàn)豐富,可以勝任設(shè)計(jì)整個(gè)系統(tǒng)的體系架構(gòu)或軟件,他們的工作與程序員關(guān)系緊密。
- 程序員:設(shè)計(jì)、編寫(xiě)軟件并修復(fù)軟件中的缺陷,他們與項(xiàng)目經(jīng)理密切合作制作軟件,然后與項(xiàng)目經(jīng)理和測(cè)試人員密切合作修復(fù)缺陷。
- 測(cè)試員或質(zhì)量保證(Quality Assurance,QA):負(fù)責(zé)找出報(bào)告軟件產(chǎn)品的問(wèn)題,他們與開(kāi)發(fā)小組全部成員在開(kāi)發(fā)過(guò)程中密切合作,進(jìn)行測(cè)試并報(bào)告發(fā)現(xiàn)的問(wèn)題。軟件測(cè)試員的目標(biāo)是盡可能早地找出軟件缺陷,并確保缺陷得以修復(fù)。軟件質(zhì)量保證人員主要職責(zé)是創(chuàng)建和執(zhí)行改進(jìn)軟件開(kāi)發(fā)過(guò)程并防止軟件缺陷發(fā)生的標(biāo)準(zhǔn)和方法,或者說(shuō)主要職責(zé)是檢查和評(píng)價(jià)當(dāng)前軟件開(kāi)發(fā)過(guò)程,找出改進(jìn)過(guò)程的方法,以達(dá)到防止軟件缺陷出現(xiàn)的目標(biāo)。
- 配置管理員或構(gòu)建員:負(fù)責(zé)把程序員編寫(xiě)的代碼及技術(shù)作者寫(xiě)的全部文檔資料組合在一起,合成為一個(gè)軟件包。
軟件開(kāi)發(fā)常見(jiàn)的模式:
- 大爆炸模式:所有的精力都花在開(kāi)發(fā)軟件和編寫(xiě)代碼上,計(jì)劃、進(jìn)度安排和正規(guī)開(kāi)發(fā)過(guò)程幾乎沒(méi)有,最終產(chǎn)生的結(jié)果可能是優(yōu)秀的軟件產(chǎn)品也可能是廢品。這種模式的優(yōu)點(diǎn)是簡(jiǎn)單。大多數(shù)情況下,這種模式?jīng)]有測(cè)試過(guò)程。
- 邊寫(xiě)邊改模式:這種方式通常最初只有粗略的想法,接著進(jìn)行一些簡(jiǎn)單的設(shè)計(jì),然后開(kāi)始漫長(zhǎng)的來(lái)回編寫(xiě)、測(cè)試和修改過(guò)程,等到覺(jué)得可以了就發(fā)布產(chǎn)品。
- 瀑布模式:這種方式主要步驟是構(gòu)思——分析——設(shè)計(jì)——開(kāi)發(fā)——測(cè)試——最終產(chǎn)品,每一個(gè)步驟結(jié)束時(shí),項(xiàng)目小組都組織審查,決定是否進(jìn)入下一步。這種模式優(yōu)點(diǎn)是簡(jiǎn)潔。該模式有三特點(diǎn):強(qiáng)調(diào)產(chǎn)品的定義、各個(gè)步驟都是分立的、無(wú)法回溯(一旦進(jìn)入某個(gè)步驟,就要完成之后再進(jìn)行下一步)。缺點(diǎn)是無(wú)法適應(yīng)快速變化。
- 螺旋模式:這種模式每一次循環(huán)都包含六個(gè)步驟:確定目標(biāo)、可選方案和限制條件;明確并化解風(fēng)險(xiǎn);評(píng)估可選方案;當(dāng)前階段的開(kāi)發(fā)和測(cè)試;計(jì)劃下一階段;確定進(jìn)入下一階段的方法。螺旋模式包含了一點(diǎn)瀑布模式(分析、設(shè)計(jì)、開(kāi)發(fā)和測(cè)試)、一點(diǎn)邊寫(xiě)邊改模式(螺旋模式的每一次循環(huán))、和一點(diǎn)大爆炸模式(從外界觀察)。
- 敏捷軟件開(kāi)發(fā)Agile Software Development:又稱為快速原型、極限編程或者進(jìn)化開(kāi)發(fā)等。主要思想是:通過(guò)過(guò)程和工具理解個(gè)人和交流的作用,通過(guò)全面的文檔理解運(yùn)行的軟件,通過(guò)合同和談判得到客戶的協(xié)作,在計(jì)劃的執(zhí)行中做出對(duì)變更的響應(yīng)。
測(cè)試的原則
-
完全測(cè)試程序是不可能的
想要找出軟件所有的缺陷,確保軟件完美無(wú)缺,是不可能的,原因主要有:輸入量太大、輸出結(jié)果太多、軟件執(zhí)行路徑太多、軟件說(shuō)明書(shū)是主觀的。 -
軟件測(cè)試是有風(fēng)險(xiǎn)的行為
軟件測(cè)試員無(wú)法做到完全測(cè)試,所有一定會(huì)漏掉一些軟件缺陷,所以應(yīng)當(dāng)針對(duì)風(fēng)險(xiǎn)作出明智的抉擇,找到最優(yōu)的測(cè)試量,使得測(cè)試不多不少。 -
測(cè)試無(wú)法顯示潛伏的軟件缺陷
軟件測(cè)試可以報(bào)告軟件缺陷的存在,但是不可以報(bào)告軟件缺陷的不存在。進(jìn)行測(cè)試可以發(fā)現(xiàn)并報(bào)告軟件缺陷,但是任何情況下都不能保證軟件缺陷沒(méi)有。 -
找到的軟件缺陷越多,就說(shuō)明軟件缺陷越多
通常,測(cè)試員很長(zhǎng)時(shí)間找不到軟件缺陷,找到一個(gè)之后會(huì)接二連三的找到更多。 -
軟件測(cè)試免疫力
軟件測(cè)試的越多,其對(duì)測(cè)試的免疫力會(huì)越來(lái)越強(qiáng),所以應(yīng)該嘗試不同的測(cè)試程序,找出更多軟件缺陷。 -
并非所有軟件缺陷都要修復(fù)
根據(jù)風(fēng)險(xiǎn)決定哪些缺陷要修復(fù)。
2. 測(cè)試基礎(chǔ)
黑盒測(cè)試與白盒測(cè)試
- 黑盒測(cè)試:又稱為功能性測(cè)試或行為測(cè)試。測(cè)試人員只需知道軟件要做什么(無(wú)需知道軟件如何運(yùn)行),只要進(jìn)行一些輸入,獲得輸出。
- 白盒測(cè)試:有時(shí)稱為透明盒測(cè)試。測(cè)試人員可以訪問(wèn)程序員的代碼,并通過(guò)檢查代碼的線索來(lái)協(xié)助測(cè)試。
靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試
- 靜態(tài)測(cè)試:只測(cè)試不運(yùn)行的部分——只檢查和審核。
- 動(dòng)態(tài)測(cè)試:通常意義上的測(cè)試——使用和運(yùn)行軟件。
等價(jià)類(lèi)劃分
選擇測(cè)試用例是測(cè)試人員最重要的任務(wù),選擇測(cè)試用例的方法是等價(jià)類(lèi)劃分,有時(shí)稱為等價(jià)分類(lèi)。等價(jià)類(lèi)劃分指分步驟地把海量的測(cè)試用例集減得很小,但過(guò)程同樣有效。在尋找等價(jià)劃分時(shí),考慮把軟件具有相似輸入、相似輸出、相似操作的分在一個(gè)組,這些組就是等價(jià)劃分。
等價(jià)類(lèi)劃分的目標(biāo)是把可能的測(cè)試用例集縮減到可控制且仍然足以測(cè)試軟件的小范圍內(nèi)。
測(cè)試邊界
提出邊界條件時(shí),一定要測(cè)試臨近邊界的有效數(shù)據(jù),測(cè)試最后一個(gè)可能有效的數(shù)據(jù),同時(shí)測(cè)試剛超過(guò)邊界的無(wú)效數(shù)據(jù)。
在軟件的每一個(gè)部分不斷尋找邊界是極為重要的,尋找做的越多,邊界就會(huì)發(fā)現(xiàn)的越多,可能找出的軟件缺陷就越多。
通過(guò)性測(cè)試和失敗狀態(tài)測(cè)試
- 通過(guò)性測(cè)試:包括審查軟件、描繪狀態(tài)、嘗試各種合法可能性、確認(rèn)狀態(tài)以及轉(zhuǎn)換正常。
- 失敗狀態(tài)測(cè)試:多任務(wù)測(cè)試和競(jìng)爭(zhēng)條件測(cè)試、重復(fù)測(cè)試(不斷執(zhí)行同樣的操作)、壓迫測(cè)試(盡可能地限制軟件的必要條件,將支持降到最低)、重負(fù)測(cè)試(盡可能提供條件讓軟件自行發(fā)揮,最大程度挖掘軟件能力)
正式審查
- 同事審查:常常在編寫(xiě)代碼或者設(shè)計(jì)體系結(jié)構(gòu)的程序員之間展開(kāi),審查代碼,尋找問(wèn)題和失誤。
- 走查:比同事審查更正規(guī)化,編寫(xiě)代碼的程序員逐行或者逐個(gè)功能的通讀代碼,解釋代碼為什么且如何工作。審查人員聆聽(tīng)敘述,提出有異議的問(wèn)題。審查結(jié)束之后,表述者編寫(xiě)報(bào)告說(shuō)明發(fā)現(xiàn)的問(wèn)題以及如何解決軟件缺陷。審查人員之中至少有一位資深程序員。
- 檢驗(yàn):最正式的審查類(lèi)型。與走查不同之處是——表述者不是原來(lái)的程序員。其余參與者(檢查員)是從不同角度(用戶、測(cè)試或者產(chǎn)品支持)審查代碼。
編碼標(biāo)準(zhǔn)和規(guī)范
- 可靠性
- 可讀性/維護(hù)性:符合設(shè)備標(biāo)準(zhǔn)和規(guī)范的代碼易于閱讀、理解和維護(hù)。
- 移植性:代碼經(jīng)常需要在不同硬件中運(yùn)行,或者使用不同編譯器編譯。
分段測(cè)試
在底層進(jìn)行的測(cè)試稱為單元測(cè)試或者模塊測(cè)試,找出底層軟件缺陷并修復(fù),之后集成在一起,對(duì)模塊組合進(jìn)行集成測(cè)試,不斷增加測(cè)試過(guò)程,加入越來(lái)越多的軟件片段,直至整個(gè)產(chǎn)品或者產(chǎn)品的主要部分進(jìn)行測(cè)試,稱為系統(tǒng)測(cè)試。
代碼覆蓋
為了全面的覆蓋測(cè)試,還必須測(cè)試程序的狀態(tài)以及程序流程,必須設(shè)法進(jìn)入和退出每一個(gè)模塊,執(zhí)行每一行代碼,進(jìn)入軟件每一條邏輯和決策分支,這種類(lèi)型叫做代碼覆蓋測(cè)試。
代碼覆蓋最直接的形式稱為語(yǔ)句覆蓋和代碼行覆蓋,代碼覆蓋測(cè)試是一種動(dòng)態(tài)白盒測(cè)試。
測(cè)試基礎(chǔ)
- 靜態(tài)黑盒測(cè)試:檢查產(chǎn)品說(shuō)明書(shū),并在軟件編寫(xiě)之前找出問(wèn)題。
- 動(dòng)態(tài)黑盒測(cè)試:在不了解軟件如何工作的前提下進(jìn)行測(cè)試。
- 靜態(tài)白盒測(cè)試:通過(guò)正式審查和檢驗(yàn)檢查代碼的細(xì)節(jié)。
- 動(dòng)態(tài)白盒測(cè)試:看到軟件的工作方式時(shí),根據(jù)獲得的信息對(duì)軟件進(jìn)行測(cè)試。
3. 測(cè)試技術(shù)
- 配置測(cè)試:硬件配置測(cè)試,以及如何保證軟件在其設(shè)計(jì)運(yùn)行和連接得硬件上正常運(yùn)行。指的是在各種硬件和軟件平臺(tái)類(lèi)型以及其不同的設(shè)置情況下檢查軟件運(yùn)行的過(guò)程。
- 兼容性測(cè)試:檢查軟件之間是否能夠正確的交互和共享信息,檢查軟件和其他軟件一起運(yùn)行的過(guò)程。兼容性的定義根據(jù)產(chǎn)品特性來(lái)進(jìn)行,如果測(cè)試對(duì)象是操作系統(tǒng),那么要求對(duì)文字處理程序和圖形程序進(jìn)行測(cè)試;如果測(cè)試對(duì)象是應(yīng)用程序,那么就需要在多個(gè)不同的品臺(tái)上進(jìn)行兼容性測(cè)試。
- 易用性測(cè)試:從人體工學(xué)角度,使得最終用戶認(rèn)為產(chǎn)品是好用的。
- 安全性測(cè)試:任何軟件都有一個(gè)安全問(wèn)題——緩沖區(qū)溢出,應(yīng)該盡可能早地發(fā)現(xiàn)問(wèn)題并解決。使用安全字符串函數(shù),定期研究黑客攻擊手段,做好防范。
- 自動(dòng)化測(cè)試:使用測(cè)試軟件自動(dòng)化的對(duì)軟件進(jìn)行測(cè)試。
單靠軟件測(cè)試無(wú)法保證產(chǎn)品質(zhì)量,軟件QA團(tuán)隊(duì)如何保證產(chǎn)品具有高質(zhì)量?
對(duì)項(xiàng)目進(jìn)行近似完全的控制,建立標(biāo)準(zhǔn)和方法論,有條理地仔細(xì)監(jiān)視和評(píng)估軟件開(kāi)發(fā)過(guò)程,對(duì)發(fā)現(xiàn)的過(guò)程問(wèn)題反饋解決建議,執(zhí)行測(cè)試,擁有決定產(chǎn)品何時(shí)準(zhǔn)備發(fā)布的授權(quán)。