最近公司開始了新的一輪技術分享活動,然而此次的形式比較特殊...算法
某技術大羣:
CTO: @全部人 剛剛跟一些同窗討論了一下,爲了減小技術分享會的啓動壓力(好比須要較長時間準備,就致使惰性和阻力),咱們乾脆化整爲零,從明天開始天天最先的晨會前,來一個5分鐘快閃分享,輪流分享一個小的技術點,tips & tricks 類型的,能夠是本身以爲比較好的一個技術實踐,也能夠是代碼重構的小技巧,某個更好的寫法,某個好的工具,或者一個好的產品設計細節等等。就在這個羣裏發截圖或連接就能夠。
複製代碼
正巧要輪到我了,做爲剛轉入後端組發光發熱的"測試小夥",我居然給大夥分享了一個 "高效體驗奶茶" 的算法...後端
我:數組
今日分享tips: 關於參數組合生成markdown
在接口測試或是單元測試中,咱們經常會遇到參數組合過多的問題。舉個例子,有一個接口,有 5 個參數,每一個參數又能夠取值 7 個,若是要驗證全部參數傳入狀況的話則須要測試 77777 = 16807 種狀況,針對這種狀況,咱們可使用 Pairwise 方法有效地減小測試用例數量的同時保證測試質量。工具
Pairwise 是一種覆蓋參數雙因子組合的測試方法。Pairwise基於以下 2 個假設:每個維度都是正交的,即每個維度互相都沒有交集;根據數學統計分析,73% 的缺陷(單因子是 35%,雙因子是 38%)是由單因子或兩個因子相互做用產生的,19% 的缺陷是由 3 個因子相互做用產生的。所以,Pairwise 基於覆蓋全部雙因子的交互做用產生的用例集合,是很是具備測試性價比的。單元測試
然而Pairwise 方法不只能夠用在生成測試用例中,甚至能夠用在生活中... 若是想有效體驗不一樣的奶茶配料組合會產生怎樣不一樣的口感 (假設奶茶的口感主要由 2 個關鍵的配料組合而決定),也能夠試試參考 Pairwise 給出的答案 [旺柴]測試
下面給你們展現一個例子。優化
from allpairspy import AllPairs
parameters = [
["常規", "+波波", "+椰果", "+芋圓", "+厚芋泥"],
["正常冰", "少冰", "去冰", "溫熱", "熱"],
["標準糖", "七分糖", "五分糖", "三分糖", "不另外加糖"],
["奶茶", "牛乳茶", "果茶", "果汁"]
]
print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):
print("{:2d}: {}".format(i, pairs))
複製代碼
能夠看到上述代碼中的 parameters 包含了全部奶茶配料的組合(共 5 * 5 * 5 * 4 = 500 種),能夠在下方輸出中看到,通過 pairwise 優化後組合量減小至了 27 種:spa
PAIRWISE:
..........
22: ['+椰果', '正常冰', '三分糖', '牛乳茶']
23: ['+芋圓', '熱', '標準糖', '果汁']
24: ['+厚芋泥', '去冰', '三分糖', '果汁']
25: ['+厚芋泥', '熱', '標準糖', '果茶']
26: ['+厚芋泥', '溫熱', '標準糖', '果汁']
複製代碼
同事A:設計
牛逼啊!
同事B:
大家個個都是人才呀!
同事C:
這個例子我一會兒看懂了。
同事D:
想 + 啵啵 + 椰果 + 芋圓 + 厚芋泥 (都加) 怎麼辦 ?[奸笑]
同事E:
再加一份奶蓋,謝謝。
同事F:
請問如今去喝六個核桃還能望獲得各位大佬的項背嗎?
同事G:
六個核桃我不知道,我以爲我要喝腦白金
同事H:
個人理解他的假設就是隻有少部分bug是須要三個以上參數同時特定的取值才能踩到的,
因此就放棄了那部分,專一在一兩個上,這樣能夠大大減小枚舉個數。
同事 I:
這個例子我快速看了下,任意兩個輸出之間,至少有2項(兩個維度值)不一樣,其餘3項/4項就更多。而本來的 5 * 5 * 5 * 4 = 500,其中不少輸出之間是僅有一項不一樣的。因此應該是有統計學理論支撐了某些挑選依據。
同事 J:
大家的分享都這麼高端,讓後來者很難啊!
......
或許這就是誇誇羣吧... [旺柴]