第三次软工作业——实现最大字段和算法并进行判定条件覆盖
第三次軟工作業(yè)
- 實現最大子段和的算法并進行條件組合覆蓋測試
(一)什么是最大子段和?
我自己的理解:
一個數組可以若干個子數組,包含自身。每一個字數組都有一個數組元素之和,求這些和之間的最大值。
最樸素的思想就是通過三重循環(huán)計算出每個子數組的和,并取最大值。但這種方法會帶來很高的復雜度。現在“最大字段和”作為一個經典算法一般用動態(tài)規(guī)劃思想解決,復雜度可以降低到O(n)。詳細思想可以看這里。
(二)具體實現
- A.實現功能代碼
- B.實現判定條件覆蓋測試
什么是判定條件覆蓋測試?
- 判定條件覆蓋是設計足夠的測試用例,得使判斷中每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷本身所有可能結果也至少執(zhí)行一次。缺點是忽略了條件的組合情況。
- 例如:一個判定包括兩個條件如下
y>1 && z=0
一組符合判定/條件覆蓋的用例需要滿足下面
1.使得判定為真
2.使得判定為假
3.使得y>1
4.使得y<=1
5.使得z=0
6.使得z!=0
2.具體設計
在A步驟中的代碼中我們可以看到,一共有兩個判定條件,所以需要四組測試樣例分別測試
① b < 0 && b > sum 比如{-1 , 1 , 2 , 3} , 它的結果應該是6;
注:在運行到第2個元素的時候,b = 1 , sum = 0 ,滿足 b < 0 && b > sum② b < 0 && b ≤ sum 比如{-1 , 1 , 2 , 3} , 它的結果應該是6;
注:在運行到第1個元素的時候,b = -1 , sum = 0 ,滿足 b < 0 && b ≤ sum③ b ≥ 0 && b > sum 比如 {1 , 2 , 3 ,4} , 他的結果應該是10
注: 在運行到第1個元素的時候,b = 1 , sum = 0 ,滿足 b ≥ 0 && b > sum④ b ≥ 0 && b ≤ sum 比如 {0 , 0 , 0 , 0} , 他的結果應該是0
注: 在運行到第1個元素的時候,b = 0 , sum = 0 ,滿足 b ≥ 0 && b ≤ sum
通過以上思路寫出下面的測試代碼
using System; using Max_sum; using Microsoft.VisualStudio.TestTools.UnitTesting;namespace Max_sum_test {[TestClass]public class UnitTest1{[TestMethod]public void TestMethod1(){int len = 4;int[] a = new int []{-1,1,2,3};Assert.AreEqual(6 ,Program.Func_Test(len , a));}[TestMethod]public void TestMethod2(){int len = 4;int[] a = new int[] { -1, 1, 2, 3 };Assert.AreEqual(6, Program.Func_Test(len, a));}[TestMethod]public void TestMothod3(){int len = 4;int[] a = new int[] { 1, 2, 3, 4 };Assert.AreEqual(10, Program.Func_Test(len, a));}[TestMethod]public void TestMothod4(){int len = 4;int[] a = new int[] { 0, 0, 0, 0};Assert.AreEqual(0, Program.Func_Test(len, a));}}}測試全部通過,算法正確
圖一
(三)總結
1.在這次作業(yè)中,走了一點彎路,剛開始把問題想復雜了,總是想著“面向對象編程”= =,寫了很多無用代碼。其實這個作業(yè)就是寫一個功能函數并對其進行測試。
2.幫助自己更加熟悉IDE的操作,我覺得對往后的作業(yè)有很大的幫助。
3.在選擇控制臺程序時需要選擇console(.net framework), 否則在運行測試代碼的時候會報錯 。
4.分清Assert.equal() 和 Assert.AreEqual() 的區(qū)別,后者返回一個bool型變量,在測試中我們應該選擇它。
(四)外鏈
我的github
轉載于:https://www.cnblogs.com/Justdocument/p/8661354.html
總結
以上是生活随笔為你收集整理的第三次软工作业——实现最大字段和算法并进行判定条件覆盖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA基础知识要点
- 下一篇: 37 反转一个3位整数