司法三等申論題
114年
[檢察事務官電子資訊組] 程式語言
第 一 題
針對以下 C 程式碼,請先說明執行該程式之輸出,以及程式中函式 left()、right() 之運作功能;並請說明在 testGen() 測試 left()、right() 過程中,有那幾行指令未被充分測試。(25 分)
01 #include
02 #include
03 #include
04 char* left(char* data, int len, const char symbol) {
05 int dLen = strlen(data);
06 char* result = (char*)malloc(dLen + 1);
07 if (len > dLen) len = dLen;
08 strcpy(result, data);
09 for (int i = len; i < dLen; i++) result[i] = symbol;
10 return result;
11 }
12 char* right(char* data, int len, const char symbol) {
13 int dLen = strlen(data);
14 char* result = (char*)malloc(dLen + 1);
15 if (len > dLen) len = dLen;
16 strcpy(result, data);
17 for (int i = (dLen-len); i < dLen; i++) result[i] = symbol;
18 return result;
19 }
20 void testGen() {
21 char str[] = "abcdef";
22 char* left1 = left(str, 4, '@');
23 char* left2 = left(str, 8, '@');
24 char* right1 = right(str, 4, '@');
25 printf("%s\n", left1);
26 printf("%s\n", left2);
27 printf("%s\n", right1);
28 free(left1);
29 free(left2);
30 free(right1);
31 }
32 int main() {
33 testGen();
34 return 0;
35 }
📝 此題為申論題
思路引導 VIP
- 首先追蹤
left與right的迴圈邏輯,注意字串索引與symbol替換的範圍,並逐步寫出testGen內三個函式呼叫的字串輸出。 - 接著對比測試參數 (4, 8, 4) 與函式內的條件式 (
len > dLen),檢視是否有特定分支(True/False)從未被觸發,藉此找出缺乏分支涵蓋率(Branch Coverage)的程式碼行號。
🤖
AI 詳解
AI 專屬家教
【破題】 本題考查 C 語言字串操作、指標與動態記憶體配置的執行追蹤,同時藉由檢視測試案例評估程式碼的分支涵蓋率(Branch Coverage),以找出缺乏測試的特定指令。 【論述】
▼ 還有更多解析內容