2022年的鐘聲已經(jīng)響過(guò),1972年出生的我已經(jīng)在這個(gè)世界上度過(guò)了整整半個(gè)世紀(jì),時(shí)間如流水,都去哪了?好像昨天還剛剛從大學(xué)的校門走出,可是當(dāng)時(shí)剛從大學(xué)殿堂呱呱落地的嬰兒,現(xiàn)在都變成了IT界的主力軍。我的稱謂也由以前的同學(xué)、男孩,小顧變成了現(xiàn)在的大佬、大咖,甚至是老前輩,好多人認(rèn)為我很成功,好厲害…,但是我自己知道我僅僅比現(xiàn)在的IT從業(yè)人員大幾歲,多吃了幾口鹽,多過(guò)了幾座橋罷了。
好吧,廢話少說(shuō),我再和大家結(jié)合現(xiàn)在的情況談?wù)?span id="mmm8mmm" class="candidate-entity-word" data-gid="374714">軟件測(cè)試,現(xiàn)在的軟件測(cè)試和當(dāng)年的軟件測(cè)試不可同日而語(yǔ),我當(dāng)年進(jìn)入測(cè)試部門正因?yàn)槲业氖兹蜟TO是海歸派,他與他的夫人當(dāng)時(shí)都在美國(guó)硅谷學(xué)習(xí)和工作,他從事軟件研發(fā),而他的夫人從事軟件測(cè)試,正因?yàn)樗蛉说摹敖虒?dǎo)”,使得他感覺到軟件測(cè)試的重要性,所以在我們公司中開辟了獨(dú)立的軟件測(cè)試部,并且多次邀請(qǐng)他的夫人來(lái)公司作關(guān)于軟件測(cè)試方面的普及,我也因?yàn)楫?dāng)時(shí)在軟件測(cè)試方面表現(xiàn)出的特有氣質(zhì),當(dāng)選了軟件測(cè)試部的部門經(jīng)理,從而走上了軟件測(cè)試之路,這一走就是整整20年之久,甚至?xí)L(zhǎng)。
好,主題上場(chǎng),我來(lái)談?wù)勎覍?duì)現(xiàn)在軟件測(cè)試的一些看法。
1.軟件測(cè)試左右移
1)軟件測(cè)試左移
a) 黑盒測(cè)試
關(guān)于軟件測(cè)試的做用其實(shí)我在2001年剛剛從事軟件測(cè)試的時(shí)候就提到過(guò)。當(dāng)時(shí)我們開發(fā)了一個(gè)中國(guó)電信牽頭的,名為“網(wǎng)上商品交易會(huì)”的項(xiàng)目(可惜這個(gè)最后放棄了,否則可能成為中國(guó)第一個(gè)B2B的平臺(tái)),在這個(gè)系統(tǒng)中,包含了展會(huì)、展商、展位、展品幾個(gè)實(shí)體,一個(gè)展會(huì)由多個(gè)展商參加;一個(gè)展商有多個(gè)展位(比如格力,包括家庭電器展位和辦公電器展位)、一個(gè)展位下包括多個(gè)展品。我們測(cè)試人員在一開始就設(shè)計(jì)了這么一個(gè)測(cè)試用例:刪除展位,試圖查看展位下的展品;刪除展商,試圖查看展商下的展位和展品;刪除展會(huì),試圖查看展會(huì)下的展商、展位和展品。大家如果學(xué)習(xí)過(guò)關(guān)系數(shù)據(jù)庫(kù),就會(huì)知道這屬于關(guān)系型數(shù)據(jù)庫(kù)的主外鍵關(guān)系。但是這個(gè)產(chǎn)品的產(chǎn)品架構(gòu)師不太鼓勵(lì)在數(shù)據(jù)庫(kù)中加上外鍵鎖,希望程序員在程序中進(jìn)行控制??墒浅绦騿T在開發(fā)代碼的時(shí)候,由于產(chǎn)品架構(gòu)師沒有過(guò)于強(qiáng)調(diào),就把這個(gè)驗(yàn)證給忽略了,最后在項(xiàng)目末尾,出現(xiàn)了展品找不到展位、展位找不到展商、展商找不到展會(huì)這樣的尷尬情形,只好打回,延期發(fā)布。如果在測(cè)試工程師書寫完畢測(cè)試用例,由開發(fā)與測(cè)試一起坐下來(lái)進(jìn)行一次測(cè)試用例評(píng)審,或者把這部分測(cè)試用例讓開發(fā)測(cè)試工程師作為自測(cè)用例來(lái)執(zhí)行,是不是就可以提前發(fā)現(xiàn)這個(gè)問題呢?記得濟(jì)南的李龍同學(xué)提出了川模型軟件測(cè)試模型,我在這里結(jié)合這個(gè)模型提出了洋蔥軟件測(cè)試模型,如下圖:
最里面為冒煙測(cè)試用例,外面為開發(fā)自測(cè)用例(研發(fā)開發(fā)完產(chǎn)品代碼,需要自己運(yùn)行一次冒煙測(cè)試用例和自身相關(guān)的自測(cè)用例),外面是驗(yàn)收測(cè)試用例。最外面為所有測(cè)試用例,當(dāng)然這些測(cè)試用例可以是手工的,也可以是自動(dòng)化的。
b) 白盒測(cè)試
白盒測(cè)試包括靜態(tài)白盒測(cè)試和動(dòng)態(tài)白盒測(cè)試,在測(cè)試座用中,白盒測(cè)試起著至關(guān)重要的作用,我個(gè)人認(rèn)為嵌入式軟件是最難測(cè)的軟件,而這種軟件最重要的是做好白盒測(cè)試。對(duì)于靜態(tài)白盒測(cè)試(包括Code Review和代碼掃描),在這方面測(cè)試人員真的不具備優(yōu)勢(shì),讓專業(yè)的人作專業(yè)的事,所以這個(gè)我認(rèn)為還是讓開發(fā)人員自己來(lái)完成;動(dòng)態(tài)白盒測(cè)試往往通過(guò)書寫單元測(cè)試代碼來(lái)實(shí)現(xiàn),由于測(cè)試人員具有獨(dú)特的逆向、系統(tǒng)、變向等思維能力,我認(rèn)為應(yīng)該讓測(cè)試人員參與單元測(cè)試的設(shè)計(jì)。我當(dāng)時(shí)在從事機(jī)頂盒軟件測(cè)試產(chǎn)品,我們的CTO真是這樣要求我們的,測(cè)試一個(gè)函數(shù),對(duì)于函數(shù)中變量的空值,0值,非法值、邊界值…,開發(fā)人員開始都是不考慮的。由于有測(cè)試人員與開發(fā)人員的共同參與,我們當(dāng)時(shí)機(jī)頂盒的質(zhì)量是非常高的(這算不算結(jié)對(duì)測(cè)試),可惜的是后來(lái)清華與上海交大爭(zhēng)奪機(jī)頂盒的標(biāo)準(zhǔn)權(quán)(一個(gè)信號(hào)強(qiáng),但是覆蓋率低;另一個(gè)信號(hào)弱,但是覆蓋率高),搞得兩敗俱傷,最后被IP TV取代,真是鷸蚌相爭(zhēng),漁翁得利?。ㄋ再|(zhì)量好,不代表銷售就好,這需要公司各方面的努力)。
2)軟件測(cè)試右移
在我剛畢業(yè)的年代,軟件測(cè)試右移是想都不敢想的,現(xiàn)在隨著分布式、大數(shù)據(jù)和人工智能的發(fā)展,使得軟件測(cè)試右移成為了可能。軟件測(cè)試右移說(shuō)白了就是在生產(chǎn)環(huán)境中進(jìn)行軟件測(cè)試。下面來(lái)介紹一下測(cè)試有以下的幾種技術(shù)(特別強(qiáng)調(diào)一點(diǎn),在在線測(cè)試中,監(jiān)控和告警是非常重要的):
a) 灰度發(fā)布(又叫金絲雀發(fā)布)
在英國(guó),由于金絲雀對(duì)瓦斯極為敏感,礦井工人攜帶金絲雀,以便及時(shí)發(fā)發(fā)現(xiàn)危險(xiǎn)。在分布式系統(tǒng)中,我們可以通過(guò)將不太確定的新版本軟件反掛在分布式系統(tǒng)的一個(gè)節(jié)點(diǎn)上,讓少部分用戶來(lái)使用,通過(guò)監(jiān)控和告警來(lái)及時(shí)發(fā)現(xiàn)問題。當(dāng)所有問題都解決了再逐步擴(kuò)展新版本的發(fā)布。
在這張圖中,綠色的為新版本,10%的用戶使用這個(gè)版本,當(dāng)所有問題都解決了,可以把新版本擴(kuò)大到30%、50%、80%停頓一段時(shí)間,從而驗(yàn)證性能質(zhì)量。
b) 全鏈路壓測(cè)
在全鏈路壓測(cè)中,分離測(cè)試數(shù)據(jù)和測(cè)試鏈路,測(cè)試數(shù)據(jù)放到影子庫(kù)和影子表中,對(duì)試鏈路進(jìn)行染色;測(cè)試完畢必須復(fù)原,刪除測(cè)試數(shù)據(jù)和測(cè)試鏈路;當(dāng)全鏈路測(cè)試過(guò)程中發(fā)現(xiàn)了問題,需要有良好的災(zāi)備機(jī)制,在災(zāi)備機(jī)制下,精確記錄故障原因,并且盡快把環(huán)境恢復(fù)正常。
c) 流量回放技術(shù)
收集線上的流量數(shù)據(jù),在線下回放。
d)混沌工程
混沌工程(Chaos Engineering)是在分布式系統(tǒng)上進(jìn)行實(shí)驗(yàn)的學(xué)科,通過(guò)主動(dòng)制造故障,測(cè)試分布式系統(tǒng)在各種異常情況下的行為,對(duì)系統(tǒng)穩(wěn)定性進(jìn)行校驗(yàn)和評(píng)估,識(shí)別并修復(fù)故障問題,進(jìn)而建立對(duì)系統(tǒng)抵御生產(chǎn)環(huán)境中失控條件的能力和信心。
這里強(qiáng)調(diào)一下,混沌工程與故障注入法的區(qū)別:
故障注入法:是指當(dāng)故障注入后,應(yīng)該發(fā)現(xiàn)什么事故,是固定的。
混沌工程:是指當(dāng)故障注入后,什么事故會(huì)發(fā)生,是未知的。
在《性能之巔》一書提及到已知的已知;已知的未知;未知的未知。對(duì)于缺陷而言:已知的已知,即已經(jīng)被發(fā)現(xiàn)的缺陷;已知的未知,即已經(jīng)知道操作后可能會(huì)出現(xiàn)的缺陷;未知的未知,即不知道什么操作后是否存在缺陷。所以故障注入法是發(fā)現(xiàn)已知的未知缺陷;混沌工程是發(fā)現(xiàn)未知的未知缺陷。但是混沌工程不是隨意進(jìn)行的(據(jù)說(shuō)當(dāng)年切爾日核電站爆炸,就是在一次類似于“混沌工程”演練后發(fā)生的)。
混沌工程實(shí)施規(guī)范
- 建立一個(gè)圍繞穩(wěn)定狀態(tài)行為的假說(shuō)(Build a Hypothesis around Steady State Behavior)
- 多樣化真實(shí)世界的事件 (Vary Real-world Events)
- 在生產(chǎn)環(huán)境中運(yùn)行實(shí)驗(yàn) (Run Experiments in Production)
- 持續(xù)自動(dòng)化運(yùn)行實(shí)驗(yàn) (Automate Experiments to RunContinuously)
- 最小化爆炸半徑 (Minimize Blast Radius)
以前我在大學(xué)里面學(xué)習(xí)軟件工程,主要批判大棒模型,鼓吹瀑布模型,而現(xiàn)在瀑布模型遇到淘汰,在敏捷思想提出后,各種Ops思想運(yùn)運(yùn)而生,下面簡(jiǎn)單來(lái)給大家介紹一下。
2. XxxOps
1) DevOps
2009年 Velicity大會(huì),全球大型圖片分享網(wǎng)站Filckr的運(yùn)維部經(jīng)理John Allspaw和Paul Hammond分享,每日10次部署:Dev和Ops在Filckr的協(xié)作。DevOps之父:Patrick Debois在比利時(shí)首次發(fā)起DevOpsDay活動(dòng)。
許多人不太理解DevOps之間的關(guān)系,看了上面這張圖,大家就能一目了然了。
DevOps六大武器
- 標(biāo)準(zhǔn)化作業(yè):pipline
- 快速失?。‵ast Fail)
- 快速反應(yīng)
- 高質(zhì)量與高效率
- 降低成本
- 團(tuán)隊(duì)協(xié)作(研發(fā)、運(yùn)維、測(cè)試)
DevOps七個(gè)階段
- 持續(xù)開發(fā):計(jì)劃、編碼。工具:代碼倉(cāng)庫(kù)、版本控制、包管理、甘特圖、燃盡圖。管理:分支管理、單元測(cè)試。
- 持續(xù)集成:頻繁提交代碼->頻繁編譯代碼->頻繁構(gòu)建項(xiàng)目->頻繁單元測(cè)試->頻繁集成(快速失?。?/li>
- 持續(xù)測(cè)試
- 持續(xù)監(jiān)控:各項(xiàng)工作的監(jiān)控
- 持續(xù)反饋
- 持續(xù)部署
- 持續(xù)運(yùn)營(yíng):事件和變更 配置管理、容量管理、高可用管理、用戶體驗(yàn)管理。
2)DevSecOps
將軟件安全貫穿于軟件開發(fā)始終。
2012 著名IT研究機(jī)構(gòu)Gartner公司DevOps報(bào)告:DevSecOps:Creating the Agile Triangle提出DevSecOps概念。
2016年Gartner公司:DevSecOps:How to Seamlessly Interate SecurityInto DevOps.(如何將安全性無(wú)縫集成到開發(fā)平臺(tái)中)更加闡述DevSecOps概念
安全相關(guān)的成熟度模型
- 軟件安全構(gòu)建成熟度模型(Building Security InMaturity Mode,BSIMMl)
- 軟件保證成熟度模型(Software AssuranceMaturity Model,SAMM)
- 安全開發(fā)生命周期模型(Security DevelopmentLifecycle,SDL)
- 運(yùn)維安全保障模型(Operational SecurityAssurance,OSA)
軟件安全工具
- 動(dòng)態(tài)應(yīng)用安全測(cè)試(Dynamic ApplicationSecurity Testing,DAST):
開源的Zed AttackProxy (ZAP)、AcunetixWVS,Burpsuite,OWASP ZAP,長(zhǎng)亭科技X-Ray,w3af。 - 靜態(tài)應(yīng)用安全測(cè)試(Static Application SecurityTesting ,SAST):
Klocwork、Helix QAC、HCL AppScan、國(guó)內(nèi)的騰訊xcheck、Wukong(悟空)、Coverity,Checkmark FindBugs,CodeQL,ShiftLeft inspect - 交互式應(yīng)用安全測(cè)試(Interactive ApplicationSecurity Testing,IAST):
CodeDx、Checkmarx CxIAST、Contrast Secutity,默安LAST,玄鏡。IAST相當(dāng)于是DAST和SAST結(jié)合的一種互相關(guān)聯(lián)運(yùn)行時(shí)安全檢測(cè)技術(shù) - 軟件成分分析(Software Composition Analysis,SCA):
Synopsys Black Duck、RedRocket-SCA、X-ray,SonatypeIQServer,Dependencies Check
3)DevPerfOps
將軟件性能質(zhì)量貫穿于軟件開發(fā)始終。
4) AIOps(Aritificial Intelligence for ITOperation)
用AI來(lái)輔助運(yùn)維,整合大數(shù)據(jù)和機(jī)器學(xué)習(xí),通過(guò)松耦合、可擴(kuò)展方式去提取和分析在數(shù)據(jù)量(Volume)、種類(Variety)、和速度(velocity)這三個(gè)方面不斷增長(zhǎng)的IT數(shù)據(jù),為所有主流的IT運(yùn)維管理(IT Operations Management, ITOM)產(chǎn)品提供支撐。
AIOps關(guān)鍵技術(shù)
- 數(shù)據(jù)采集
- 數(shù)據(jù)處理
- 數(shù)據(jù)存儲(chǔ)
- 數(shù)據(jù)分析
- AIOps算法
AIOps應(yīng)用場(chǎng)景
保障運(yùn)營(yíng)
- 異常檢查
- 故障診斷
- 故障預(yù)防
- 故障自愈
成本優(yōu)化
- 資源優(yōu)化
- 容量規(guī)劃
- 性能優(yōu)化
效率提升
- 智能預(yù)測(cè)
- 智能變更
- 智能問答
- 智能決策
5) DataOps
用大數(shù)據(jù)支持運(yùn)維。主要是用把線上日志作為大數(shù)據(jù)來(lái)進(jìn)行分析處理,在這里我特別要提一下Splunk軟件,這個(gè)工具非常強(qiáng)大,唯一的缺陷就是價(jià)格也非常的昂貴。
正像瀑布模型取代大棒模型、敏捷、DevOps取代瀑布一樣,隨著技術(shù)和管理進(jìn)步,以后肯定有一門新的技術(shù)取代敏捷、DevOps,我估計(jì)可能是人工智能技術(shù)。但是人人就是主體,如何利用軟件工程化為以人為主導(dǎo)軟件項(xiàng)目,人的要素始終是最重要的。
3. 自動(dòng)化軟件測(cè)試
關(guān)于自動(dòng)化軟件測(cè)試,在DevOps下是非常重要的,在以前幾年業(yè)界討論也是非常熱烈的,我也寫過(guò)許多類似的文章,業(yè)界甚至出現(xiàn)的軟件測(cè)試就是軟件自動(dòng)化軟件測(cè)試的怪圈,還好這幾年這個(gè)怪圈回歸了理性。總之,自動(dòng)化軟件測(cè)試不是萬(wàn)能的,但是沒有自動(dòng)化軟件測(cè)試是萬(wàn)萬(wàn)不能的。由于以前這方面講述了很多,在這里不再進(jìn)行詳細(xì)展開。
4. 基于技術(shù)的軟件測(cè)試
1)性能測(cè)試
關(guān)于性能測(cè)試,可以說(shuō)上三天三夜,在這里我特別需要指出得到是,在線下,特別是第一次性能測(cè)試,必須需要給一個(gè)相對(duì)獨(dú)立網(wǎng)段的測(cè)試環(huán)境,如果測(cè)試環(huán)境與研發(fā)環(huán)境在同一網(wǎng)段(前幾天剛剛給一家企業(yè)作測(cè)試咨詢,他們竟然在WiFi環(huán)境下進(jìn)行性能測(cè)試),在這種環(huán)境下進(jìn)行測(cè)試,由于網(wǎng)絡(luò)的抖動(dòng)性是非常不確定的,一方面影響大家的工作,另一方面測(cè)試出來(lái)的數(shù)據(jù)也是不完善的。
2)安全性測(cè)試
大家都認(rèn)為安全性測(cè)試是非常困難的,就測(cè)試而言,安全測(cè)試是非常容易的,參看下表:
對(duì)于與業(yè)務(wù)相關(guān)的安全測(cè)試,需要根據(jù)對(duì)應(yīng)的業(yè)務(wù),做好測(cè)試。
5. 軟件測(cè)試分析與設(shè)計(jì)
特別提出軟件測(cè)試分析與設(shè)計(jì)是作為一個(gè)軟件測(cè)試工程師的看家本領(lǐng),在這里我介紹兩本書,一本是邰曉梅女士書寫的《海盜派測(cè)試分析 MFQ&PPDCS》,另一本是劉琛梅女士書寫的《測(cè)試架構(gòu)師修煉之道》
6. 精準(zhǔn)測(cè)試
精準(zhǔn)測(cè)試是我特別崇拜的一門技術(shù)
利用精準(zhǔn)測(cè)試,我們可以做到:
- 發(fā)現(xiàn)軟件缺陷可以精準(zhǔn)定位到所在缺陷的近N條代碼,便于調(diào)試;
- 為回歸測(cè)試做到精準(zhǔn)定位。版本N 1與版本N哪些代碼受到了影響,哪些不受到影響;哪些測(cè)試用例需要回歸,哪些不需要;
- 對(duì)測(cè)試人員的工具進(jìn)行有效的度量,這些用例覆蓋了哪些代碼?哪些代碼還沒有用例覆蓋
7. Model-Based Testing
基于模型的測(cè)試(Model-Based Testing:MBT)我個(gè)人不太看好,不詳談。
8. 關(guān)于ABC測(cè)試
ABC測(cè)試,就是人工智能(AI),大數(shù)據(jù)(Big Data),云原生(Cloud)測(cè)試。
人工智能(AI)測(cè)試:主要包括算法測(cè)試和應(yīng)用測(cè)試。
大數(shù)據(jù)(Big Data):主要包括數(shù)據(jù)驗(yàn)證和應(yīng)用測(cè)試。
云原生(Cloud)測(cè)試主要人就是應(yīng)用測(cè)試。
我個(gè)人認(rèn)為ABC測(cè)試仍舊處于起步階段,測(cè)試的重點(diǎn)主要在應(yīng)用的本身,數(shù)據(jù)驗(yàn)證,算法測(cè)試需要許多其他領(lǐng)域的技能,比如統(tǒng)計(jì)學(xué)、概率論等。
9. 對(duì)目前比較關(guān)注的測(cè)試問題
最后對(duì)目前比較關(guān)注的測(cè)試問題闡述我的人的觀點(diǎn)
1. 如何在短時(shí)間內(nèi)執(zhí)行測(cè)試
a) 基于深度優(yōu)先的策略執(zhí)行優(yōu)先級(jí)高的測(cè)試用例;
b) 開展探索式測(cè)試,根據(jù)缺陷的80/20原則,對(duì)80%產(chǎn)生缺陷的模塊進(jìn)行強(qiáng)力測(cè)試
2. 哪些用例需要寫測(cè)試用例,哪些不需要
a) 用戶用例中提及的基本測(cè)試(正向、反向)的功能需要書寫測(cè)試用例。
b) 上面提及的洋蔥軟件測(cè)試模型內(nèi)三層冒煙測(cè)試、開發(fā)自測(cè)、驗(yàn)收測(cè)試需要書寫測(cè)試用例。
c) 其他根據(jù)情況書寫或不書寫測(cè)試用例
3. 哪些需要書寫自動(dòng)化測(cè)試用例
a) 保證這個(gè)用例執(zhí)行次數(shù)超過(guò)5次,必須書寫測(cè)試用例。
b) 同一缺陷被修復(fù)在其他版本中又發(fā)現(xiàn)(非合并出現(xiàn)的問題),必須書寫測(cè)試用例。
最后祝大家工作順利,生活愉快。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。