ST-4

1、(49-7)使用下面的方法printPrimes()完成后面的问题:

(a)为printPrimes()方法画控制流图。

(b)考虑测试用例t1=(n=3)和t2=(n=5)。即使这些测试用例游历printPrimes()方法中的主路径,它们不一定找出相同的错误。设计一个简单的错误,使t2比t1更容易发现。

对于数组越界问题,t2比t1更容易发现

(c)针对printPrimes(),找到一个测试用例,使得相应的测试路径访问连接while语句开始到for语句的边,而不通过while循环体。

测试用例t = (n = 1)满足条件。

(d)针对printPrimes()的图列举出每个节点覆盖、边覆盖、和主路径覆盖的测试需求。

点覆盖:tr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}

边覆盖:tr2 = {(1,2), (2,3), (3,4), (4,5), (5,14), (14,4), (5,6), (6,7), (7,8), (7,9), (8,9), (9,2), (2,10), (10,11), (11,12), (12,11), (11,13)}

主路径覆盖:tr3 = {(11,12,11), (12,11,12), (4,5,14,4), (5,4,14,5), (2,3,4,5,6,7,8,9,2), (1,2,3,4,5,6,7,8,9), (1,2,10,11,12), (1,2,10,11,13) }

2、基于Junit及Eclemma(jacoco)实现一个主路径覆盖的测试。

 1 package com.prime;
 2
 3 import static org.junit.Assert.*;
 4
 5 import java.io.ByteArrayOutputStream;
 6 import java.io.PrintStream;
 7
 8 import org.junit.After;
 9 import org.junit.AfterClass;
10 import org.junit.Before;
11 import org.junit.BeforeClass;
12 import org.junit.Test;
13
14 public class testNumPrime {
15     PrintStream console = null;
16     ByteArrayOutputStream bytes = null;
17     numPrime np;
18
19     @Before
20     public void setUp() throws Exception {
21         np = new numPrime();
22         bytes = new ByteArrayOutputStream();
23         console = System.out;
24
25         System.setOut(new PrintStream(bytes));
26     }
27
28     @After
29     public void tearDown() throws Exception {
30         System.setOut(console);
31     }
32
33     @Test
34     public void test1() {
35         np.printPrimes(1);
36         assertEquals("2 ", bytes.toString());
37     }
38     @Test
39     public void test2() {
40         np.printPrimes(3);
41         assertEquals("2 3 5 ", bytes.toString());
42     }
43     @Test
44     public void test3() {
45         np.printPrimes(5);
46         assertEquals("2 3 5 7 11 ", bytes.toString());
47     }
50 }

测试结果为:

实现了主路径覆盖。

时间: 2024-08-25 10:00:41

ST-4的相关文章

RMQ问题 - ST表的简单应用

2017-08-26 22:25:57 writer:pprp 题意很简单,给你一串数字,问你给定区间中最大值减去给定区间中的最小值是多少? 用ST表即可实现 一开始无脑套模板,找了最大值,找了最小值,分别用两个函数实现,实际上十分冗余 所以TLE了 之后改成一个函数中同时处理最大值和最小值,就可以了 AC代码如下: /* @theme:poj 3264 @writer:pprp @declare:ST表(sparse table)稀疏表,用动态规划的思想来解决RMQ问题: @date:2017

[模板]ST表浅析

ST表,稀疏表,用于求解经典的RMQ问题.即区间最值问题. Problem: 给定n个数和q个询问,对于给定的每个询问有l,r,求区间[l,r]的最大值.. Solution: 主要思想是倍增和区间dp. 状态:dp[i][j] 为闭区间[i,i+2^j-1]的最值. 这个状态与转移方程的关系很大,即闭区间的范围涉及到了转移方程的简便性. 转移方程:dp[i][j]=max(dp[i][j-1],dp[i+2^(j-1)][j-1]). 这是显然的,但这里有个细节:第一个项的范围为[i,i+2^

【模板】ST表 洛谷P1816 忠诚

P1816 忠诚 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于 管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次的 账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题. 输入输出格式 输入格式: 输入中第一行有两个数m,n表示有m(m<=100000

GCD(st表)

GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 3432    Accepted Submission(s): 1227 Problem Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). There a

关于st表的推导

#include <bits/stdc++.h> using namespace std; const int maxn=1e6+7; int st[maxn][32]; int a[maxn],n; void init(){ int i,j; //st[i][j]表示i到i+2^j-1区间的最小值 //先预处理区间长度为1的 for(i=0;i<n;++i) st[i][0]=a[i]; for(i=0;i<n;++i){ for(j=1;i+2^(j)-1<n;++j){

UVA 11475 Extend to Palindrome(后缀数组+ST表)

[题目链接] http://acm.hust.edu.cn/vjudge/problem/27647 [题目大意] 给出一个字符串,要求在其后面添加最少的字符数,使得其成为一个回文串.并输出这个回文串. [题解] 用拼接符将原字符串倒序相接,做一遍后缀数组,查询两串相应位置的LCP就是以该点为中心的回文串长度的一半分,奇偶求出所有后缀回文串,保留最长的,则补充部分为剩下的前缀的倒置.至于查询两串的LCP我们可以在height数组建立ST表查询. [代码] #include <cstdio> #

lca最近公共祖先(st表)

大体思路 1.求出每个元素在树中的深度 2.用st表预处理的方法处理出f[i][j],f[i][j]表示元素i上方第2^j行对应的祖先是谁 3.将较深的点向上挪,直到两结点的深度相同 4.深度相同后,祖先可能就在上方,再走几步就到了,于是两个点同时向上移 具体的方法和代码贴在下面 ↓ 具体来看 1.求出每个元素在树中的深度 //求每个节点在树中的深度 void dfs(int pos,int pre)//pre是pos的父节点 { for(int i=0;i<v[pos].size;i++)//

HDU 5875 st+二分区间

题目大意:给你n个数,q次询问,每次询问区间[l, r],问a[i]%a[i + 1] % a[i + 2]...%a[j](j <= r)的值 思路:st预处理维护,在二分区间,复杂度n*(logn)*logn //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using namespace std; #define LL long long #define ALL(a) a.begin(), a.en

【BZOJ-3956】Count ST表 + 单调栈

3956: Count Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 173  Solved: 99[Submit][Status][Discuss] Description Input Output Sample Input 3 2 0 2 1 2 1 1 1 3 Sample Output 0 3 HINT M,N<=3*10^5,Ai<=10^9 Source CH Round#64 MFOI杯水题欢乐赛day1 By Gromah So

RMQ问题——ST算法

什么是RMQ.ST:RMQ(Range Minimum/Maximum Query)问题,即求区间的最值.可以写一个线段树来实现,但是每次查询的时间复杂度为O(log n),若查询次数过多则可能超时.ST算法是一种离线算法,经过O(nlogn)的预处理后,可以在O(1)的时间复杂度内进行查询,缺点是无法对数据做出修改. 算法实现: 初始化:用dp实现初始化.a[]为原始数据数组f,[i][j]表示从i向后的2j个数字中的最值.显然f[i][0]=a[i]; 我们将f[i][j]分为两段,一段为a