如何用測試算法高效體驗奶茶口感

如何用算法 "高效體驗奶茶口感"

故事的起源

最近公司開始了新的一輪技術分享活動,然而此次的形式比較特殊...算法

某技術大羣:

CTO: @全部人  剛剛跟一些同窗討論了一下,爲了減小技術分享會的啓動壓力(好比須要較長時間準備,就致使惰性和阻力),咱們乾脆化整爲零,從明天開始天天最先的晨會前,來一個5分鐘快閃分享,輪流分享一個小的技術點,tips & tricks 類型的,能夠是本身以爲比較好的一個技術實踐,也能夠是代碼重構的小技巧,某個更好的寫法,某個好的工具,或者一個好的產品設計細節等等。就在這個羣裏發截圖或連接就能夠。
複製代碼

正巧要輪到我了,做爲剛轉入後端組發光發熱的"測試小夥",我居然給大夥分享了一個 "高效體驗奶茶" 的算法...後端

如下爲部分分享內容及互動...

我:數組

今日分享tips: 關於參數組合生成markdown

在接口測試或是單元測試中,咱們經常會遇到參數組合過多的問題。舉個例子,有一個接口,有 5 個參數,每一個參數又能夠取值 7 個,若是要驗證全部參數傳入狀況的話則須要測試 77777 = 16807 種狀況,針對這種狀況,咱們可使用 Pairwise 方法有效地減小測試用例數量的同時保證測試質量。工具

什麼是 Pairwise?

Pairwise 是一種覆蓋參數雙因子組合的測試方法。Pairwise基於以下 2 個假設:每個維度都是正交的,即每個維度互相都沒有交集;根據數學統計分析,73% 的缺陷(單因子是 35%,雙因子是 38%)是由單因子或兩個因子相互做用產生的,19% 的缺陷是由 3 個因子相互做用產生的。所以,Pairwise 基於覆蓋全部雙因子的交互做用產生的用例集合,是很是具備測試性價比的。單元測試

可是 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:

大家的分享都這麼高端,讓後來者很難啊!

......

或許這就是誇誇羣吧... [旺柴]

相關文章
相關標籤/搜索