メソッドが複雑すぎては、試験プログラムも簡単にはならない。
|
Process.java
public class Process {
public void doProc(boolean a, boolean b, boolean c) {
if (a) {
if (b) {
if (c) {
// 処理11
}
else {
// 処理12
}
}
else {
if (c) {
// 処理21
}
else {
// 処理22
}
}
}
else {
if (b) {
// 処理11
}
else {
// 処理21
}
}
}
}
分岐が多く、試験プログラムですべてのコードを網羅することが難しくなります。 また、同じコードの部分がありますが、これらを重複して試験することにもなります。 |
Process.java
public class Process {
public void doProc(boolean a, boolean b, boolean c) {
if (a)
doProcA(b, c);
else
doProcB(b);
}
private void doProcA(boolean b, boolean c) {
if (b)
doProcAA(c);
else
doProcAB(c);
}
private void doProcAA(boolean c) {
if (c)
doProc11();
else
doProc12();
}
private void doProcAB(boolean c) {
if (c)
doProc21();
else
doProc22();
}
private void doProcB(boolean b) {
if (b)
doProc11();
else
doProc21();
}
private void doProc11() { /* 処理11 */ }
private void doProc12() { /* 処理12 */ }
private void doProc21() { /* 処理21 */ }
private void doProc22() { /* 処理22 */ }
}
試験プログラムが単純になるように、条件分岐を排除するようにするか、別メソッドに分割して分岐を少なくしましょう。 |
試験のたびに実行環境が変わるようでは、試験プログラムも簡単にはならない。
|
Process.java
public class Process {
public void doProc() {
Calendar cal = Calendar.getInstance();
int dow = cal.get(Calendar.DAY_OF_WEEK);
if (dow == Calendar.SUNDAY) {
// 処理
}
}
}
実際の曜日と処理の振る舞いが密接に結合しているため、試験が難しくなっています。 |
Process.java
public class Process {
public void doProc(int dow) {
if (dow == Calendar.SUNDAY) {
// 処理
}
}
}
引数を使って、曜日を置き換えられるようにしていますので、任意の曜日の試験がしやすくなっています。 |