r1 - 28 Sep 2008 - 16:47:23 - PanitaMeananeatraYou are here: SETEC Wiki >  Knowledge Web  > SoftwareEngineeringCategory > SoftwareTesting > SoftwareTestingTools

Software Testing Tools

Overview

   Testing Tools ในที่นี้กล่าวถึง การ Test ใน ระดับ Unit Test ซึ่งมีสองแบบ คือ การ Test แบบ Black Box และ White Box ใน White Box โดยส่วนมากที่นิยมใช้กันจะดู Code Coverage ว่าโปรแกรมที่เราต้องการนำมาทดสอบนี้ Code ส่วนไหนได้ถูก Execute ไป และส่วนไหนที่ยังไม่ถูก รวมถึง Branches Coverage คือต้องการดูว่า Test Case ที่เรา Test เข้าไปนั้น ได้ครอบคลุม Branch นั้นๆ ไปกี่ % และทำให้เราทราบถึงว่า เราควรจะอีกกี่ Test Case ถึงจะได้ Branches Coverage ครบที่เราได้ตั้งเป้าหมายเอาไว้ เช่น ต้องการดู Branches Coverage 100 % เราอาจจะใช้ถึง 3 Test Cases หรือมากกว่านั้น หรืออย่างดีก็ Test Case เดียว

    การวัด Code Coverage มีพื้นฐานมาจากการ Test JUnit โดยใส่ Test Case ค่าใดค่าหนึ่งเข้าไปเพื่อให้ คลาสหรือ method นั้นๆทำงาน เป็น การ Test ในระดับ Unit อย่างง่ายๆ และ เป็นหน่วยที่เล็กที่สุด เราจึงจะสามารถ วัด Code Coverage ของ Test Case นั้นได้ การใช้ JUnit ศึกษา ได้จาก Link นี้เลยครับ

Code Coverage

    Code Coverage เป็นTesting Tools แบบหนึ่ง หลักการทั่วไปของ Code Coverage Tools จะทำการ Instrument Java Class (ในที่นี้กล่าวถึงภาษา Java เป็นกรณีศึกษา) โดยทำการแทรก code เข้าไปใน ใน branch หรือ ทุกๆ statement เพื่อทำการดักและเก็บ Log หรือข้อมูล การ execute ผ่านจุด ที่แทรกเข้าไปนั้น หรือ code cover โดยการกระทำนี้ จะทำในระัดับ Byte Code คือหลังจาก Compile แล้ว และในการ ทำแบบนี้ จะมีสอง Mode การทำงานด้วยกันคือ 1. แบบ Offline และ 2. แบบ On-the-Fly การกระทำกับ Byte Code ที่กล่าวมาข้างต้น จะเรียกว่าการทำ "Byte Code Engineering"

bytecodeengineering.jpg

bytecodeengineering2.jpg

รูป ก่อน และหลัง การทำ Byte Code Probes หรือการ แทรก คำสั่ง เข้าไปเพื่อดักการ execute

bytecodeengineering3.jpg

ใน Java มี Byte Code Engineering Library ที่นิยม ใช้กัน คือ

ASM , http://asm.objectweb.org/ , Soot , http://www.sable.mcgill.ca/soot/ ,และ BCEL http://jakarta.apache.org/bcel/index.html

    ในที่นี้เราจะศึกษาหลายๆชนิด เพื่อเปรียบเทียบ และหาข้อแตกต่างใน Code Coverage Tools แต่ละชนิดด้วยกัน ในที่นี้ จะมีสองชนิดคือ ที่เสียค่าใช้จ่ายกับ ชนิดที่เป็น Open Source หรือฟรี เราจะทดสอบกับ ชนิดที่ เป็น Open Source โดย Code Coverage Tools ที่จะทำมา ทดสอบ ต่างๆ ดังนี้

ผลการทดสอบ Code Coverage Tools ชนิดต่างๆ

Feature\Tools
Cobertura
Emma
Panopticode
- ภาษาที่ใช้ในการพัฒนา Java Java Java
- ความต้องการของระบบ - Java 1.3 ขึ้นไป
- ทุกๆระบบปฏิบัติการ
- Java 1.3 ขึ้นไป
- ทุกๆระบบปฏิบัติการ
- Java 1.3 ขึ้นไป
- ทุกๆระบบปฏิบัติการ
- ผู้พัฒนา
  • Joakim Erdfelt
  • John Lewis
  • Grzegorz Lukasik
  • Ji?? Mare?
  • Jeremy Thomerson
  • Vlad Roubtsov
  • Julias Shaw - Project Lead
  • Chris Turner - Developer
  • Peter Sestoft - Contributor
  • Alok Singh - Advisor
  • Jeff Bay - Advisor
