测试任务
本次作业通过条件组合覆盖的标准进行测试,设计了一系列针对最大连续子数组和问题的测试用例,旨在全面覆盖可能的输入情况。
测试设计
需要测试的功能函数
// 最大子数组和
int maxSubArraySum(const vector<int>& nums) {
if (nums.empty()) {
return 0; // 如果数组为空,返回0
}
int maxSoFar = nums[0]; // 到目前为止的最大子数组和
int currentMax = nums[0]; // 当前位置的最大子数组和
for (int i = 1; i < nums.size(); ++i) {
currentMax = max(nums[i], currentMax + nums[i]);
maxSoFar = max(maxSoFar, currentMax);
}
return maxSoFar > 0 ? maxSoFar : 0;
}
根据程序的功能和逻辑,制定了以下测试样例:
-
空数组:验证函数对空数组的处理。
-
全部为负数:检测函数对全负数组的响应。
-
正负混合数值:评估函数处理含有正负数的数组的能力。
-
全部为正数:测试函数对全正数组的计算结果。
-
单个元素数组(负数):验证函数对只包含一个负数的数组的处理。
-
单个元素数组(正数):检验函数对仅含一个正数的数组的反应。
-
单个零元素数组:测试函数对只有一个零元素的数组的处理。
-
全部为零的数组:评估函数对全零数组的处理。
// 处理 maxSubArraySum 函数中空数组的测试用例。 TEST(MaxSubArraySumTest, HandlesEmptyArray) { cout << "Testing with an empty array." << endl; std::vector<int> nums = {}; EXPECT_EQ(maxSubArraySum(nums), 0); } // 处理所有负数的测试用例。 TEST(MaxSubArraySumTest, HandlesAllNegativeNumbers) { cout << "Testing with all negative numbers." << endl; std::vector<int> nums = { -1, -2, -3, -4 }; EXPECT_EQ(maxSubArraySum(nums), 0); } // 处理混合正负数的测试用例。 TEST(MaxSubArraySumTest, HandlesMixedPositiveAndNegativeNumbers) { cout << "Testing with mixed positive and negative numbers." << endl; std::vector<int> nums = { -2, 11, -4, 13, -5, -2 }; EXPECT_EQ(maxSubArraySum(nums), 20); } // 处理所有正数的测试用例。 TEST(MaxSubArraySumTest, HandlesAllPositiveNumbers) { cout << "Testing with all positive numbers." << endl; std::vector<int> nums = { 1, 2, 3, 4 }; EXPECT_EQ(maxSubArraySum(nums), 10); } // 处理单个元素的测试用例。 TEST(MaxSubArraySumTest, HandlesSingleElementArray) { cout << "Testing with a single element array." << endl; std::vector<int> nums = { -5 }; EXPECT_EQ(maxSubArraySum(nums), 0); cout << "Testing with a single positive element array." << endl; nums = { 5 }; EXPECT_EQ(maxSubArraySum(nums), 5); } // 处理单个零元素的测试用例。 TEST(MaxSubArraySumTest, HandlesSingleZeroElementArray) { cout << "Testing with a single zero element array." << endl; std::vector<int> nums = { 0 }; EXPECT_EQ(maxSubArraySum(nums), 0); } // 处理所有零元素的测试用例。 TEST(MaxSubArraySumTest, HandlesAllZerosArray) { cout << "Testing with an array of all zeros." << endl; std::vector<int> nums = { 0, 0, 0, 0 }; EXPECT_EQ(maxSubArraySum(nums), 0); }
测试工具与结果
使用Visual Studio 2022中的Google Test框架进行自动化测试。根据设计的测试样例编写相应的单元测试代码,并在Visual Studio中运行测试,所有测试用例均成功通过。
分析与结论
通过测试结果,可以得出程序能够正确处理各种边界情况和典型情况,包括空数组、全负数数组、正负混合数组、全正数数组、单个元素数组以及全零数组。
总体来说,本次作业不仅加深了我对软件测试重要性的认识,而且通过实际操作,提高了我使用自动化测试工具的能力。同时,通过设计不同的测试用例,我也对如何全面测试软件功能有了更深入的理解。
GitHub 链接 https://github.com/LuckyE993/Software-Engineering/tree/master/code/PersonalWork2