軟件概念 軟件(Software)是一系列按照特定順序組織的計(jì)算機(jī)數(shù)據(jù)和指令的集合。一般來講,,軟件被劃分為系統(tǒng)軟件,、應(yīng)用軟件和介于這兩者之間的中間件。在國標(biāo)中對軟件的定義是與計(jì)算機(jī)系統(tǒng)操作有關(guān)的計(jì)算機(jī)程序,、規(guī)程,、規(guī)則以及可能有的文件、文檔及數(shù)據(jù)等,。
軟件生命周期 生命周期(Life Cycle)的概念應(yīng)用很廣泛,,簡單說就是指一個(gè)對象的“生老病死”。對一個(gè)軟件產(chǎn)品或軟件系統(tǒng)而言也需要經(jīng)歷同樣階段,,一般稱為軟件生命周期,。軟件生命周期大致分為六個(gè)階段
項(xiàng)目計(jì)劃階段 此階段主要是確定軟件開發(fā)的總體目標(biāo),通過市場調(diào)研并給出功能,、性能、接口等方面的設(shè)想以及項(xiàng)目的可行性分析,,同時(shí)對項(xiàng)目開發(fā)使用的資源,、成本、進(jìn)度做出評估,,制定項(xiàng)目實(shí)施的計(jì)劃(項(xiàng)目一級計(jì)劃),。
需求分析階段 需求俗稱軟件的主體,所以需求分析階段作為一個(gè)非常重要的階段,,它由需求分析人員和用戶共同對軟件需要實(shí)現(xiàn)的各個(gè)功能進(jìn)行詳細(xì)的分析并給予確切的描述,,并編寫軟件需求說明書(Software Requirements Specification,簡稱SRS)。
軟件設(shè)計(jì)階段 該階段俗稱軟件的核心,,主要是由系統(tǒng)分析組(架構(gòu)師和系統(tǒng)分析人員)根據(jù)需求分析的結(jié)果,,對整個(gè)軟件進(jìn)行系統(tǒng)架構(gòu)的設(shè)計(jì),編寫概要設(shè)計(jì)說明書(High Level Design,,簡稱HLD),。接下來由數(shù)據(jù)庫設(shè)計(jì)員和開發(fā)人員根據(jù)需求說明書和概要設(shè)計(jì)說明書進(jìn)行系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)以及編寫詳細(xì)設(shè)計(jì)說明書(Low LevelDesign,簡稱LLD),。
程序編碼階段 把軟件設(shè)計(jì)的結(jié)果轉(zhuǎn)換為計(jì)算機(jī)可運(yùn)行的程序代碼,,使用RDBMS工具建立數(shù)據(jù)庫。程序編碼必須符合標(biāo)準(zhǔn)和編碼規(guī)范,,以保證程序的可讀性,、易維護(hù)性,保證程序運(yùn)行的效率,。
軟件測試階段 此階段主要是測試人員來檢測軟件是否符合客戶的需求,,是否達(dá)到質(zhì)量的要求。一般在軟件設(shè)計(jì)完成后,,項(xiàng)目開發(fā)人員構(gòu)建測試版本,,以便測試團(tuán)隊(duì)進(jìn)行測試,整個(gè)測試過程大致分為:單元測試,、集成測試,、系統(tǒng)測試、驗(yàn)收測試,。
運(yùn)行與維護(hù)階段 此階段是軟件生命周期中最長的階段,。在軟件開發(fā)完成并正式投入使用后,可能有很多原因需要對軟件進(jìn)行修改,,如軟件錯(cuò)誤,、系統(tǒng)升級、增加功能,、提高性能等,。
軟件體系結(jié)構(gòu)
什么是C/S結(jié)構(gòu) C/S(Client/Server)結(jié)構(gòu)即客戶端/服務(wù)器結(jié)構(gòu)??蛻舳送ǔ,?梢岳斫鉃榘惭b在PC、手機(jī)終端設(shè)備上的軟件,,是軟件系統(tǒng)體系結(jié)構(gòu)的一種,。比如:QQ軟件、手機(jī)APP等,,C/S模式簡單地講就是基于企業(yè)內(nèi)部網(wǎng)絡(luò)的應(yīng)用系統(tǒng),。與B/S(Browser/Server,,瀏覽器/服務(wù)器)模式相比,C/S模式的應(yīng)用系統(tǒng)最大的好處是不依賴企業(yè)外網(wǎng)環(huán)境,,即無論企業(yè)是否能夠上網(wǎng),,都不影響應(yīng)用。
還有一類通信的軟件,,比如:百度云盤,、迅雷下載等,也屬于C/S結(jié)構(gòu),。但是它們之間的數(shù)據(jù)傳輸不需要經(jīng)過服務(wù)器處理業(yè)務(wù),,可以直接通過客戶端進(jìn)行傳輸,這種結(jié)構(gòu)通常稱為P2P(Peer to Peer)點(diǎn)對點(diǎn)結(jié)構(gòu),。
P2P是可以簡單的定義成通過直接交換來共享計(jì)算機(jī)資源和服務(wù),,而對等計(jì)算模型應(yīng)用層形成的網(wǎng)絡(luò)通常稱為對等網(wǎng)絡(luò)。對等網(wǎng)絡(luò),,即對等計(jì)算機(jī)網(wǎng)絡(luò),,是一種在對等者(Peer)之間分配任務(wù)和工作負(fù)載的分布式應(yīng)用架構(gòu),是對等計(jì)算模型在應(yīng)用層形成的一種組網(wǎng)或網(wǎng)絡(luò)形式,。
什么是B/S結(jié)構(gòu)
B/S(Brower/Server)結(jié)構(gòu)即瀏覽器/服務(wù)器結(jié)構(gòu),。隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu),。在這種結(jié)構(gòu)下,,用戶工作界面是通過瀏覽器來實(shí)現(xiàn),極少部分事務(wù)通過邏輯在前端(Browser)實(shí)現(xiàn),,但是主要事務(wù)邏輯在服務(wù)器端(Server)實(shí)現(xiàn),,形成所謂三層3-tier結(jié)構(gòu)。B/S是目前互聯(lián)網(wǎng)中應(yīng)用最為廣泛的系統(tǒng)結(jié)構(gòu),。B/S結(jié)構(gòu)比起C/S結(jié)構(gòu)有著很大的優(yōu)越性,,傳統(tǒng)的MIS系統(tǒng)依賴于專門的操作環(huán)境,這意味著操作者的活動空間受到極大限制,;而B/S結(jié)構(gòu)則不需要專門的操作環(huán)境,,在任何地方,只要能上網(wǎng),,就能夠操作MIS系統(tǒng),,這其中的優(yōu)劣差別是不言而喻的。
軟件測試基本概念 測試(Test)就是為檢測特定的目標(biāo)是否符合標(biāo)準(zhǔn)而采用專用的工具或者方法進(jìn)行驗(yàn)證,,并最終得出特定的結(jié)果。軟件測試(Software Testing)伴隨著軟件的誕生而產(chǎn)生,。對軟件而言,,軟件測試就是在有限的時(shí)間內(nèi)提高軟件質(zhì)量的保證,,是軟件開發(fā)過程中非常重要的一部分。
軟件測試發(fā)展 迄今為止,,軟件測試的發(fā)展一共經(jīng)歷了五個(gè)重要時(shí)期: 以調(diào)試為主 早在20世紀(jì)50年代,,計(jì)算機(jī)剛誕生不久,只有科學(xué)家級別的人才會去編程,,需求和程序本身也遠(yuǎn)遠(yuǎn)沒有現(xiàn)在這么復(fù)雜多變,,相當(dāng)于編程人員承擔(dān)需求分析、設(shè)計(jì),、開發(fā),、測試等所有工作,當(dāng)然也不會有人去區(qū)分調(diào)試和測試,。然而有些比較嚴(yán)謹(jǐn)?shù)目茖W(xué)家們已經(jīng)在開始思考“怎么知道程序滿足了需求,?”這類問題了。
以證明為主 在1957年,,在《軟件測試發(fā)展》(作者Charles Baker)一書中強(qiáng)調(diào)了調(diào)試和測試區(qū)分:1)調(diào)試(Debug),,確保程序做了程序員想讓它做的事情。 2)測試(Testing),,確保程序解決了它該解決的問題,。
這也是軟件測試史上一個(gè)重要的里程碑,它標(biāo)志軟件測試終于自立門戶了,。隨著計(jì)算機(jī)應(yīng)用的數(shù)量,,成本和復(fù)雜性都大幅度提升,其經(jīng)濟(jì)風(fēng)險(xiǎn)也大大增加,,測試就顯得很有必要了,,這個(gè)時(shí)期測試的主要目就是確認(rèn)軟件是滿足需求的,也就是我們常說的“做了該做的事情”,。 以破壞為主 在1979年,,測試界的經(jīng)典之作《軟件測試之藝術(shù)》(作者C.J.Myers)一書中給出了軟件測試的經(jīng)典定義:測試是為發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程。這個(gè)觀點(diǎn)較之前證明為主的思路,,是一個(gè)很大的進(jìn)步,。我們不僅要證明軟件做了該做的事情,也要保證它沒做不該做的事情,,這會使測試更加全面,,更容易發(fā)現(xiàn)問題。
在書中,,Myers還指出兩點(diǎn):好的測試用例是發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試用例,;成功的測試執(zhí)行是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試執(zhí)行。相對于“程序測試就是證明程序中不存在錯(cuò)誤的過程”而言,,Myers的定義是對的,,但定義的測試范圍過窄,。
以評估為主 在1983年,美國國家標(biāo)準(zhǔn)局提出了測試界很有名的兩個(gè)名詞:驗(yàn)證(Verification)和確認(rèn)(Validation),,也就是我們常說的V&V理論,。
人們提出了在軟件生命周期中使用分析、評審,、測試來評估產(chǎn)品的理論,。軟件測試工程在這個(gè)時(shí)期得到了快速的發(fā)展:相繼出現(xiàn)了測試經(jīng)理、測試分析師等職稱以及發(fā)表大量測試刊物,,發(fā)布相關(guān)國際標(biāo)準(zhǔn),。
同時(shí)IEEE提出的軟件工程標(biāo)準(zhǔn)術(shù)語中給軟件測試定義是:“使用人工或自動手段來運(yùn)行或測定某個(gè)軟件系統(tǒng)的過程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別”,。也就是這個(gè)時(shí)期人們開始關(guān)注工具對測試的影響,。
以預(yù)防為主 預(yù)防為主是當(dāng)下軟件測試的主流思想之一。STEP(產(chǎn)品模型數(shù)據(jù)交互規(guī)范,,Systematic Test and Evaluation Process,,簡稱STEP)是最早的一個(gè)以預(yù)防為主的生命周期模型,STEP認(rèn)為測試與開發(fā)是并行的,,整個(gè)測試的生命周期也是由計(jì)劃,、分析、設(shè)計(jì),、開發(fā),、執(zhí)行和維護(hù)組成,也就是說,,測試不是在編碼完成后才開始介入,,而是貫穿于整個(gè)軟件生命周期。
軟件測試目的 從上述測試的發(fā)展來看,,軟件測試的目的也有一個(gè)階段性的變化,,我們通過下圖來分析一下軟件測試目的的演進(jìn)。如圖1-7所示,。
預(yù)防 檢測 證明 表明軟件能 發(fā)現(xiàn)錯(cuò)誤 管理質(zhì)量 夠工作 20世紀(jì)90年代 20世紀(jì)60年代 20世紀(jì)70年代中期 證明 保證軟件產(chǎn)品是完整的并且可用或可被集成,,同時(shí)需要嘗試在非正常情況下的功能和特性是否可用,評估系統(tǒng)的風(fēng)險(xiǎn)承受能力,。
檢測 發(fā)現(xiàn)缺陷,、錯(cuò)誤和系統(tǒng)不足的地方,定義系統(tǒng)的能力和局限性,,并提供相關(guān)的組件,、工作產(chǎn)品和系統(tǒng)質(zhì)量信息。
預(yù)防 提供預(yù)防和減少可能導(dǎo)致錯(cuò)誤的信息,,在過程中盡早地檢測錯(cuò)誤,,確認(rèn)問題和風(fēng)險(xiǎn),,并且提前確認(rèn)解決這些問題和風(fēng)險(xiǎn)的途徑。
軟件測試目的往往包含如下內(nèi)容: 1)測試并不僅是為了找出錯(cuò)誤,,而且要通過分析錯(cuò)誤產(chǎn)生的原因和錯(cuò)誤的發(fā)生趨勢,幫助項(xiàng)目管理者發(fā)現(xiàn)當(dāng)前軟件開發(fā)過程中的缺陷,,以便及時(shí)改進(jìn),。 2)需要測試工程師設(shè)計(jì)出具有針對性的測試方法,以改善測試的有效性,。 3)沒有發(fā)現(xiàn)錯(cuò)誤的測試也是有價(jià)值的,,完整的測試是評估軟件質(zhì)量的一種方法。
綜上來看軟件測試目的是指盡可能早的發(fā)現(xiàn)軟件中存在的缺陷并提高軟件質(zhì)量,。
軟件測試原則 軟件測試?yán)碚摻?jīng)過幾十年的發(fā)展,,在測試界提出了很多測試的基本原則,概括出以下8條軟件測試基本原則,。
1.所有的測試要追溯到用戶的需求 在所有測試活動的過程中,,測試人員都應(yīng)該從客戶的需求出發(fā),想用戶所想,。正如我們所知,,軟件測試的目標(biāo)就是驗(yàn)證產(chǎn)品開發(fā)的一致性和確認(rèn)產(chǎn)品是否滿足客戶的需求,與之對應(yīng)的任何產(chǎn)品質(zhì)量特性都應(yīng)追溯到用戶需求,。簡單說就是一切從用戶角度出發(fā),。
2.測試應(yīng)盡早地介入 根據(jù)統(tǒng)計(jì)表明,在軟件開發(fā)生命周期早期引入的錯(cuò)誤占軟件過程中出現(xiàn)所有錯(cuò)誤(包括最終的缺陷)數(shù)量的50%~60%,。此外,,IBM的一份研究結(jié)果表明,缺陷存在放大的趨勢,。所以越是測試后期,,為修復(fù)缺陷所付出的代價(jià)就會越大。因此,,軟件測試人員要盡早地且不斷地進(jìn)行軟件測試,,以提高軟件質(zhì)量,降低軟件開發(fā)成本,。
3.測試無法窮舉 在整個(gè)測試過程中,,測試人員無法考慮到所有可能輸入值和它們的組合以及結(jié)合所有不同的測試前置條件;所以窮舉測試是不可能的,,當(dāng)測試滿足一定的出口準(zhǔn)則時(shí),,測試就應(yīng)當(dāng)終止。因此,,想要控制測試工作量,,在測試成本,、收益和風(fēng)險(xiǎn)之間求得平衡;需要通過風(fēng)險(xiǎn)分析,、優(yōu)先級分析以及軟件質(zhì)量模型和不同測試的方法來確定測試關(guān)注點(diǎn),,從而代替窮舉測試,提高測試覆蓋率,。
4.避免開發(fā)者自測 測試工作需要嚴(yán)謹(jǐn)?shù)淖黠L(fēng),、冷靜的分析。心理學(xué)告訴我們,,每個(gè)人都具有一種不愿否定自己工作的心理,,這種狀態(tài)導(dǎo)致測試自己程序的障礙。同時(shí),,程序員對需求規(guī)格說明的錯(cuò)誤理解而引入的錯(cuò)誤是很難被發(fā)現(xiàn),。因此,程序員應(yīng)避免測試自己的程序,,為達(dá)到最佳的效果,,應(yīng)由獨(dú)立的測試小組、第三方來完成測試,。
5.群集現(xiàn)象 Pareto Principle帕累托法則(二八定律)表明:80%的錯(cuò)誤集中在20%的程序模塊中,。也就是說,測試所發(fā)現(xiàn)的大部分缺陷和軟件運(yùn)行失效是由少數(shù)程序模塊引起的,。因此,,測試過程中要充分注意群集現(xiàn)象,對發(fā)現(xiàn)錯(cuò)誤較多的程序段或者軟件模塊,,應(yīng)進(jìn)行反復(fù)的深入的測試,。
6.殺蟲劑悖論 殺蟲劑用得多了,害蟲就有免疫力,,殺蟲劑就發(fā)揮不了效力,。同樣在測試中,如果測試用例被反復(fù)使用時(shí),,發(fā)現(xiàn)缺陷的能力就會越來越差,。為了避免克服這種現(xiàn)象出現(xiàn),測試用例需要進(jìn)行定期評審和修改,,不斷增加新的不同的測試用例來測試軟件或系統(tǒng)的不同部分,,從而發(fā)現(xiàn)更多潛在的缺陷。作為專業(yè)的測試人員來說,,要具有探索性思維和逆向思維,。同理,測試方法也需要不斷地變化。
7.不存在缺陷的謬論 通過測試可以減少軟件中存在未被發(fā)現(xiàn)缺陷的可能性,,但即使測試沒有發(fā)現(xiàn)任何缺陷,,也不能證明軟件或系統(tǒng)是完全正確的。也就是說,,測試只能證明軟件存在缺陷,,不能證明軟件不存在缺陷。比如,,不能滿足用戶期望的或用戶不滿意,,也是一種缺陷。
8.測試活動依賴于測試背景 針對不同的測試背景,,進(jìn)行的測試活動也不同,測試策略和測試方法在選取上也有所不同,。比如,,銀行產(chǎn)品和電商平臺。在銀行產(chǎn)品中要將安全放到首位,;在電商平臺中要把兼容性,、性能放到首位。在實(shí)際測試過程中,,測試人員應(yīng)該在測試原則指導(dǎo)下進(jìn)行測試活動,。
軟件測試原則有助于測試人員進(jìn)行高質(zhì)量的測試,盡早盡可能多的發(fā)現(xiàn)缺陷,,并負(fù)責(zé)跟蹤和分析軟件中的問題,,對存在的問題和不足提出質(zhì)疑和改進(jìn),從而持續(xù)改進(jìn)測試過程,。
|