白盒筆試題全方面解析,面試成功率up50 !

2021-10-22 10:22:42 字數 2922 閱讀 2423

白盒筆試題解析

一、定義

黑盒測試—不關注內部結構的測試/基於輸入輸出的測試

白盒測試—基於內部結構的測試

白盒測試的關鍵: 覆蓋度

二、白盒相關概念

◆ 語句覆蓋:設計一套測試 讓被測物件中所有語句得到測試覆蓋

◆ 判定覆蓋:設計一套測試 讓被測物件中所有判定得到測試覆蓋

◆ 條件覆蓋:設計一套測試 讓被測物件中所有條件得到測試覆蓋

◆ 路徑覆蓋:設計一套測試 讓被測物件中所有路徑得到測試覆蓋

我們通過乙個圖來展示什麼是「語句」、「判定」、「條件」和「路徑「:

圖中:綠色框出部分即為」語句「;紅色框出部分即為」判定「;橘色框出部分即為」條件「,所有箭頭即為路徑。

例題解析

例題1

解:◆語句覆蓋

我們一步步來,首先來看語句覆蓋怎麼滿足,這段**中的每一行都是」語句「。

而其中關鍵所在在於then後面這句,他是有可能不執行的。語句覆蓋就是要設計出測試資料,使得所有語句都被執行。

那麼很簡單,只要讓兩個if判定判定為」真「即可。

那麼我們選擇一組資料:a = 2, b = 0 套進去判斷,兩個if判定都取真,then語句得到執行,我們就滿足了100%語句覆蓋。

判定覆蓋

判定是程式中最常見的一種運算,他的取值為布林型別,只有兩個可能取值:」true「 和 」false「(真和假)。

判定可以在程式中創造分支 - 很好理解,就像一條分叉路口,能讓程式的執行走向兩個不同方向,因此」判定覆蓋「又有別名」分支覆蓋「。

要滿足判定覆蓋,就要讓所有的判定都取到所有可能取值,即每個判定都取到」真「、」假「各一次。

本題中有兩個判定,即」if「語句,我們就要取一組測試資料,讓兩個if都取到真假最少各一次。

那麼我們選擇一組資料:a = 2, b = 0; a =0, b = 0 代入這段程式進行判斷,發現兩個判定的取值為:真真,假假。每個判定都各取到了真假一次,滿足了100%語句覆蓋。

例題2

語句覆蓋

語句覆蓋很簡單,只要讓then後的語句執行到即可,也就是要讓對應的if判定取真。

我們取 x = 2, y = 1 z任意,即可滿足上述條件,達到100%語句覆蓋。

分支覆蓋

分只覆蓋要求所有判定取真假各一次。

我們取 x = 2,y = 1 z任意即可讓兩個判定皆為真。 我們取 x = 0, y = 0 z任意即可讓兩個判定皆為假。這樣我們就滿足了題目要求。

例題3

我們的題目慢慢的難度上公升了,第三題就出現了while語句,並且要注意到題中還要求」效力最高「。

要滿足判定覆蓋,我們先找到題中的判定在**。很簡單,while語句就是判定,用自然語言解釋就是:

當變數i不大於25時,做一件事;當i大於25時,做另一件事。這個判定就是」i大不大於25「。

要滿足判定覆蓋,很簡單,只需要讓i小於等於25那麼隨著while邏輯中i的遞增,遲早會超出25,使得判定取到假值。比如我們取 i = 0就可以。

但是題中要求」效率最高「,那是什麼意思?

我們注意到,題中的while實現的是乙個迴圈邏輯,我們如果取 i = 0的話,while迴圈會迴圈26次。而如果我們取 i = 25的話,第一次迴圈,while判定為真,迴圈內部的邏輯執行1次。

執行了1次之後i ++, i的值變為26,while判定為假,迴圈跳出。所以取i = 25,迴圈只執行了一次,判定覆蓋即已滿足。 i = 25就是可以滿足」效力最高「的滿足判定覆蓋。

例題4

更難的題來了。此題還是要滿足判定覆蓋,我們先把所有判定找出來。此題中的三個if和乙個else都是判定。那麼我們就要讓所有四個判定分別取到真和假值。

直觀的想法,我們取四個值: n = 0 , n = 1, n =2 , n = -1就可以讓所有判定都被覆蓋到真假所有可能。但是題中問到,」最少「需要多少個?

我們來看第三個判定後的return語句:

有沒有發現什麼端倪?這段函式的函式名就叫fib,而函式內部的這段return語句就直接呼叫了fib函式本身!

這就叫」遞迴「。

如果我們代入n = 2這樣的資料進入這個函式進行運算,發現return語句演變成以下形式:return fib(1) + fib(0) + fib(-1)

等於我們又把n = 1, n = 0, n = -1三個取值分別代入了函式中。也就是說我們只需要 n = 2一組資料,即滿足了所有判定的真假覆蓋!

然後下面分享一些我收藏資料,希望可以幫到大家

前端安全方面面試題

兩種思路 不要讓其變成程式,這個資料變成程式的話不讓它執行 瀏覽器內建了對反射型xss的防禦,當它檢測到有反射型xss的時候會進行攔截 對資料進行適當轉義,包括在正文中的轉義,屬性中的轉義,指令碼中的轉義,轉義的字元包括大於號小於號單雙引號以及and號等等 針對不能對html標籤全部過濾或轉義的情況...

微軟筆試題 回憶(回文方面)

這道題當年我沒有做出來,今天微軟筆試又碰到了類似的題目 狠心要將這一塊吃透 主要還是對動態規劃掌握的不夠熟練。n個瓶子都有編號,每次能射擊1個或多個瓶子,如果是回文的就能一次性擊倒。最少幾次能全擊倒?輸入 1,2 輸出 2 輸入 1,3,4,1,5 輸出 3 說明 第一次先射3,變成 1,3,1,5...

筆試題目解析(1)

後期有一定的計畫是總結總結各路英雄的面試題,我做已解答,講真我真的是很緊張哇,平時你們看我樂觀向上,其實我一點都不淡定,我不樂觀。首先是如何實現乙個倒計時功能 這道題的解決方案大家也都知道,要用到setinterval函式,setinterval code,millisec lang 毫秒為單位進行...