Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

มาแบ่งกลุ่มของการทดสอบด้วย Five Ws กันหน่อย

$
0
0

RiskReduced-760x507

RiskReduced-760x507 ในการทดสอบ Software นั้น มีวิธีการและแนวทางที่เยอะมาก ดังนั้น เรามาลองแบ่งกลุ่มของการทดสอบ ตามแนวทางของ Five Ws กันหน่อย ประกอบไปด้วย
  1. Who ? ทดสอบเพื่อใคร
  2. What ? ทดสอบอะไร
  3. Where ? ทดสอบที่ไหน
  4. When ? ทดสอบเมื่อใด
  5. Why ? ทดสอบไปทำไม
  6. How ? ทดสอบอย่างไร
มาดูในรายละเอียดกันดีกว่า ซึ่งน่าจะทำให้เห็นว่า เราทำการทดสอบไปทำไม เพื่ออะไร ซึ่งมันช่วยลดความเสี่ยงต่าง ๆ ลงไปได้เยอะ

1. Who ? Programmer vs. Customer

เราทำการทดสอบเพื่อทำให้มั่นใจว่า software ทำงานได้ตามที่คาดหวังนะ ทั้งในมุมมองของ Programmer และ Customer (ลูกค้า) ซึ่งแต่ละฝั่งต่างมีชุดการทดสอบ เพื่อสร้างความเชื่อมั่นให้ตนเอง ว่าได้ software ตามที่คาดหวังนะ

2. What ? Functionality vs. Performance vs. Security

ต้องบอกให้ได้ว่า เรากำลังทดสอบอะไรกัน ซึ่งโดยทั่วไปถ้าเราไม่ได้กำหนดแบบเฉพาะเจาะจง ก็มักจะบอกว่า เราทำการทดสอบ feature ต่าง ๆ นั่นเอง หรืออาจจะเรียกว่า Functional requirement แต่สิ่งที่มักจะลืมไปก็คือ Non-functional requirment เช่น Performance และ Security เป็นต้น

3. When ? ทำการทดสอบ หรือ สร้างการทดสอบเมื่อใด ?

ทำก่อน หรือ หลังจากการเขียน code ? ถ้าเราทำการสร้างและทดสอบหลังจากที่เขียน code เสร็จ จะเรียกว่า Test Last ถ้าเราทำการสร้างและระบุการทดสอบก่อนที่จะเขียน code จะเรียกว่า Test First จากทั้งสองแบบนั้น จะพบว่า Test First มันแปลก ๆ ดูไม่เป็นธรรมชาติเลย เนื่องจากจะทดสอบได้ยังไง ถ้าไม่เขียน code ให้เสร็จก่อน !! แต่มันกลับมีข้อดีต่าง ๆ ดังนี้
  • ทำให้มั่นใจได้ว่า code ที่เขียนมันทดสอบได้
  • ป้องกันไม่ให้เกิดความผิดพลาดจาก code ที่เขียนขึ้นมา ซึ่งมันเป็นวิธีที่ดีกว่า การมานั่งจุดผิดพลาดและแก้ไข
  • ทำให้สามารถออกแบบโครงสร้างของ code ได้ พร้อมลงมือสร้างมันขึ้นมาตามที่เราคิด

4. Where ? Unit test vs. Integration test vs. System test

การทดสอบนั้นมีหลายระดับเช่น Unit, Integration และ System เป็นต้น
  • Unit test คือการทดสอบส่วนทำงานหน่อยเล็ก ๆ เช่น class และ method
  • Integration test คือการทดสอบการทำงานระหว่างหน่วยการทำงานเล็ก ๆ ว่ามันเป็นอย่างไร
  • System test คือการทดสอบในภาพรวมของระบบ
คำถามคือ จะทดสอบในระดับไหนดีบ้าง ? จงตอบมาหน่อยสิ !!
ซึ่งจำนวนการทดสอบควรเป็นไปตาม Test Pyramid นะ ยิ่งเป็นการทดสอบในภาพใหญ่ หรือ ภาพรวมของระบบ จำนวนการทดสอบยิ่งต้องลดน้อยลงไป

5. Why ? Verification vs. Specification vs. Design

