Professional Documents
Culture Documents
Data Flow Technique BM
Data Flow Technique BM
Dalam White-box test design, bagi menguji struktur source-code, kita perlu merekabentuk test
berdasarkan control-flow dan data-flow. Control-flow menguji struktur kawalan sama ada
statement, condition, branch dan juga path yang ada dlm source code semasa code di-execute.
Selain itu, kita juga perlu menguji aliran nilai bagi setiap variable yg ada dlm source-code
menggunakan teknik rekabentuk data-flow.
Maka, sekiranya kita menggunakan teknik data-flow test design, kita perlu mencari berapakah
bilangan test case yang mungkin untuk cover 100% aliran data bagi setiap variable yang ada.
Oleh itu, kita perlu bina test case berdasarkan setiap variable yg ada. Jika ada 10 variable dlm
source-code, maka kena bina sejumlah test-case yang bersesuaian untuk setiap satu variable
berkenaan.
Kita perlu bina test-case guna teknik data-flow untuk mencari kemungkinan kewujudan
defect/error dalam source code yang berkaitan proses data. Contohnya variable x digunakan dalam
operasi tambah tanpa ianya di-declare terlebih dahulu.
Dalam static testing (test tanpa perlu execute source-code), kaedah data-flow juga digunakan
dalam static analysis. Cuma perbezaannya adalah pada static analysis, compiler digunakan untuk
menguji dan tester tidak perlu design test-case.
Tetapi, tidak semua jenis error mampu dikenalpasti oleh compiler kerana source-code tidak
diexecute. Hanya syntax error sahaja yang dikenalpasti.
1. Bina Control Flow Graph(CFG) yang sama seperti kaedah control-flow technique.
Source code pada rajah 1 mengira jumlah bil yang perlu dibayar berdasarkan
penggunaan.
Rajah 2: CFG bagi source-code CalculateBill()
2. Kemudian, wakilkan setiap operasi yang melibatkan variable dengan notasi pada jadual 1
dalam source-code:
Killed, terminate, undefined (variable akan ‘}’ terakhir dalam fungsi akan
k atau kill diterminate/killed apabila tamat fungsi atau hapuskan semua var yang ada
memory bg variable dihapuskan ) k(x) atau kill x.
Used/ digunakan bagi pelbagai operasi sama
u atau
ada operasi pengiraan(c) atau condition(p). -
use
Penerangan lanjut pada baris di bawah.
Digunakan bagi operasi variable yang z = x + 3; uc(x) atau c-use x
uc atau c-
melibatkan pengiraan atau selain daripada printf(x); uc(x) atau c-use x
use
condition. return x; uc(x) atau c-use x
p-use usage
p-use usage
c-use bill & def bill c-use usage
c-use bill
3. Bina CFG bagi setiap var. Terdapat 2 var dalam calculateBill(), maka perlu bina 2 CFG. Nyatakan
flow operasi bagi setiap var dlm CFG berdasarkan notasi yang telah ditentukan.
Rajah 3: CFG bagi operasi var Bill
Rajah 3: CFG bagi operasi Bill
LANGKAH KE-DUA: Design dan tentukan bilangan test case bagi setiap variable berdasarkan 7 Strategi
berikut:
1. All-Definition (AD)
Bagi semua def yang ada dalam source code bagi variable tersebut, kenalpasti at least 1 test
path(TP) kepada mana-mana use (sama ada p-use atau c-use).
Kenalpasti bil. def bagi var Bill dalam cfg pada rajah 3 : 5 def (nod 1,3,6,8 dan 9)
Cari TP yang mungkin (def->use) bagi setiap def :
Maka, bilangan test case bagi 100% AD coverage untuk var Bill adalah 5.
Kenalpasti bil. Def bagi var Usage pada rajah 4 : 1 def (nod 0).
Cari TP yang mungkin (def->use) bagi def di nod 0 - TP1: 0-1-2.
Maka, bilangan test case bagi 100% AD coverage untuk var Usage adalah 1.
2. All-uses (AU)
Bagi semua use(p-use dan c-use) yang ada dalam source code bagi variable tersebut,
kenalpasti at least 1 TP dari use tersebut kepada mana-mana def sebelumnya (use def).
Kenalpasti bil. use yang ada bagi var Bill pada rajah 3: 5 use (nod 6,7,8,9,10)
Cari TP yang mungkin (use def) bagi setiap use:
use nod 6 TP1: 3-4-5-6
use nod 7 TP2: 6-7
use nod 8 TP3: 6-7-8
use nod 9 TP4: 3-4-5-9
use nod 10 8-10
9-10 pilih salah satu sahaja. Maka TP5: 8-10
3-4-10
1-2-10
3. All-c-uses (ACU)
Bagi semua def yang ada dalam source-code bagi variable berkenaan, kenalpasti at least 1 TP
yang mungkin dari def kepada setiap c-use yang boleh dicapai (defc-use). Pastikan semua
TP telah cover semua def dan semua c-use.
Kenalpasti bil def yang ada pada var Bill pada rajah 3: 5 def (nod 1,3,6,8,9).
Kenalpasti bil c-use yang ada pada var Bill pada rajah 3: 4 c-use (nod 6,8,9,10).
Cari semua TP yang mungkin (defc-use) bagi setiap def.pastikan semua c-use juga
dicover:
def nod 1 TP1: 1-2-10 def 1 dan c-use 10 telah dicover
def nod 3 3-4-5-6 Sekiranya terdapat lebih dari 1 TP, pilih TP
3-4-5-9 yg cover c-use selain 10.
3-4-10 Maka TP2: 3-4-5-6 dan TP3: 3-4-5-9
def nod 6 6-7-8 Sekiranya terdapat lebih dari 1 TP, pilih TP
6-7-10 yg cover selain c-use 10,6,9. Maka
TP4: 6-7-8
def nod 8 TP5: 8-10 Ambil TP yg ada sekiranya terdapat 1TP
bagi defc-use walaupun c-use telah
dicover pada TP sebelumnya.
def nod 9 TP6: 9-10 Sama seperti def 8
Maka, bilangan TP bagi 100% ACU coverage bagi var Bill adalah 6.
Kenalpasti bil. def bagi var Usage pada rajah 4 : 1 def (nod 0).
Kenalpasti bil. c-use yang ada bagi var Usage pada rajah 4: 2 (nod 6,9).
Cari semua TP yang mungkin (defc-use) bagi setiap def.pastikan semua c-use juga
dicover:
def nod 0 TP1: 0-1-2-3-4-5-6 Sekiranya terdapat lebih dari 1 TP,
TP2: 0-1-2-3-4-5-9 pilih TP yg cover semua nod
c-use(6,9).
Maka, bilangan TP bagi 100% ACU coverage bagi var Usage adalah 2.
4. All-p-uses (APU)
Bagi semua def yang ada dalam source-code bagi variable berkenaan, kenalpasti at least 1 TP
yang mungkin dari def kepada setiap p-use yang boleh dicapai (defp-use). Pastikan semua
TP telah cover semua def dan semua p-use.
Kenalpasti bil def yang ada pada var Bill pada rajah 3: 5 def (nod 1,3,6,8,9).
Kenalpasti bil p-use yang ada pada var Bill pada rajah 3: 1 (nod 7).
Cari semua TP yang mungkin (defp-use) bagi setiap def.pastikan semua p-use juga
dicover:
def nod 1 TP1: 1-2-3-4-5-6-7
def nod 3 TP2: 3-4-5-6-7 Ambil TP yg ada sekiranya terdapat
1TP shj walaupun p-use telah dicover
pada TP bagi def lain kerana perlu
untuk cover def nod 3.
def nod 6 TP3: 6-7 Sama seperti def nod 3.
Maka, bilangan TP bagi 100% APU coverage bagi var Bill adalah 3.
Kenalpasti bil. def bagi var Usage pada rajah 4 : 1 def (nod 0).
Kenalpasti bil. p-use yang ada bagi var Usage pada rajah 4: 3 (nod 2,4,5).
Cari semua TP yang mungkin (defp-use) bagi setiap def.pastikan semua p-use juga
dicover:
def nod 0 TP1: 0-1-2 Sekiranya terdapat lebih dari 1 TP,
TP2: 0-1-2-3-4 pilih TP yg cover semua nod p-use
TP3: 0-1-2-3-4-5 (nod 2,4,5).
Maka, bilangan TP bagi 100% APU coverage bagi var Usage adalah 3.
5. All-c-uses/Some-p-uses (ACU+P)
Syarat yang sama dengan ACU, tetapi sekiranya wujud mana-mana def yang tidak mempunyai
path kepada c-use, perlu digantikan dengan defp-use.
Ambil TP bagi ACU var Bill sebelum ini, kemudian semak adakah terdapat def yang tidak
mempunyai TP defc-use. Jika ada, gantikan dengan TP defp-use bagi nod def
berkenaan.
def nod 1 TP1: 1-2-10
def nod 3 TP2: 3-4-5-6
TP3: 3-4-5-9
def nod 6 TP4: 6-7-8
def nod 8 TP5: 8-10
def nod 9 TP6: 9-10
Semua def mempunyai TP defc-use. Maka tidak perlu penambahan TP defp-use
bagi mana2 nod def.
Maka, bilangan TP bagi 100% ACU+P coverage untuk var Bill adalah 6.
Ambil TP bagi ACU var Usage sebelum ini, kemudian semak adakah terdapat def yang
tidak mempunyai TP defc-use. Jika ada, gantikan dengan TP defp-use bagi nod def
berkenaan.
6. All-p-uses/Some-c-uses (APU+C)
Syarat yang sama dengan APU, tetapi sekiranya wujud mana-mana def yang tidak mempunyai
path kepada p-use, perlu digantikan dengan defc-use.
Ambil TP bagi APU var Bill sebelum ini, kemudian semak adakah terdapat def yang tidak
mempunyai TP defp-use. Jika ada, gantikan dengan TP defc-use bagi nod def
berkenaan.
Terdapat 2 def nod yang tidak mempunyai TP defp-use iaitu nod 8 dan 9. Maka bagi
setiap nod def, gantikan dengan TP defc-use.
Maka, bilangan TP bagi 100% APU+C coverage untuk var Bill adalah 5.
Ambil TP bagi APU var Usage sebelum ini, kemudian semak adakah terdapat def yang
tidak mempunyai TP defp-use. Jika ada, gantikan dengan TP defc-use bagi nod def
berkenaan.
def nod 0 TP1: 0-1-2
TP2: 0-1-2-3-4
TP3: 0-1-2-3-4-5
Semua def mempunyai TP defp-use. Maka tidak perlu penambahan TP defp-use
bagi nod def 0.
Maka, bilangan TP bagi 100% APU+C coverage untuk var Usage adalah 3.
7. All-du-path (ADUP)
Mengambil semua TP bagi ACU+P dan APU+C.
TP bagi ACU+P
def nod 1 TP1: 1-2-10
def nod 3 TP2: 3-4-5-6
TP3: 3-4-5-9
def nod 6 TP4: 6-7-8
def nod 8 TP5: 8-10
def nod 9 TP6: 9-10
TP bagi APU+C
def nod 1 TP7: 1-2-3-4-5-6-7
def nod 3 TP8: 3-4-5-6-7
def nod 6 TP9: 6-7
def nod 8 TP10: 8-10 Sama dengan TP5. Hapus TP10.
def nod 9 TP11: 9-10 Sama dengan TP6. Hapus TP11.
Hapus mana-mana TP yang sama(duplicate). TP10 dan TP11 bertindan dengan TP5 dan
TP6. Hapus TP10 dan TP11. Maka, bilangan TP bagi 100% ADUP coverage untuk var Bill
adalah 9.
Ambil hasil TP bagi ACU+P dan APU+C bagi var Usage:
TP bagi ACU+P
def nod 0 TP1: 0-1-2-3-4-5-6
TP2: 0-1-2-3-4-5-9
TP bagi APU+C
Def nod 0 TP3: 0-1-2
TP4: 0-1-2-3-4
TP5: 0-1-2-3-4-5
Hapus mana-mana TP yang sama(duplicate). Tiada TP yang duplicate. Maka, bilangan
TP bagi 100% ADUP coverage untuk var Usage adalah 5.
Rumusan keseluruhan TP bagi ketujuh-tujuh strategi untuk var Bill dan Usage:
Jadual 2: TP bagi var Bill dan Usage untuk 7 strategi Data-Flow
Strategy TP bagi var Bill TP bagi var Usage
TP1: 1-2-10 TP1: 0-1-2
TP2: 3-4-5-6
AD TP3: 6-7
TP4: 8-10
TP5: 9-10
TP1: 3-4-5-6 TP1: 0-1-2
TP2: 6-7 TP2: 0-1-2-3-4
AU TP3: 6-7-8 TP3: 0-1-2-3-4-5
TP4: 3-4-5-9 TP4: 0-1-2-3-4-5-6
TP5: 8-10 TP5: 0-1-2-3-4-5-9
TP1: 1-2-10 TP1: 0-1-2-3-4-5-6
TP2: 3-4-5-6 TP2: 0-1-2-3-4-5-9
TP3: 3-4-5-9
ACU
TP4: 6-7-8
TP5: 8-10
TP6: 9-10
TP1: 1-2-3-4-5-6-7 TP1: 0-1-2
APU TP2: 3-4-5-6-7 TP2: 0-1-2-3-4
TP3: 6-7 TP3: 0-1-2-3-4-5
TP1: 1-2-10 TP1: 0-1-2-3-4-5-6
TP2: 3-4-5-6 TP2: 0-1-2-3-4-5-9
TP3: 3-4-5-9
ACU+P
TP4: 6-7-8
TP5: 8-10
TP6: 9-10
TP1: 1-2-3-4-5-6-7 TP1: 0-1-2
TP2: 3-4-5-6-7 TP2: 0-1-2-3-4
APU+C TP3: 6-7 TP3: 0-1-2-3-4-5
TP4: 8-10
TP5: 9-10
TP1: 1-2-10 TP1: 0-1-2-3-4-5-6
TP2: 3-4-5-6 TP2: 0-1-2-3-4-5-9
TP3: 3-4-5-9 TP3: 0-1-2
TP4: 6-7-8 TP4: 0-1-2-3-4
ADUP TP5: 8-10 TP5: 0-1-2-3-4-5
TP6: 9-10
TP7: 1-2-3-4-5-6-7
TP8: 3-4-5-6-7
TP9: 6-7
LANGKAH KE-TIGA: Bina Test Case dengan menentukan test data (nilai input) dan expected result bagi
setiap TP yang dikenalpasti.
Bagi kedua-dua TP var iaitu Bill dan Usage, test data adalah nilai bagi var usage pada nod 0
dan expected result merupakan nilai bagi var Bill pada nod 11.
Untuk menguji data-flow coverage bagi Usage, tester hanya perlu menguji TC bagi strategi
ADUP sahaja kerana kesemua TC ADUP telah cover semua strategi yang lain (AD, AU, ACU,
APU, ACU+P, APU+C). Maka hanya 5 TC diperlukan bagi 100% data-flow coverage bagi var
Usage.
Secara keseluruhan, sebanyak 14TC (9TC Bill + 5TC Usage) diperlukan untuk menguji 100%
data-flow coverage bagi source-code calculateBill().
Apakah Jenis Defect/Bug/Anomali Bagi Data-Flow?
Jadual 5 menerangkan jenis-jenis anomali/defect yang mungkin terjadi pada data-flow. Jenis
anomali “Serious defect” akan mendatangkan error pada source-code. Jenis anomali “potential
bug” pula hanya mengeluarkan amaran “warning” semasa source-code di-compile dan
berkemungkinan mendatangkan error semasa runtime.
Jadual 5: Anomali Bagi Data-Flow Testing