# Testing Model

```Paper no.7
Complete testing
Author: Popescu Virgil
Date: November 15, 2006
Problem 2.12.
Compute the integer roots of a polynomial with integer coefficients.
Specification and design – the same approach as by now
Data n, (a[i], i = 0, 1, ..., n)
Results m, (r[i], i = 1, 2, ..., m)
where
* n – degree of polynomial (natural number)
* (a[i], i = 0, 1, ..., n) – coefficients of polynomial (integer numbers):
P(X) = a[n] X^n + ... + a[1] X + a[0]
where, a[n] &lt;&gt; 0.
* m – number of integer roots
* (r[i], i = 1, 2, ..., m) – integer roots, i.e. P(r[i]) = 0, i = 1, 2, ..., m.
* If the polynomial has no integer roots, then m = 0,
Otherwise (m &gt; 0) and (1 &lt;= i &lt;= m: P(r[i]) = 0) and (i &lt;&gt; j =&gt; r[i] &lt;&gt; r[j])).
.
.
.
.
Algorithm IntegerRoots is:
Roots(n, a, m, r)
WriteSeq(m, r)
endAlg
.
.
.
.
Test by the problem specification - &quot;black box method &quot;
Choices:
1. degree of polynomial:
1. small - examples:
- polynomial nul
- polynomial of degree 0
- polynomial of degree 1
2. average - examples:
- polynomial of degree 3
- polynomial de of degree 7
3. large - examples:
- polynomial of degree 99
- polynomial of degree 100
2. positive, negative roots
1 only positive roots
2 only negative roots
3 positive and negative roots
4 only null roots
5 both null and non-null roots
3. polynomials with and without integer roots
1 with integer roots
2 without integer roots
4. polynomials with or without multiple integer roots
1 with multiple roots only
2 witout multiple roots
3 with both multiple and non-multiple roots
5. polynomials with monoms of small degree null or not
1 monom of degree 0 non-nul
2 monom of degree 0 nul si 1 non-nul
3 monom of degree 0..k-1 nul and of degree k non-null (k large)
Choice
Polynomial
------------------------------------------------------1.1
null polynomial
1.1, 3.2, 5.1
5
1.2, 2.1, 3.1, 4.2, 5.1
x+5
1.2, 2.3, 3.1, 4.1, 5.1
x^2-1
1.2, 3.2
x^2+1
1.2, 2.5
x^2+x^3
5.2
x
1.3, 5.3
x^100+x^99
1.3, 5.3
x^100
.
.
Test by the text of the subprogram (statements analysis) - &quot; withe box method &quot;
For the choice of test data we discuss the Roots subalgorithm only. Roots:
Subalgorithm Roots(n, a, m, r) is:
1. k &lt;- 0
m &lt;- 0
2. While (a[k] &lt;&gt; 0) and (k &lt;= n) do
3.
k &lt;- k + 1
endwh
4. If k&lt;=n then
If k &gt; 0 then
5.
m &lt;- m + 1; r[m] &lt;- 0
Endif
6.
For d := 1, abs(a[k]) do
7.
If abs(a[k]) mod d = 0 then
9.
If ValPol(n, a, d) = 0 then
10.
m &lt;- m + 1; r[m] &lt;- d
endif
11.
If ValPol(n, a, -d) = 0 then
12.
m &lt;- m + 1; r[m] &lt;- -d
endif
endif
endfor
endif
endSub
{Determine the smallest index k
(k: 0..n) with a[k] &lt;&gt; 0}
{d divisor of a[k]?}
{d is root?}
{-d is root?}
Discussion:
- how do we choose the data;
- who gets executed each time and who does not;
- choose such that all combinations of sets of instructions that may or may not run are selected.
Input
n | a[n], ..., a[0]
--------------------E0 -1|
E1 0 | 2
E2 1 | 1, 1
E3 1 | 1, 0
E4 1 | 1, -1
E5 2 | 1, 2, 1
E6 2 | 1, -3, 2
E7 3 | 1, -4, 5, -2
E8 3 | 1, -4, 4, 0
E9 4 | 1, 1, 1, 0, 0
Output
Statements
m | r[1], ..., r[2]
executed
------------------ ------------------0|
1,2,4
0|
1,2,4,6(7,9,11,7,9,11)
1 | -1
1,2,4,6(7,9,11,12)
1|0
1,2,3,4,5,6(7,9,11)
1|1
1,2,4,6(7,9,10,11)
1 | -1
1,2,4,6(7,9,11,12)
2 | 1, 2
1,2,4,6(7,9,10,11,7,9,10,11)
2 | 1, 2
1,2,4,6(7,9,10,11,7,9,10,11)
2 | 0, 2
1,2(3)4,5,6(7,9,11,7,9,10,11,7,9,11,7,9,11)
1|0
1,2(3,3),4,5,6(7,9,11)
```