ทำการทดสอบไปทำไม ? ในแต่ละการทดสอบควรมีเหตุผลที่เหมาะสม ว่าจะทดสอบไปทำไม ? เพื่ออะไร ? เช่น
  • ตรวจสอบการทำงานของ code ของระบบว่า ทำงานได้ตรงตามความคาดหวังนะ
  • ตรวจสอบว่าทำงานตาม specification นะ
  • ตรวจสอบว่า code ของระบบทำงานตามที่ได้ออกแบบไว้นะ
คำถามที่น่าสนใจ คือ เราจะทำอย่างไร ? เพื่อให้เรารู้ได้อย่างรวดเร็ว ว่าแต่ละ feature ทำงานได้ถูกต้อง ว่าแต่ละ feature ทำงานได้ตรงตาม spec ว่าแต่ละ feature มีการทำงานตามการออกแบบ

6. How ? Automated test vs. Manual test

จะทำการทดสอบอย่างไรดีล่ะ ? ทดสอบแบบ manual หรือ แบบอัตโนมัติดี ? หรือทำการทดสอบด้วยคน หรือ เครื่องคอมพิวเตอร์ดี ? โดย Manual testing นั้นจะมีประโยชน์อย่างมาก ถ้าทำการทดสอบในรูปแบบ Exploratory testing แต่ถ้าระบบงานที่คุณดูแลนั้น ต้องทำการ deploy/release feature ใหม่ ๆ อยู่อย่างสม่ำเสมอ นั่นหมายความว่า คุณต้องทำการทดสอบซ้ำแล้วซ้ำอีกในทุก ๆ feature หรือเรียกว่าต้องทำ regression testing อยู่เสมอ ถ้าทำการทดสอบแบบ manual คงไม่น่าจะไหว ดังนั้นมาทำการทดสอบแบบอัตโนมัติน่าจะเหมาะสมกว่านะ หรือถ้าทนได้ก็ทำไป !!

มาดูตัวอย่างการนำ Five Ws มาคิด วิเคราะห์ แยกแยะ

ปล. ให้ลองเขียนด้วยตอนเองก่อน แล้วเอามาเทียบกันนะครับ TDD (Test-Driven Development)
  • Who ? => เพื่อ Programmer
  • What ? => Functionality
  • Where ? => Unit และ Integration test
  • When ? => ก่อนที่จะเขียน code
  • Why ? => ทำการออกแบบ และ กำหนดการทดสอบของสิ่งที่จะพัฒนา
  • How ? => Automated test
BDD (Behaviour-Driven Development)
  • Who ? => เพื่อ Customer
  • What ? => Functionality
  • Where ? => System test
  • When ? => ก่อนที่จะเขียน code
  • Why ? => ทำการออกแบบ และ กำหนดการทดสอบของสิ่งที่จะพัฒนา
  • How ? => Automated test
Exploratory test
  • Who ? => เพื่อ Customer
  • What ? => Functionality
  • Where ? => Unit และ Integration test
  • When ? => หลังจากที่เขียน code เสร็จแล้ว
  • Why ? => เพื่อทำการตรวจสอบความถูกต้องของระบบ
  • How ? => Manual test
Security test
  • Who ? => เพื่อ Customer
  • What ? => Security
  • Where ? => System test
  • When ? => หลังจากที่เขียน code เสร็จแล้ว
  • Why ? => เพื่อทำการตรวจสอบความถูกต้องของระบบ
  • How ? => Automated test

โดยทั้ง 6 ข้อนี้ น่าจะพอทำให้เราเห็นว่า

ทำการทดสอบในมุมมองของใครบ้าง ? ทำการทดสอบอะไรบ้าง ? เมื่อใดควรทำการทดสอบ ? ทำการทดสอบส่วนไหนบ้าง ? ทำการทดสอบไปทำไม ? และทำการทดสอบอย่างไร ? ซึ่งถ้าคุณสามารถตอบคำถามเหล่านี้ได้ น่าจะช่วยลดความเสี่ยงต่าง ๆ ลงไปได้ หรือทำให้เห็นว่า คุณมีความเสี่ยงอะไรบ้าง เพื่อจะได้ทำการแก้ไขต่อไปนั่นเอง Reference Website http://securesoftwaredev.com/2012/09/03/a-classification-of-tests/ http://martinfowler.com/bliki/TestPyramid.html

Viewing all articles
Browse latest Browse all 1997

Trending Articles