大家都都知道劃水是指魔獸玩家參加活動(dòng)的時(shí)候出工不出力,有全程跟隨的,有打BOSS不吃藥劑的,有雙開打本導(dǎo)致活躍度低的,這些都叫作劃水。
不過小探估計(jì)大家都不清楚這個(gè)詞真正的來源,在魔獸世界的戰(zhàn)場(chǎng)中,很多玩家面對(duì)必輸?shù)木置鏁?huì)放棄抵抗,找個(gè)小水潭躲起來,而魔獸世界的角色在水中是會(huì)揮舞雙臂做出游泳的姿態(tài)的,就像是“劃水”。久而久之,大家就把這個(gè)動(dòng)作推廣開,一切偷懶溜號(hào)不出力的行為都被叫作劃水。
如今劃水這個(gè)詞已經(jīng)被運(yùn)用到大家生活中的方方面面,在各種“躺平”黨中更是深受歡迎,大家都認(rèn)真“劃水”,爭(zhēng)做薪水小偷,不給資本家剝削。
氪金一詞來自于魔獸世界TBC版本的氪金礦石,在游戲前期非常珍貴,價(jià)值不菲,而且TBC版本后期還有不少以硬化氪金為名的畢業(yè)裝備,因此魔獸玩家就用“氪金”來表示裝備和道具的珍貴度。
作為網(wǎng)游鼻祖,氪金這個(gè)詞也穿透到了各種類型的游戲中,特別是頭些年的氪金頁游和如今的氪金手游,更是讓這個(gè)詞發(fā)揚(yáng)光大,大家每天在游戲中不充值一個(gè)648都不好意思說自己是一個(gè)氪金選手。
嘲諷和仇恨
嘲諷這個(gè)概念不能說來自于魔獸世界,而且更早的魔獸爭(zhēng)霸,山嶺巨人的第一技能就是嘲諷,強(qiáng)制讓對(duì)手攻擊皮糙肉厚的山嶺巨人,嘲諷技能的圖標(biāo)非常好玩,是一個(gè)將手指拉下眼瞼的動(dòng)作。
而仇恨這個(gè)詞就來源于魔獸世界了,魔獸創(chuàng)造了獨(dú)有的仇恨值系統(tǒng),坦克職業(yè)可以放大自己的仇恨,讓怪物優(yōu)先攻擊自己,仇恨值系統(tǒng)和嘲諷技能配合使用, 才能保護(hù)好隊(duì)友。
這兩個(gè)詞也火出圈了,在生活中普遍被使用,比如某人單位發(fā)了特別好的福利,他發(fā)到了朋友圈,大家就會(huì)戲稱他在“拉仇恨”。
舅舅黨
舅舅黨這個(gè)詞也來自于魔獸世界,當(dāng)年魔獸世界TBC版本遭遇了版號(hào)危機(jī),導(dǎo)致這個(gè)版本開放得特別慢,玩家戲稱為“特別遲”,在此期間有網(wǎng)友聲稱自己的舅舅在運(yùn)營(yíng)商9C上班,他通過舅舅獲得了內(nèi)幕消息,新版本應(yīng)該在某個(gè)時(shí)間段開放,結(jié)果卻被現(xiàn)實(shí)打臉。
舅舅黨這個(gè)詞后來也火出圈了,如今專門指在網(wǎng)絡(luò)上沒有事實(shí)根據(jù)就胡亂散播謠言的人或者自媒體,最擅長(zhǎng)的事情就是“聽見風(fēng)就是雨”或者“張冠李戴”來博取流量。
作為一個(gè)運(yùn)營(yíng)18年,參與玩家破千萬的經(jīng)典游戲,魔獸世界火出圈的經(jīng)典詞匯其實(shí)還有很多,不知道網(wǎng)友們還知道哪些呢?
]]>我們作為測(cè)試人員了解很多種不同的軟件測(cè)試類型,例如功能測(cè)試(Functional Test)、非功能測(cè)試、自動(dòng)測(cè)試、敏捷測(cè)試、以及它們的各種子類型. 盡管在我們的測(cè)試過程中會(huì)接觸很多種測(cè)試類型, 或者聽說過某些測(cè)試類型,但是很少人敢說精通所有的測(cè)試類型.
每個(gè)測(cè)試類型都有自己的特點(diǎn)、優(yōu)勢(shì)和劣勢(shì)。所以我寫這篇文章,科普一下我們今天最常用的測(cè)試類型.
不同的軟件測(cè)試類型
下面是軟件測(cè)試的通用類型列表
功能測(cè)試類型:
單元測(cè)試(Unit testing)
集成測(cè)試(Integration testing)
系統(tǒng)測(cè)試(System testing)
健全性測(cè)試(Sanity testing)
冒煙測(cè)試(Smoke testing)
接口測(cè)試(Interface testing)
回歸測(cè)試(Regression testing)
Beta/驗(yàn)收測(cè)試(Beta/Acceptance testing)
非功能測(cè)試類型:
性能測(cè)試(Performance Testing)
負(fù)載測(cè)試(Load testing)
壓力測(cè)試(Stress testing)
容量測(cè)試(Volume testing)
安全測(cè)試(Security testing)
兼容性測(cè)試(Compatibility testing)
安裝測(cè)試(Install testing)
恢復(fù)測(cè)試(Recovery testing)
可靠性測(cè)試(Reliability testing)
可用性測(cè)試(Usability testing)
一致性測(cè)試(Compliance testing)
本地化測(cè)試(Localization testing)
來看看這些測(cè)試類型的細(xì)節(jié)
顧名思義, A/B測(cè)試就是準(zhǔn)備兩個(gè)(A/B)或兩個(gè)以上的版本,讓不同的用戶來隨機(jī)訪問這些版本,收集各群組的用戶體驗(yàn)數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),最后分析、評(píng)估出最好版本,正式采用。如上圖,谷歌使用A/B測(cè)試來決定導(dǎo)航應(yīng)該是紅色還是藍(lán)色。
Alpha測(cè)試這是軟件工程中很常見的測(cè)試類型。它的目標(biāo)就是盡可能地在發(fā)布到市場(chǎng)或交付給用戶之前找出所有的問題和缺陷。
Alpha測(cè)試一般在開發(fā)的末段且在Beta測(cè)試之前進(jìn)行。在這個(gè)測(cè)試過程中可能會(huì)驅(qū)動(dòng)開發(fā)者進(jìn)行一些小(minor)的設(shè)計(jì)變動(dòng). Alpha測(cè)試一般在開發(fā)者網(wǎng)站進(jìn)行,即只對(duì)開發(fā)者或內(nèi)部用戶開放,一般可以為此類測(cè)試創(chuàng)建內(nèi)部虛擬的用戶環(huán)境。
一般大型的軟件項(xiàng)目都有規(guī)范化的軟件版本周期:
Pre-alpha: 有時(shí)候軟件會(huì)在Alpha或Beta版本前先發(fā)布Pre-alpha版本, 相比Alpha和Beta,這是一個(gè)功能不完整的版本
Alpha: Alpha版本功能還沒完善,需要進(jìn)一步測(cè)試。Alpha版本通常會(huì)發(fā)送到開發(fā)軟件的組織或某群體中的軟件測(cè)試者進(jìn)行內(nèi)部測(cè)試。
Beta: 一般Beta版本會(huì)包含所有功能,但可能又有一些Bug,需要調(diào)試反饋。 Beta版本是軟件最早對(duì)外公開的軟件版本,由公眾(通常為公司外的第三方開發(fā)者和業(yè)余玩家)參與測(cè)試。
Release Candidate(rc): 發(fā)布候選版本,如果沒有出現(xiàn)問題則可發(fā)布成為正式的版本。這個(gè)版本包含完整且比較穩(wěn)定的功能
舉一個(gè)典型的例子, iOS13的發(fā)布計(jì)劃:
June 3: iOS 13 beta 1 and first look at WWDC 2019 # -> WWDC后就可以裝的,相當(dāng)于pre-alpha或Alpha階段吧
June 17: iOS 13 beta 2 launched for developers
June 24: iOS 13 public beta release date for adventurous testers # -> 公開Beta版本,相當(dāng)于上面說的Beta階段
July 3: iOS 13 developer beta 3 launch with some new features
July 8: iOS 13 public beta 2 release date
Early September 2019: iOS 13 Golden Master (final dev beta) # -> 九月初,該發(fā)最終Beta版本了,相當(dāng)于進(jìn)入RC階段了
Mid-September 2019: iOS 13 likely to launch with new 2019 iPhones # -> 正式版本
復(fù)制代碼
現(xiàn)在很多開源項(xiàng)目,已經(jīng)淡化了瀑布式的軟件版本周期,變成一種持續(xù)(Continuous)的、常態(tài)化的行為, 例如Firefox:
驗(yàn)收測(cè)試通常是部署軟件之前的最后一個(gè)測(cè)試操作, 也稱為交付測(cè)試, 由最終客戶執(zhí)行,他們會(huì)驗(yàn)證端到端(end to end)的系統(tǒng)流程是否符合業(yè)務(wù)需求,以及功能是否是滿足最終用戶的需求。只有當(dāng)所有的特性和功能按照期望的運(yùn)行,客戶才會(huì)接受軟件
這是測(cè)試的最后階段,在驗(yàn)收測(cè)試之后,軟件將投入生產(chǎn)環(huán)境. 所以它也叫用戶驗(yàn)收測(cè)試(UAT)
舉個(gè)例子,驗(yàn)收測(cè)試就相當(dāng)于收快遞, 包裹是軟件、你就是客戶,是驗(yàn)收方,如果貨物不符合你的要求,是要退貨的。
Ad-hoc中文應(yīng)該理解為臨時(shí)的意思。顧名思義,這種測(cè)試是在臨時(shí)基礎(chǔ)上進(jìn)行的, 有時(shí)候也稱為隨機(jī)測(cè)試。即沒有參考測(cè)試用例、沒有針對(duì)該測(cè)試的任何計(jì)劃和文檔。Ad-hoc測(cè)試的目的就是通過執(zhí)行隨意的流程或任意的功能來找出應(yīng)用的缺陷和問題
Ad-hoc測(cè)試一種非正式的方法,可以由項(xiàng)目中的任何人執(zhí)行。盡管沒有測(cè)試用例很難識(shí)別缺陷,但是有些時(shí)候在Ad-hoc測(cè)試期間發(fā)現(xiàn)的缺陷可能無法使用現(xiàn)有的測(cè)試用例來識(shí)別, 也就是說它一般用來發(fā)現(xiàn)‘意外’的缺陷.
可訪問性測(cè)試的目的是確定軟件或應(yīng)用程序是否可供殘疾人使用。殘疾是指聾人,色盲,智障人士,失明者,老年人和其他殘疾人群體。這里會(huì)執(zhí)行各種檢查,例如針對(duì)視覺殘疾的字體大小測(cè)試,針對(duì)色盲的顏色和對(duì)比度測(cè)試等等。
不同平臺(tái)、不同應(yīng)用類型對(duì)可訪問性支持情況不太一樣,比如iOS相比其他操作系統(tǒng)則更重視可訪問, 而國(guó)外比國(guó)內(nèi)更重視可訪問性。
上文Alpha測(cè)試已經(jīng)提及Beta測(cè)試, Beta測(cè)試是一種正式的軟件測(cè)試類型,在將產(chǎn)品發(fā)布到市場(chǎng)或者實(shí)際最終用戶之前,由客戶在真實(shí)的應(yīng)用環(huán)境中執(zhí)行。
執(zhí)行Beta測(cè)試目的是確保軟件或產(chǎn)品中沒有重大故障,并且滿足最終用戶的業(yè)務(wù)需求。當(dāng)客戶接受軟件時(shí),Beta測(cè)試才算通過。
通常,此類測(cè)試由最終用戶或其他人完成。這是在將應(yīng)用發(fā)布作為商業(yè)用途之前完成的最終測(cè)試。通常,發(fā)布的軟件或產(chǎn)品的Beta版本僅限于特定區(qū)域中的特定數(shù)量的用戶。 所以最終用戶實(shí)際使用軟件后會(huì)將一些問題反饋給公司。公司可以在全面發(fā)布之前采取必要的措施。
Beta測(cè)試在正式版本之前也可能會(huì)迭代進(jìn)行多次.
前端應(yīng)用輸入的數(shù)據(jù),一般都會(huì)存儲(chǔ)在數(shù)據(jù)庫,所以針對(duì)數(shù)據(jù)庫的這類測(cè)試稱為數(shù)據(jù)庫測(cè)試或者后端測(cè)試. 市面有不同的數(shù)據(jù)庫,如SQL Server,MySQL和Oracle等。數(shù)據(jù)庫測(cè)試會(huì)涉及表結(jié)構(gòu),模式,存儲(chǔ)過程,數(shù)據(jù)結(jié)構(gòu)等。
后端測(cè)試一般不會(huì)涉及GUI,測(cè)試人員通過某些手段直接連接到數(shù)據(jù)庫,從而可以容易地運(yùn)行一些數(shù)據(jù)庫請(qǐng)求來驗(yàn)證數(shù)據(jù)。通過后端測(cè)試可以發(fā)現(xiàn)一些數(shù)據(jù)庫問題,比如數(shù)據(jù)丟失、死鎖、數(shù)據(jù)損壞。這些問題在系統(tǒng)投入生產(chǎn)環(huán)境之前進(jìn)行修復(fù)至關(guān)重要
這是兼容性測(cè)試的子類型,由測(cè)試團(tuán)隊(duì)執(zhí)行. 瀏覽器兼容測(cè)試主要針對(duì)Web應(yīng)用,用于確保軟件可以在不同瀏覽器或操作系統(tǒng)中運(yùn)行; 或者驗(yàn)證Web應(yīng)用程序是否支持在瀏覽器的所有版本上運(yùn)行, 以確定應(yīng)用最終兼容的范圍.
瀏覽器兼容測(cè)試是前端開發(fā)者繞不開的坑。
我們有很多策略來應(yīng)對(duì)瀏覽器兼容性,比如漸進(jìn)增強(qiáng)或者優(yōu)雅降級(jí), 還有制定瀏覽器兼容規(guī)范;
為了撫平瀏覽器之間的差異,我們會(huì)使用各種特性檢測(cè)工具(Modernizr), 還有各種polyfill(CSS Normaliz, polyfill/shim, css-autoprefixer);
當(dāng)然為了測(cè)試跨瀏覽器兼容性,還要一些輔助工具,例如BrowserStack, 對(duì)于我們這些小團(tuán)隊(duì),只能下一堆Portable(Portable瀏覽器運(yùn)行時(shí)相互隔離的, 所以不會(huì)存在配置文件等沖突問題) 瀏覽器,手工測(cè)試了。
向后兼容測(cè)試, 用于驗(yàn)證新開發(fā)或更新的軟件是否能在舊版本的環(huán)境中運(yùn)行。
比如向后兼容測(cè)試會(huì)檢查新版軟件是否可以正確地處理舊版本軟件創(chuàng)建的文件格式。例如新版的Office 2016是否可以打開2012創(chuàng)建的文件。
同理也可以檢查新版本是否可以兼容舊版本軟件創(chuàng)建的數(shù)據(jù)表、數(shù)據(jù)文件、數(shù)據(jù)結(jié)構(gòu)、配置文件。
任何軟件更新應(yīng)該在先前版本的基礎(chǔ)之上良好地運(yùn)行
黑盒測(cè)試不考慮軟件的內(nèi)部系統(tǒng)設(shè)計(jì),它基于需求和功能進(jìn)行測(cè)試, 只關(guān)心系統(tǒng)的輸入/輸出以及功能流程。
換句話說黑盒測(cè)試從用戶的角度出發(fā)針對(duì)軟件界面、功能及外部結(jié)構(gòu)進(jìn)行測(cè)試,而不考慮程序內(nèi)部邏輯結(jié)構(gòu).
黑盒測(cè)試下面有很多子類,例如集成測(cè)試、系統(tǒng)測(cè)試、大部分非功能性測(cè)試
關(guān)于黑盒測(cè)試的優(yōu)缺點(diǎn)以及測(cè)試類型可以看這里
邊界值測(cè)試, 測(cè)試應(yīng)用處于邊界條件(boundary level)的行為。很多邊界條件開發(fā)者是很難考慮周到的,所以才有一個(gè)專門的測(cè)試類型來驗(yàn)證這種情況
邊界值測(cè)試檢查應(yīng)用處于邊界值時(shí)是否存在缺陷。邊界值測(cè)試通常用于測(cè)試不同范圍的數(shù)字, 每個(gè)范圍都有一個(gè)上下邊界,邊界測(cè)試則是針對(duì)這些邊界值進(jìn)行測(cè)試。
比如數(shù)字范圍為1-500, 那么邊界值測(cè)試會(huì)在這些值上進(jìn)行驗(yàn)證: 0、1、2、499、500、501
這是白盒測(cè)試的子類型,在單元測(cè)試中實(shí)施. 顧名思義,分支測(cè)試表示測(cè)試要覆蓋程序代碼的各種條件分支, 避免遺漏缺陷。分支覆蓋是單元測(cè)試覆蓋率的一個(gè)指標(biāo)之一
比較測(cè)試,將產(chǎn)品的優(yōu)點(diǎn)和弱點(diǎn)與舊版本或者同類(競(jìng)品)產(chǎn)品進(jìn)行比較.
比如類似王自如這種數(shù)碼測(cè)評(píng)欄目,評(píng)測(cè)一個(gè)手機(jī)或者其他數(shù)碼產(chǎn)品時(shí),一般會(huì)橫向和友商產(chǎn)品進(jìn)行比較,有時(shí)候也會(huì)縱向和上一代產(chǎn)品比較.
還有一種比較典型的例子就是和行業(yè)的領(lǐng)導(dǎo)者比較,比如我們做IM的,會(huì)經(jīng)常和微信比較: '你這個(gè)應(yīng)用的啟動(dòng)速度怎么比微信慢這么多?'
這是一個(gè)大類, 兼容性測(cè)試用于驗(yàn)證應(yīng)用在不同環(huán)境、web服務(wù)器、硬件、網(wǎng)絡(luò)條件下的行為。兼容性測(cè)試確保軟件可以在不同的配置、不同的數(shù)據(jù)庫、不同的瀏覽器,以及它們不同的版本下運(yùn)行。兼容性測(cè)試由測(cè)試團(tuán)隊(duì)實(shí)施
組件測(cè)試(此組件非GUI組件, 取組合測(cè)試可能更好理解一點(diǎn)),一般也稱為模塊測(cè)試(Module Testing), 一般由開發(fā)者在完成單元測(cè)試后執(zhí)行。組件測(cè)試將多個(gè)功能組合起來作為單一的整體進(jìn)行測(cè)試,目的是發(fā)現(xiàn)多個(gè)功能在相互連接起來之后的缺陷。
組件測(cè)試可大可小,小到函數(shù)級(jí)別或者類級(jí)別的組合,大可以大到幾個(gè)單獨(dú)的頁面、模塊、子系統(tǒng)的組合。 舉一個(gè)前端例子,將多個(gè)頁面路由組合起來,測(cè)試它們的流程跳轉(zhuǎn),就屬于組件測(cè)試。
端到端測(cè)試也是一種黑盒測(cè)試類型,類似于系統(tǒng)測(cè)試. 端到端測(cè)試在模擬的、完整的、真實(shí)應(yīng)用環(huán)境下模擬真實(shí)用戶對(duì)應(yīng)用進(jìn)行測(cè)試,比如應(yīng)用會(huì)和數(shù)據(jù)庫交互、會(huì)使用網(wǎng)絡(luò)通信、或者在適當(dāng)?shù)那闆r下和其他硬件、應(yīng)用、系統(tǒng)進(jìn)行交互. 端到端是指從一個(gè)端點(diǎn)到另一個(gè)端點(diǎn)的意思,所以端到端測(cè)試重點(diǎn)用于測(cè)試模塊和模塊之間的協(xié)調(diào)性。
當(dāng)應(yīng)用是分布式系統(tǒng)或者需要和其他外部系統(tǒng)協(xié)同時(shí),端到端測(cè)試扮演著非常重要的角色, 它可以全面檢查以確保軟件在不同平臺(tái)和環(huán)境產(chǎn)品能準(zhǔn)確地交互。端到端測(cè)試有以下目的:
確保應(yīng)用可以和外部系統(tǒng)之間良好的協(xié)調(diào)。對(duì)于前端來說,是確保頁面和后端之間良好協(xié)調(diào)
檢查從源系統(tǒng)到目標(biāo)系統(tǒng)的所有系統(tǒng)流
從最終用戶角度驗(yàn)證需求識(shí)別異構(gòu)環(huán)境中的問題
前端也有很多自動(dòng)化的端到端測(cè)試工具,比如nightwatch,通過它們可以模擬用戶對(duì)頁面進(jìn)行操作,從而檢驗(yàn)整個(gè)應(yīng)用流程是否正常和符合需求:
因?yàn)楹拖到y(tǒng)測(cè)試很相似,所以它們也被經(jīng)常拿來比較
等價(jià)劃分, 這是一種黑盒測(cè)試的測(cè)試技術(shù). 通過等價(jià)劃分,可以將所有的輸入數(shù)據(jù)合理地劃分為多個(gè)分組,我們只需在每個(gè)分組中取一個(gè)數(shù)據(jù)作為測(cè)試的輸入條件, 這樣可以實(shí)現(xiàn)用少量代表性的測(cè)試數(shù)據(jù)取得較好的測(cè)試結(jié)果.
所以說這個(gè)測(cè)試的目的: 是在不導(dǎo)致缺陷的前提下,移除指定分組中的重復(fù)的用例, 簡(jiǎn)化測(cè)試的工作
比如一個(gè)程序應(yīng)用接受-10到+10之間的值,使用等價(jià)分區(qū)方法可以劃分為三個(gè)分組: 0、負(fù)值、正值. 接下來的測(cè)試只需從這個(gè)三個(gè)分組中取一個(gè)成員進(jìn)行測(cè)試, 而不需要-10到+10每個(gè)成員都測(cè)試一遍.
It means real-time testing. Example testing includes the real-time scenario, it also involves the scenarios based on the experience of the testers.
實(shí)例測(cè)試意味著實(shí)時(shí)測(cè)試。實(shí)例測(cè)試包含了實(shí)時(shí)場(chǎng)景、另外還涉及基于測(cè)試人員經(jīng)驗(yàn)的場(chǎng)景。
這里不是特別能理解這個(gè)測(cè)試類型,所以貼上原文。知道的告訴我呀
探索性測(cè)試有點(diǎn)類似于Ad-Hoc測(cè)試. 探索性測(cè)試是由測(cè)試團(tuán)隊(duì)進(jìn)行的非正式測(cè)試。此測(cè)試的目的是探索應(yīng)用并查找應(yīng)用中存在的缺陷。像探險(xiǎn)一樣,在測(cè)試期間是有一定幾率發(fā)現(xiàn)的重大、甚至可能導(dǎo)致系統(tǒng)故障的缺陷.
在探索性測(cè)試期間,建議跟蹤記錄好測(cè)試的流程、以及開始該流程之前的活動(dòng)記錄, 方便復(fù)現(xiàn)bug.
探索測(cè)試不需要任何文檔和測(cè)試用例.
功能測(cè)試是一個(gè)大類, 又稱為行為測(cè)試, 功能測(cè)試會(huì)忽略內(nèi)部實(shí)現(xiàn)而關(guān)注組件的輸出,目的是驗(yàn)證是否符合需求,這是一種面向功能需求的黑盒測(cè)試類型。關(guān)于功能測(cè)試的細(xì)節(jié)請(qǐng)看這里
功能測(cè)試是相對(duì)非功能測(cè)試而言的, 功能測(cè)試需要關(guān)心功能或者業(yè)務(wù),需要業(yè)務(wù)耦合程度高;而非功能測(cè)試則是通用的,比如壓力測(cè)試、負(fù)載測(cè)試,這些測(cè)試都有通用的工具來支持,不需要或很少定制化操作.
GUI測(cè)試的目的是根據(jù)業(yè)務(wù)需求驗(yàn)證GUI。在詳細(xì)設(shè)計(jì)文檔和GUI模型(UI設(shè)計(jì)文檔)中一般會(huì)提到應(yīng)用期望的GUI.
常見的GUI測(cè)試包括測(cè)試屏幕上顯示的按鈕和輸入字段的大小、表格中所有文本、表格或內(nèi)容的對(duì)齊規(guī)則等等. 如果團(tuán)隊(duì)有UI設(shè)計(jì)規(guī)范,還會(huì)驗(yàn)證是否符合設(shè)計(jì)規(guī)范
大猩猩測(cè)試是由測(cè)試人員執(zhí)行的測(cè)試類型,有時(shí)也由開發(fā)人員執(zhí)行。在大猩猩測(cè)試中,對(duì)模塊中的一個(gè)模塊或功能進(jìn)行了徹底和嚴(yán)格的測(cè)試。原文沒有說出大猩猩測(cè)試的精髓,大猩猩測(cè)試會(huì)對(duì)一個(gè)功能或模塊進(jìn)行重復(fù)‘上百次’的測(cè)試, 人類根本受不了這樣子的測(cè)試方式,所以大猩猩測(cè)試的另一個(gè)別名是‘令人沮喪的測(cè)試(Frustrating Testing)’
這種測(cè)試的目的是檢查應(yīng)用程序的穩(wěn)健性(robustness)
樂觀路線測(cè)試的目標(biāo)是在正常流程上成功測(cè)試應(yīng)用。它不會(huì)考慮各種負(fù)面或異常情況。重點(diǎn)只關(guān)注于驗(yàn)證應(yīng)用在有效和合法輸入的條件下生成期望的輸出. 比如銀行付款,只考慮賬戶有錢的正常狀態(tài)
增量集成測(cè)試是一種自下而上的測(cè)試方法,即在添加新功能時(shí)立即集成應(yīng)用程序進(jìn)行連續(xù)測(cè)試。應(yīng)用程序功能和模塊應(yīng)該足夠獨(dú)立,以便單獨(dú)測(cè)試。這通常由程序員或測(cè)試人員完成。
安裝和卸載測(cè)試是在不同硬件或軟件環(huán)境下的不同操作系統(tǒng)上的進(jìn)行完整/部分的安裝、升級(jí)、卸載、回滾等測(cè)試. 常用于桌面端應(yīng)用
集成測(cè)試是指將所有模塊集成之后,驗(yàn)證合并后的功能. 模塊通常是代碼模塊、單個(gè)應(yīng)用、網(wǎng)絡(luò)上的客戶端和服務(wù)器應(yīng)用等等。
集成測(cè)試一般在單元測(cè)試之后,所以單元測(cè)試是集成測(cè)試的基礎(chǔ),沒有進(jìn)行單元測(cè)試的集成測(cè)試是不靠譜的。所以最簡(jiǎn)單的形式是:'把兩個(gè)已經(jīng)測(cè)試過的單元組合成一個(gè)組件,測(cè)試它們之間的接口'。也就是說集成測(cè)試在單元測(cè)試的基礎(chǔ)之上,將單元測(cè)試中獨(dú)立的單元合并起來,驗(yàn)證它們的協(xié)調(diào)性, 合并后的組件又是一個(gè)新的‘單元’,這樣逐步合并測(cè)試,最終形成完整的應(yīng)用程序。
這種類型的測(cè)試常用于B/S軟件和分布式系統(tǒng)。
它是一種非功能性測(cè)試,負(fù)載測(cè)試的目的是檢查系統(tǒng)可以承受多少負(fù)載而不會(huì)降低性能, 或者說確定最大工作負(fù)載是多少。
負(fù)載測(cè)試有助于查找特定負(fù)載下系統(tǒng)的最大容量以及導(dǎo)致軟件性能下降的任何原因。可以使用JMeter,LoadRunner,WebLoad,Silk執(zhí)行程序等工具執(zhí)行負(fù)載測(cè)試。
負(fù)載測(cè)試經(jīng)常和性能測(cè)試、壓力測(cè)試、穩(wěn)定性測(cè)試等聯(lián)系在一起。如上圖(來源于淘寶性能白皮書). 其中TPS(Transation Per Second)指的是每秒鐘系統(tǒng)可以處理的交易或事務(wù)的數(shù)量; Server Resource指的是系統(tǒng)資源占有.
性能測(cè)試. 主要位于a-b之間. 在系統(tǒng)設(shè)計(jì)初期就會(huì)規(guī)劃一個(gè)預(yù)期目標(biāo), 比如給定資源Ax,a點(diǎn)就是性能期望值。也就是說在給定固定資源Ax的情況下,如果TPS可以達(dá)到a點(diǎn)甚至更高,就說明系統(tǒng)性能達(dá)到或者好于預(yù)期. 通過性能測(cè)試可以驗(yàn)證系統(tǒng)的處理能力有沒有達(dá)到預(yù)期
負(fù)載測(cè)試. 位于b-c之間。對(duì)系統(tǒng)不斷增加并發(fā)請(qǐng)求,直到系統(tǒng)的某項(xiàng)或者多項(xiàng)指標(biāo)達(dá)到安全的臨界值,如上圖中的c,這個(gè)c就是所謂的最大負(fù)載量。后面再增加請(qǐng)求壓力,系統(tǒng)的處理能力不但不能提高,返回會(huì)下降. 通過壓力測(cè)試可以得出系統(tǒng)最大的安全負(fù)載值
壓力測(cè)試. 位于c-d之間。在超過安全負(fù)載的情況下,繼續(xù)對(duì)系統(tǒng)增加壓力,直到達(dá)到崩潰點(diǎn), 即上圖的d. 通過壓力測(cè)試可以得出系統(tǒng)的最大承受能力
穩(wěn)定性測(cè)試. 位于a-d之間。在a、b、c、d不同的點(diǎn)(代表特定的硬件、軟件和網(wǎng)絡(luò)環(huán)境),讓系統(tǒng)運(yùn)行一段較長(zhǎng)的時(shí)間,檢測(cè)系統(tǒng)在不同條件下的系統(tǒng)運(yùn)行的穩(wěn)定性。
另外也推薦閱讀<<大型網(wǎng)站技術(shù)架構(gòu)>>這本書
猴子測(cè)試是由測(cè)試人員進(jìn)行的,即把自己當(dāng)成猴子,在沒有任何知識(shí)背景或者理解應(yīng)用前提下,隨意輸入和操作。
猴子測(cè)試的目標(biāo)是通過提供隨機(jī)輸入值/數(shù)據(jù)來檢查應(yīng)用程序或系統(tǒng)是否崩潰。 猴子是隨機(jī)執(zhí)行的,沒有測(cè)試用例, 也沒有必要了解系統(tǒng)的全部功能
變異測(cè)試(或者說可變性測(cè)試)是一種白盒測(cè)試,這是一種和單元測(cè)試反著來的測(cè)試類型。
通常單元測(cè)試的思路是通過測(cè)試用例來驗(yàn)證代碼是否有效可靠,而變異測(cè)試是反過來. 它首先更改其中一個(gè)程序的源代碼,再跑單元測(cè)試,如果單元測(cè)試通過則可能說明測(cè)試用例沒有效果,或者測(cè)試用例沒有覆蓋到這處代碼變異.
所以說變異測(cè)試可以反過來驗(yàn)證你的測(cè)試用例是否有效, 還有可以幫助我們找出一些無法被當(dāng)前測(cè)試所防止的潛在錯(cuò)誤.
悲觀測(cè)試和樂觀路線測(cè)試相反, 它要求測(cè)試者要具有“打破”常規(guī)的態(tài)度,考慮各種異常情況, 使用各種邪惡的、不懷好意、不合法的操作來測(cè)試系統(tǒng)。悲觀測(cè)試會(huì)使用不正確的數(shù)據(jù)、無效數(shù)據(jù)或輸入來進(jìn)行驗(yàn)證。它驗(yàn)證系統(tǒng)是否可以識(shí)別異常情況,并按預(yù)期運(yùn)行。
每個(gè)大型的組織都有一個(gè)獨(dú)立的團(tuán)隊(duì),通常稱為非功能測(cè)試(NFT)團(tuán)隊(duì)或性能團(tuán)隊(duì)。
非功能性測(cè)試涉及測(cè)試非功能性需求,如負(fù)載測(cè)試、壓力測(cè)試、安全性、容量,恢復(fù)測(cè)試等等. NFT測(cè)試的目標(biāo)是確保軟件或應(yīng)用程序的響應(yīng)時(shí)間是否滿足業(yè)務(wù)需求。
例如加載任何頁面或系統(tǒng)都不應(yīng)該花費(fèi)太多時(shí)間,并且在負(fù)載峰值期間應(yīng)該維持良好運(yùn)行狀態(tài)。
這個(gè)術(shù)語通常與“壓力”和“負(fù)載”測(cè)試互換使用。性能測(cè)試用于檢查系統(tǒng)是否滿足性能要求。它會(huì)使用不同的性能和負(fù)載工具來執(zhí)行此測(cè)試。
性能測(cè)試這個(gè)范圍比較大,廣義上的性能測(cè)試包括了上文提到的負(fù)載測(cè)試、壓力測(cè)試、穩(wěn)定性測(cè)試、容量測(cè)試等等。狹義的性能測(cè)試則是指在特定資源條件下,測(cè)試系統(tǒng)能否達(dá)到期望值, 也就是基線測(cè)試(Baseline Test).
總結(jié)一下性能測(cè)試的類型:
基線測(cè)試(Baseline Test): 在給定的資源下,測(cè)試最佳的性能,用作后續(xù)測(cè)量的參考‘基線’。注意基線測(cè)試和基準(zhǔn)測(cè)試是有區(qū)別的, 這么理解,基準(zhǔn)是你想達(dá)到的,比如100短跑世界紀(jì)錄,基線是你的成績(jī)。
負(fù)載測(cè)試(Load Test): 在預(yù)期峰值的生產(chǎn)負(fù)載下測(cè)量系統(tǒng)的性能。上文負(fù)載測(cè)試已經(jīng)大概介紹了
穩(wěn)定性測(cè)試(Endurance Test): 在指定負(fù)載下,長(zhǎng)時(shí)間測(cè)量系統(tǒng)的穩(wěn)定性
壓力測(cè)試(Stress Test): 測(cè)試極端條件下的系統(tǒng)性能
恢復(fù)測(cè)試用于驗(yàn)證應(yīng)用或系統(tǒng)中崩潰或?yàn)?zāi)難中恢復(fù)的程度. 確定系統(tǒng)是否能夠在災(zāi)難發(fā)生后繼續(xù)運(yùn)行。
比如應(yīng)用通過網(wǎng)絡(luò)電纜接收數(shù)據(jù),突然斷開了網(wǎng)絡(luò)電纜的連接, 過一段時(shí)間,再插上網(wǎng)線, 系統(tǒng)應(yīng)該開始恢復(fù)由于網(wǎng)絡(luò)電纜拔出而丟失連接的數(shù)據(jù)
在修改任意模塊或者功能后,將應(yīng)用作為一個(gè)整體進(jìn)行測(cè)試,稱為回歸測(cè)試?;貧w測(cè)試的目的就是驗(yàn)證在軟件原有的功能變動(dòng)后是否保持完整性.
有觀點(diǎn)認(rèn)為回歸測(cè)試就是回歸測(cè)試是指重復(fù)執(zhí)行以前的全部或部分相同的測(cè)試工作, 其實(shí)不是不無道理。而且因?yàn)榫植啃薷亩鵂恳话l(fā)動(dòng)全身的意外在平時(shí)開發(fā)中并不少見,這種意外性就是回歸測(cè)試的存在的目的.
因?yàn)樵诨貧w測(cè)試中很難覆蓋所有系統(tǒng),通常最好使用自動(dòng)化測(cè)試工具進(jìn)行這些類測(cè)試。比如每次修改完代碼,跑單元測(cè)試來確保不影響確保其他軟件單元。
在前端中組件快照測(cè)試(Snapshot Testing)和一些CSS UI測(cè)試,都是屬于回歸測(cè)試類型,它們的原理都是和上一次測(cè)試生成的結(jié)果進(jìn)行比對(duì),以確保沒有意外的修改:
在基于風(fēng)險(xiǎn)的測(cè)試中,功能或需求將根據(jù)其優(yōu)先級(jí)進(jìn)行測(cè)試?;陲L(fēng)險(xiǎn)的測(cè)試會(huì)優(yōu)先測(cè)試高度關(guān)鍵的功能,因?yàn)檫@些功能對(duì)業(yè)務(wù)影響最大或者故障概率非常高. 而優(yōu)先級(jí)由業(yè)務(wù)需求決定,因此一旦為所有功能設(shè)置了優(yōu)先級(jí),則應(yīng)該首先執(zhí)行高優(yōu)先級(jí)功能或測(cè)試用例,然后再執(zhí)行低優(yōu)先級(jí)功能。 低優(yōu)先級(jí)功能可以在時(shí)間充裕時(shí)測(cè)試,或者不測(cè)試。
基于風(fēng)險(xiǎn)的測(cè)試應(yīng)該在‘不夠時(shí)間來測(cè)試整個(gè)應(yīng)用,但是又要按時(shí)交付軟件’的情況下執(zhí)行,通常還需要客戶和高級(jí)管理層的討論和批準(zhǔn)之后才進(jìn)行
完整性測(cè)試用于確定一個(gè)新的軟件版本是否可以開始進(jìn)行正式的測(cè)試,如果一個(gè)應(yīng)該在一開始使用時(shí)就崩潰,那么就說明系統(tǒng)還不夠穩(wěn)定,沒有必要進(jìn)行下一步測(cè)試。這種情況應(yīng)該打回給開發(fā),以免浪費(fèi)時(shí)間
以我們公司為例:
在軟件設(shè)計(jì)階段,測(cè)試團(tuán)隊(duì)就會(huì)為編寫冒煙測(cè)試用例;
開發(fā)團(tuán)隊(duì)在提交版本給測(cè)試之前會(huì)自己跑一下冒煙用例, 確保沒有重大故障;
將版本提交給測(cè)試團(tuán)隊(duì)后,測(cè)試團(tuán)隊(duì)就會(huì)先跑一下完整性測(cè)試,檢查一下有沒有重大的,影響測(cè)試進(jìn)程的bug,如果有則退回開發(fā)
如果通過了完整性測(cè)試, 則進(jìn)行冒煙測(cè)試,如果冒煙測(cè)試沒有通過也會(huì)立即打回開發(fā)。
順利通過完整性測(cè)試和冒煙測(cè)試之后才會(huì)進(jìn)入正式測(cè)試階段。
這么做的目的之一就是為了降低測(cè)試團(tuán)隊(duì)的工作負(fù)擔(dān),因?yàn)樗麄円獙?duì)接多個(gè)開發(fā)團(tuán)隊(duì)的測(cè)試任務(wù)。
安全也是一個(gè)龐大的學(xué)科,而且知識(shí)每天都在更新,所以安全測(cè)試一般由特殊的安全團(tuán)隊(duì)執(zhí)行,他們以各種黑客手段對(duì)系統(tǒng)進(jìn)行滲透測(cè)試。
安全測(cè)試旨在確保應(yīng)用或網(wǎng)站免受內(nèi)部和外部威脅的侵害。這個(gè)測(cè)試包括預(yù)防惡意程序、病毒; 檢驗(yàn)授權(quán)和身份驗(yàn)證過程的安全性。
它還會(huì)檢查軟件對(duì)任何黑客攻擊和惡意程序的反應(yīng)方式,以及在遭到黑客攻擊后如何維護(hù)軟件以保護(hù)數(shù)據(jù)安全
冒煙測(cè)試,每當(dāng)開發(fā)團(tuán)隊(duì)提交新的構(gòu)建時(shí),軟件測(cè)試團(tuán)隊(duì)就會(huì)先驗(yàn)證構(gòu)建, 并確保不存在重大問題, 如果存在重大問題會(huì)直接打回開發(fā)團(tuán)隊(duì).
如何通俗地理解冒煙測(cè)試呢?這個(gè)屬于來源于硬件行業(yè),對(duì)一個(gè)硬件或硬件組件進(jìn)行更改或修復(fù)后,直接給設(shè)備加電。如果沒有冒煙,則該組件就通過了測(cè)試。舉個(gè)例子,給三星Note7加電,如果沒爆炸,就說明通過了‘冒煙測(cè)試’(感覺當(dāng)手機(jī)測(cè)試者不容易,容易有生命危險(xiǎn))?
測(cè)試團(tuán)隊(duì)在確保構(gòu)建穩(wěn)定后才會(huì)進(jìn)一步執(zhí)行詳細(xì)的測(cè)試。 冒煙檢查會(huì)檢查構(gòu)建中是否存在中斷缺陷(stopper defect, 即影響繼續(xù)測(cè)試的缺陷),這將阻止測(cè)試團(tuán)隊(duì)進(jìn)一步詳細(xì)測(cè)試。 即如果測(cè)試人員發(fā)現(xiàn)主要功能不能工作,他們會(huì)拒絕這次構(gòu)建,并退回給開發(fā)團(tuán)隊(duì)。
冒煙測(cè)試一般在回歸測(cè)試或其他詳細(xì)測(cè)試之前進(jìn)行
靜態(tài)測(cè)試有點(diǎn)類似于代碼Review,在不執(zhí)行任何代碼的情況下執(zhí)行(也就是不運(yùn)行應(yīng)用),它涉及對(duì)可交付成果審查(inspection)、review和演練(walkthrough). 比如檢查代碼語法、命名約定、項(xiàng)目組織。
靜態(tài)測(cè)試不僅適用于代碼, 也適用于測(cè)試用例、測(cè)試計(jì)劃和設(shè)計(jì)文檔. 如果在靜態(tài)測(cè)試階段發(fā)現(xiàn)缺陷,可以將缺陷成本降到最低。比如在設(shè)計(jì)階段就發(fā)現(xiàn)問題,相比到開發(fā)階段甚至到生產(chǎn)環(huán)境出現(xiàn)問題要好解決
舉前端的例子,靜態(tài)測(cè)試可能包括:
使用Lint工具對(duì)程序進(jìn)行規(guī)范檢查,相關(guān)的工具有ESLint、TSLint、Stylint等, 甚至Typescript這些類型檢查器也可以歸到這個(gè)范疇
代碼Review。有一些問題是無法通過Lint工具覆蓋的,比如代碼邏輯、異常捕獲、項(xiàng)目組織、內(nèi)存泄露等等,這些需要人工進(jìn)行走查Review
檢查代碼是否與設(shè)計(jì)一致,是否符合軟件需求、概要和詳細(xì)設(shè)計(jì),這不僅可以看出代碼問題,也可以反過來更早發(fā)現(xiàn)需求或設(shè)計(jì)是否正確。
通過壓力測(cè)試,模擬系統(tǒng)受到超出其規(guī)格的壓力時(shí)失敗的方式和時(shí)間, 找出系統(tǒng)的崩潰點(diǎn). 這個(gè)測(cè)試在高負(fù)載情況下執(zhí)行的,例如存取超過容量限制的數(shù)據(jù)、執(zhí)行復(fù)雜的數(shù)據(jù)庫查詢、連續(xù)暴力輸入到系統(tǒng)或加載到數(shù)據(jù)庫。
系統(tǒng)測(cè)試在完整的集成系統(tǒng)上進(jìn)行測(cè)試,也就是說系統(tǒng)測(cè)試一般在集成測(cè)試之后進(jìn)行,集成測(cè)試之后系統(tǒng)成為了一個(gè)整體,系統(tǒng)測(cè)試在這個(gè)基礎(chǔ)上、在真實(shí)的運(yùn)行環(huán)境中驗(yàn)證系統(tǒng)是否符合業(yè)務(wù)需求。 這是一種黑盒型測(cè)試,基于總體需求規(guī)范,涵蓋系統(tǒng)的所有組合部分。
系統(tǒng)測(cè)試其實(shí)不是一個(gè)具體的測(cè)試技術(shù),而是一個(gè)測(cè)試階段。 這個(gè)階段會(huì)進(jìn)行很多種測(cè)試,一般公司的測(cè)試團(tuán)隊(duì)的工作就集中在這一塊。 一般包含:
功能測(cè)試: 即上面講的,從系統(tǒng)的整體上測(cè)試是否符合業(yè)務(wù)需求
各種非功能測(cè)試:例如恢復(fù)測(cè)試、性能測(cè)試、壓力測(cè)試、安全測(cè)試等等。
歸納一下系統(tǒng)測(cè)試的目的:
確保應(yīng)用作為一個(gè)整體可以良好地運(yùn)行.
確保應(yīng)用符合業(yè)務(wù)需求
確保應(yīng)用在真實(shí)的環(huán)境可以良好地運(yùn)行。比如進(jìn)行一些非功能測(cè)試,驗(yàn)證系統(tǒng)的健壯性
其實(shí)系統(tǒng)測(cè)試和上文說的端到端測(cè)試很像,它們要求系統(tǒng)作為一個(gè)整體進(jìn)行測(cè)試。可以簡(jiǎn)單展開對(duì)比一下
測(cè)試獨(dú)立的軟件單元或模塊稱為單元測(cè)試。它通常由開發(fā)者完成,而不是由測(cè)試人員完成,因?yàn)樗枰敿?xì)了解內(nèi)部程序設(shè)計(jì)和代碼。
單元測(cè)試是和我們開發(fā)者最密切相關(guān)的測(cè)試類型。它的測(cè)試對(duì)象是軟件單元。軟件單元可以是一個(gè)函數(shù)/方法、一個(gè)類或者一個(gè)GUI組件等。
這是一種白盒測(cè)試,所以要求由開發(fā)者自己進(jìn)行,因?yàn)橹挥虚_發(fā)者才知道單元的內(nèi)部實(shí)現(xiàn)。單元測(cè)試一般會(huì)使用測(cè)試覆蓋率來驗(yàn)證單元測(cè)試的完成度.
前端常見的單元測(cè)試工具有Jest、Mocha、Jasmine等等. 下面是典型的BDD風(fēng)格的單元測(cè)試組織:
可用性測(cè)試用于檢測(cè)應(yīng)用的用戶友好程度(User-friendliness). 它會(huì)驗(yàn)證新用戶受可以輕松理解應(yīng)用流程,如果用戶陷入麻煩,測(cè)試人員要記錄好并提供幫助??梢哉J(rèn)為可用性測(cè)試是在檢查系統(tǒng)的導(dǎo)航性(navigation)
漏洞測(cè)試,涉及識(shí)別軟件、硬件和網(wǎng)絡(luò)中的漏洞。如果漏洞容易受到攻擊,或者容易受到病毒和蠕蟲感染,黑客或惡意程序就可以控制系統(tǒng)。
因此有必要在投入生產(chǎn)環(huán)境之前檢查這些系統(tǒng)是否存在漏洞。
容量測(cè)試是由性能測(cè)試團(tuán)隊(duì)執(zhí)行的一種非功能測(cè)試。容量測(cè)試會(huì)檢查應(yīng)用程序遇到大量的數(shù)據(jù)時(shí)的系統(tǒng)行為和響應(yīng)時(shí)間。這種大量數(shù)據(jù)可能會(huì)影響系統(tǒng)的性能和處理時(shí)間的速度。
白盒測(cè)試, 它也被稱為玻璃盒測(cè)試、結(jié)構(gòu)測(cè)試、邏輯驅(qū)動(dòng)測(cè)試或基于代碼的測(cè)試, 基于應(yīng)用程序代碼的內(nèi)部邏輯。即測(cè)試人員應(yīng)該知道內(nèi)部軟件和代碼是如何工作的, 對(duì)所有的邏輯路徑進(jìn)行覆蓋測(cè)試。上面提到的單元測(cè)試和靜態(tài)測(cè)試就是典型的白盒測(cè)試, 基本上白盒測(cè)試可以等價(jià)于單元測(cè)試
邏輯路徑包括語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋等等.
關(guān)于軟件測(cè)試還有其他疑問,或是想要免費(fèi)領(lǐng)取測(cè)試學(xué)習(xí)資料、工具、面試寶典、面試技巧等資料,都可私信留言。
關(guān)注軟件測(cè)試鄭老師,你將學(xué)到更多專業(yè)技術(shù)、軟件測(cè)試干貨和更多職場(chǎng)技能。
]]>下面欣賞一下古今名家的書法作品。
同治帝的這幅作品字形瘦長(zhǎng),線條干凈利落,從起筆到收筆一氣呵成,顯得俊秀
光緒帝的兩個(gè)版本比之同治帝的作品顯得厚實(shí)雄壯,出現(xiàn)干筆,顯得蒼勁有力。
沙孟海的三個(gè)版本,禿筆重墨,蒼勁雄壯。
啟功的三個(gè)版本,草書簡(jiǎn)明干練,行書清雅剛正。
武中奇的三個(gè)版本雄強(qiáng)跌宕,氣勢(shì)飛動(dòng)。尤其第三幅字線條纏繞,盤根錯(cuò)節(jié),真如騰云駕霧。
周慧珺的兩個(gè)版本,靈動(dòng)飄逸,龍?bào)J豹變。
孫伯翔的這幅字沉實(shí)穩(wěn)健,力道十足。
洪丕謨的這個(gè)龍字左小右大,左窄右寬,多用方筆,沉雄敦厚。
蕭嫻的這幅字溫潤(rùn)富態(tài)。
孫曉云的這幅字上寬下窄,點(diǎn)畫沉實(shí),簡(jiǎn)明精煉,蒼勁有力。
陳加林的這幅字灑脫流暢,線條勁道。
丁謙的第一幅字線條厚實(shí),樸實(shí)溫厚。第二幅字俊俏活潑,看上去很喜慶。
楊明臣的這幅字瘦勁挺拔,墨韻靈動(dòng)。
何雙勝的這幅字左收右放,開合恣肆。
希望大家能夠喜歡。
]]>