Testing strategies - SilverSky9/DevToolNo1 GitHub Wiki
Unit testing เป็นวิธีการทดสอบการทำงานของซอฟแวร์ในแต่ละหน่วยในส่วนของ code ที่เล็กที่สุดใน application ที่สามารถทดสอบได้โดยตรวจสอบ behavior และ functionality ของ code ว่าทำงานได้อย่างถูกต้องหรือไม่ ใช้วิธีการทดสอบแบบ White Box Testing โดยถ้าเขียนซอฟแวร์ในรูปแบบเชิงวัตถุ (Object-Oriented Software) หน่วยที่ทดสอบอาจจะเป็น method function หรือ module ก็ได้ โดยทั่วไปการทำงานของหน่วยที่นำมาทดสอบจะมีการรับค่าเข้าไปเพื่อประมวลผลแล้วส่งผลลัพท์ออกมา และจะตรวจสอบกระบวนการดังกล่าวว่าเป็นไปตามที่ออกแบบไว้หรือไม่
- ควรทำเป็นลำดับแรกของการทดสอบและจะดำเนินการก่อนที่จะไปขั้นตอน Integration testing
- หาเครื่องมือ หรือ Framework สำหรับภาษาที่พัฒนา
- ไม่จำเป็นต้องสร้าง Unit testing ทุกหน่วย แต่มุ่งเน้นส่วนที่มีผลกระทบต่อระบบ
- ใช้ข้อมูลทดสอบที่มีความใกล้เคียงกับการใช้งานจริง
- ครอบคลุมทุกเส้นทางการทำงานส่วนที่เป็นเงื่อนไขและวนลูป
- ดำเนินการอย่างต่อเนื่องและสม่ำเสมอ
- ควรเขียน test จะแยกออกเป็นอิสระจากตัว code จริงๆ
- การเขียน unit tests ที่ดี แต่ละ test cases ต้องทำงานอย่างเป็นอิสระและการทำงานของแต่ละ test cases ต้องไม่ขึ้นอยู่กับลำดับในการ run ของ test cases
- การเขียน Unit Test ที่ต่อ Database
- การเขียน Unit Test ที่ต้องติดต่อกับ service อื่น
- การเขียน Unit Test ที่ต้อง start web server กรณีที่เราพัฒนาเว็บไซต์
- ประกอบ object ให้กับ class อื่นที่ไม่ใช่ class ที่กำลังเทส เช่น เราจะเทส class A แต่ class A ต้องการ class B และ class B ก็ต้องการ class C เราจึงต้องประกอบ class A, B และ C เข้าด้วยกัน
- ช่วยค้นหาและลด Bug หรือ Defect ที่จะก่อให้เกิดปัญหาลง
- เพิ่มความมั่นใจปรับหรือแก้ไขโค้ด หากทำ Unit testing ไว้ดีข้อผิดพลาดที่เกิดจากการแก้ไขโค้ดจะถูกดักจับได้ทันที
- พัฒนาซอฟแวร์ได้เร็วขึ้น ถ้าคิดในระยะยาวการทำ Unit testing จะดีกว่า
- เป็นคู่มือทำให้ทราบการทำงานของแต่ละส่วน ต้องใส่ข้อมูลอะไรเข้าไปและจะออกมาเป็นอะไร
- เพิ่มความน่าเชื่อถือและคุณภาพให้กับซอฟแวร์
- Program ทำงานได้ตรงตาม Requirement ของลูกค้ามากยิ่งขึ้น
ผู้ที่มีหน้าที่ทำ Unit test Developer / Programmer หรือ นักพัฒนา Software
- NUnit
- JMockit
- Emma
- Quilt HTTP
- HtmlUnit
- Embunit
- SimpleTest
- ABAP Unit
- Typemock -LDRA
- Microsoft unit testing Framework
- Unity Test Tools
- Cantata
- Karma
- Jasmine
- Mocha
- Parasoft
- JUnit
- TestNG
- JTest
เป็นการทดสอบการทำงานของ Module โปรแกรมทั้งหมดหรือฟังก์ชันต่างๆ ที่สัมพันธ์กันภายในระบบย่อยของโปรแกรม โดยทำการทดสอบในแต่ละ Function/Module ว่าสามารถทำงานได้หรือไม่ มีผลกระทบอะไรหรือไม่ ในส่วนนี้จะใช้วิธีการทดสอบที่หลายหลายวิธีในการทดสอบ โดยทดสอบว่าสามารถไปเชื่อมต่อกับ Network, Database, Other Service หรือ Party ได้สมบูรณ์หรือไม่
รูปแบบการ test ใกล้เคียงกับการทำงานจริงๆของระบบ ทำให้มั่นใจได้ว่า application ของเราทำงานได้อย่างถูกต้อง
ทำงานได้ช้ากว่า unit testing หลายเท่า และยังยุ่งยากในการหา errors และสุดท้ายความเปราะบางและพังง่ายและยากต่อการ maintenance อีกด้วย เมื่อส่วนไหนพัง จะไม่สามารถระบุได้แน่นอน เพราะเป็นการทดสอบที่เกี่ยวข้องกับหลายระบบ
ผู้ที่ทำคือ Tester
- VectorCAST/C++
- VectorCAST/Ada
- Citrus Integration Testing
- LDRA
- SMART INTEGRATION TEST ACCELERATOR (SITA)
- FitNesse
- Rational Integration Tester
- Protractor
- TESSY
- Validate MSG
- Steam
- Jasmine
- eZscript
- Spock for JAVA
- Pioneerjs
ในการพัฒนา Web Application ในปัจจุบันส่วนใหญ่นักพัฒนาก็มักจะนิยมนำแนวคิดของการสร้าง “Web Components” มาใช้ในการพัฒนาเป็นส่วนใหญ่ และรวมถึง Web Frameworks ต่างๆที่มีความนิยมในปัจจุบันซึ่งได้มีการนำแนวคิดนี้มาใส่อยู่ด้วยเช่นกัน เนื่องจากเราจะสามารถ reuse components ได้ ดังนั้น Components testing ก็คือการทดสอบแต่ละ Component ที่สร้างขึ้นมานั่นเอง
- jsdom
- Cypress
- Node.js testing framework
-
- jest
-
- mocha
การทดสอบในส่วนที่มีการต่อไปยัง external service หรือ Component อื่นๆ เพื่อทำการตรวจสอบ และ ทำให้มั่นใจว่า ส่วนที่เชื่อมต่อกันมันยังทำงานด้วยกันได้
- Pact
- Pacto
- Janus
- Stubby
e2e(End-to-end) Tests หรือบางทีก็รู้จักในชื่อ UI Tests เป็นวิธีในการทดสอบโปรแกรมตั้งแต่ต้นจนจบ flow เพื่อดูว่าส่วนประกอบต่างๆ ที่เชื่อมต่อกันนั้นสามารถทำงานร่วมกันได้ดีหรือไม่
สามารถทำแบบ manual ก็ได้ แต่ก็มีเครื่องมือที่สามารถช่วยทดสอบแบบอัตโนมัติ
- Selenium
- PhantomJS
- Protractor
- Cypress
- Avo Assure
- testRigor
Enduser หรือ Developers, Testers
- ตรวจสอบความถูกต้องของการทำงาน
- ลดต้นทุน
- ลดการเกิดบัค
- ตรวจสอบการทำงานของ Flow
- Test planning : ระบุงานหลัก กำหนดการที่เกี่ยวข้อง และ resources
- Test design : Test specifications, การสร้าง Test cases, การวิเคราะห์ความเสี่ยง, วิเคราะห์การใช้งาน, การกำหนดเวลา
- Test execution : ทำการทดสอบด้วย Test cases และบันทึกผลการทดสอบลงเอกสาร
- Results analysis : วิเคราะห์ผลการทดสอบ, ประเมินการทดสอบ และดำเนินการทดสอบเพิ่มเติมหากจำเป็น