- ความสามารถในการ Test
  • สามารถ executed จาก ant srcipt หรือจาก Command Line
  • Instruments Java Byte Code หลังจาก Compiles
  • สามารถ Report ออกมาเป็น ไฟล์ HTML หรือ XML
  • คำนวน Line , Branches Coverage ได้ ตั้งแต่ class , package และ ทั้งโปรแกรม
  • คำนวน McCabe? cyclomatic code complexity ตั้งแต่ class , package และ ทั้งโปรแกรม
  • สามารถ Report ออกมาเป็น ไฟล์ HTML หรือ XML
  • ใน ไฟล์ HTML report สามารถเรียงลำดับ โดยเรียงจาก class name , เปอร์เซนต์ line covered , เปอร์เซนต์ branches covered , complexity ได้
  • highlight code แต่ละ line ได้ ใน Report
  • สามารถ Instrument classes ใน mode offline(ก่อนที่ classesทั้งหมด จะถูก load ลง JVM ) และ mode on the fly ( instrument สำหรับ class ที่ถูกโหลดลง JVM ในขณะ Runtime)
  • Coverage ในระดับ Class,Method,Line,Basic Block
  • ออก Report ในรูปแบบ Plain Test,HTML,XML
  • highlight code แต่ละ line ได้ ใน Report
  • ใน Report แยกจาก Class ออกมาได้ในแต่ละ Method
  • สามารถ executed จาก ant srcipt
  • Instruments Java Byte Code หลังจาก Compiles
  • สามารถ Report ออกมาเป็น ไฟล์ HTML ,XML และ TreeMap??
  • สามารถ นำ Library อื่นๆมาร่วม(Plug-in)ในการทำ Code Coverage ได้ เช่น Emma , Cobertura * คำนวน Line , Branches Coverage ได้ ตั้งแต่ class , package และ ทั้งโปรแกรม ขึ้นอยุ่กับการเลือก Library
  • คำนวน McCabe???? cyclomatic code complexity ตั้งแต่ class , package และ ทั้งโปรแกรม โดยใช้ Complexian Library
  • เช็คการเขียน source code ตามมาตรฐานของ Sun Microsystems โดยใช้ CheckStyle?? Library
  • highlight code แต่ละ line ได้ ใน Report
- รูปแบบการใช้งาน
  • การ Test Coverage ใน Source Code จะเกิดขึ้นจาก Junit Test Case (Class ที่สร้างขึ้นเพื่อ Test)
  • ต้องเขียน Script Ant ขึ้นมาเองเพื่อกำหนดไฟล์ที่จะนำเข้ามา Test หรือ รันได้จาก Commant Line (.bat file)
  • กำหนด Test Case ใน ไฟล์ ที่เป็น JUnit Test Case
  • แบบ On the fly จะ เป็นการ Test ตอนที่ run โปรแกรมขึ้นมาแล้วใช้งานในขณะนั้น หลังจากที่ปิดโปรแกรม Emma จะ ออก Report ให้ ใน mode นี้ จะ instrument เฉพาะ class ที่ถูกใช้งานจริง
  • แบบ Offline จะ Instrument ทุกๆ Classes จะได้ meta data มา และหลังจากใช้งานโปรแกรมเสร็จจะได้ไฟล์ ที่เก็บข้อมูลหลังจาก Coverage มา แล้วจึงทำมารวมกับ meta data จะได้ Report
  • การ Test Coverage ใน Source Code จะเกิดขึ้นจาก Junit Test Case (Class ที่สร้างขึ้นเพื่อ Test)
  • กำหนด Test Case ใน ไฟล์ ที่เป็น JUnit Test Case
  • Build ผ่าน Ant Script
- ความน่าใช้งาน
  • เหมาะสำหรับ Test Method ในระดับ Unit Test เพื่อทดสอบ Input / Output
  • เหมาะสำหรับ Test ในระดับ System Test
  • เหมาะสำหรับ Test ในระดับ System Test

 

References

1. Junit Resource for Test Driven Development , http://www.junit.org
2. Code Coverage , http://en.wikipedia.org/wiki/Code_coverage
3. https://eclipsecon.greenmeetingsystems.com/attachments/download/312
4. ASM , http://asm.objectweb.org/
5. BCEL , http://jakarta.apache.org/bcel/index.html
6. Soot a Java Optimization Framework , http://www.sable.mcgill.ca/soot/


toggleopenShow attachmentstogglecloseHide attachments
Topic attachments
I Attachment Action Size Date Who Comment
jpgjpg bytecodeengineering.jpg manage 76.4 K 28 Sep 2008 - 15:47 PanitaMeananeatra  
jpgjpg bytecodeengineering2.jpg manage 47.2 K 28 Sep 2008 - 15:47 PanitaMeananeatra  
jpgjpg bytecodeengineering3.jpg manage 76.3 K 28 Sep 2008 - 15:47 PanitaMeananeatra  
Edit | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r1 | More topic actions
 
Powered by SETEC Wiki
Copyright ©2010 by National Electronics and Computer Technology Center, NECTEC.
Ideas, requests, problems regarding SETEC Wiki? Send feedback