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

การทดสอบในมุมของ Developer คนหนึ่ง (Developer Testing)

$
0
0

การทดสอบช่วยทำให้เห็นว่า สิ่งที่สร้างตามความต้องการมันเป็นอย่างไร ทำการอธิบายว่า การสร้างในแต่ละส่วนเป็นอย่างไร ทำงานอย่างไร โดยที่การทดสอบมีทั้ง Manual และ Automation เรื่องของ Automation test นั้นเป็นรูปแบบหนึ่งของ Risk management ซึ่งช่วยลดความเสี่ยงต่าง ๆ ของระบบงานลงไป แน่นอนว่า ต้องทำงานแบบอัตโนมัติ แต่สิ่งหนึ่งที่มักไม่พูดถึงกันคือ การสร้างชุดการทดสอบนั่นเอง ซึ่งมันไม่ง่ายเลย มีค่าใช้จ่ายสูงทั้งในแง่ของจำนวนคนและเวลาที่ใช้ ส่วน Manual testing มักจะทำในช่วยท้าย ๆ ของขั้นตอนการพัฒนา ซึ่งต้องการคนทดสอบจำนวนมาก ตามขนาดของระบบ อีกทั้งการทดสอบแต่ละครั้งต้องใช้เวลาและค่าใช้จ่ายสูง
จะเห็นได้ว่าการทดสอบทั้งสองแบบมีทั้งข้อดีและข้อเสีย ชีวิตมันยากจริง ๆ ต้องคิดเยอะหน่อยนะ คิดเยอะไปก็ไม่ดี ลงมือทำด้วยนะ

สิ่งที่สำคัญในการทดสอบคือ จะทดสอบ และ verify อะไร ?

ในมุมของ developer มันยากมาก ๆ แค่จะทำให้เสร็จยังลำบาก ถ้าต้องมาทดสอบ และ เขียนชุดการทดสอบด้วยแล้ว บอกเลยว่า ยากมาก ๆ ขอเวลาเพิ่มเยอะ ๆ เลยได้ไหม ? เรามาดูกันหน่อยว่าจะทดสอบอะไรกันบ้าง ?
  • ส่วนงานย่อย ๆ ทำงานได้อย่างถูกต้องหรือไม่ ?
  • ส่วนงานย่อยต่าง ๆ ทำงานร่วมกันได้อย่างถูกต้องหรือไม่ ?
  • ทั้งระบบทำงานเป็นอย่างดีหรือไม่ ?
  • ถ้าเป็นระบบเก่า การแก้ไขต่าง ๆ ยังคงทำให้ระบบทำงานและใช้งานได้เป็นปกติหรือไม่ ?
  • การทดสอบมันครอบคลุมทั้งระบบหรือไม่ ?
  • คุณภาพของชุดการทดสอบเป็นอย่างไร มากหรือน้อย ?
  • ระบบงานที่สร้างขึ้นมา มันแก้ไขปัญหาของลูกค้าหรือไม่ ?
มีอะไรอีกละ เอาแค่นี้ก่อน การทดสอบมันมีทั้งมุมเชิงปริมาณและเชิงคุณภาพ ซึ่งใช้ในการวัดผล และ ควบคุมคุณภาพของการทดสอบ เป็นอีกสิ่งหนึ่งที่สำคัญ ใช้ในการวิเคราะห์และปรับปรุงต่อไป

มาดูในเรื่องการพัฒนาบ้าง

มีคำพูดที่น่าสนใจคือ Build the Right system in the Right way
สร้างระบบที่แก้ไขปัญหาจริง ๆ ให้ผู้ใช้งาน เป็นสิ่งที่ยากแล้ว การสร้างระบบด้วยวิธีการที่ถูกต้องเป็นเรื่องที่ยากไม่แพ้กัน ดังนั้นทั้งคน กระบวนการ และเครื่องมือต้องสัมพันธ์กัน นั่นคือ คนต้องมีความสามารถ คนคิดกระบวนการทำงานที่เหมาะขึ้นมา ซึ่งปรับเปลี่ยนได้เสมอ จากนั้นจึงนำเครื่องมือที่เหมาะสมมาใช้งาน การทดสอบก็เช่นกัน ต้องเริ่มจากการทดสอบในมุมมองของผู้ใช้งาน จากนั้นค่อย ๆ ลงมาในรายละเอียดของการพัฒนา เมื่อทุกอย่างลงตัวจึงช่วยกันกำหนดขั้นตอนการทำงาน การทดสอบต้องทำให้บ่อยที่สุดเท่าที่จะทำได้ เช่น ทดสอบทุกครั้งเมื่อ code มีการเปลี่ยนแปลง แน่นอนว่า ถ้าจะทำได้ต้องมีเครื่องมือที่เหมาะสม รวมทั้งคนต้องมีความสามารถด้วยเช่นกัน
โดยรวมแล้ว เราต้องเริ่มด้วย What คือ จะทำอะไร ทดสอบอะไรบ้าง มีประโยชน์ หรือ คุณค่าอะไร จากนั้นจึงเริ่ม How คือ วิธีการและเครื่องมือในการพัฒนาและทดสอบ

คำถามที่ถูกถามบ่อยมาก ๆ คือ ต้องทดสอบมากน้อยเพียงใด ?

สิ่งที่ต้องถามกลับคือ ถ้ามีชุดการทดสอบแบบอัตโนมัติแล้ว ยังไม่มั่นใจอะไรบ้าง ? ถ้าตอบได้ ก็แก้ไขง่าย ๆ คือ ทำให้มั่นใจด้วยการเขียน test case เพื่อไงละ ทำไปเรื่อย ๆ จนกว่าจะมั่นใจ อีกเรื่องคือ ถ้ามี automation test แล้ว manual test ก็ยังต้องทำนะ จำนวน test มันต้องลดลง รวมทั้งเวลาต้องน้อยลงอีกด้วย แต่คุณภาพต้องสูงขึ้น ในการทำงาน จำนวน test อาจจะไม่ได้บอกว่า การทดสอบมีคุณภาพเลย ถ้าจำนวน bug หรือ ข้อผิดพลาดยังเยอะ ถ้าเกิดข้อผิดพลาดขึ้น กลับหาสาเหตุยากและนานมาก ๆ การทดสอบทั้ง automation test และ manual test ล้วนมีค่าใช้จ่ายเสมอ ยกตัวอย่างเช่น Automation test มันก็คือ code อีกชุดหนึ่ง ดังนั้นต้องเขียนขึ้นมา ก็ต้องมีค่าใช้จ่าย ไหนจะต้องดูแลอีก ก็ต้องมีค่าใช้จ่าย ถ้ามีชุดการทดสอบแล้ว แต่ไม่ดูแลให้ดี ค่าใช้จ่ายในการทดสอบก็สูงอีก ดังนั้นถ้ามีชุดการทดสอบแล้ว ต้องดูแลให้ดี ถ้าไม่ดีก็ต้องปรับปรุงให้ดี เช่นเดียวกับ code ของระบบงาน

ยังไม่พอนะ ถ้าไปทำงานกับระบบงานเก่า ๆ ที่ไม่มี Automation test ละ ?

จะทำกันอย่างไร แน่นอนว่าระบบเก่า ๆ ที่ไม่มีชุดการทดสอบแบบอัตโนมัติ ในหนังสือ Working Effectively with Legacy code จะเรียกว่า Legacy code หรืออาจจะมีก็มี code/test coverage ที่น้อยมาก ๆ ดังนั้นสิ่งที่ต้องทำก่อนคือ การทำความเข้าใจกับระบบ ในมุมของนักพัฒนาคือ ทำการ run และ ทดสอบส่วนการทำงานต่าง ๆ ด้วยการเขียน test ในส่วนการทำงานนั้น ๆ เพื่อเรียนรู้และเข้าใจมันมากขึ้น เพื่อทำให้มีความมั่นใจ ก่อนจะทำงานและแก้ไขต่อไป เช่น การ refactor หรือ แยกส่วนการทำงานออกมา เรียกการทดสอบลักษณะนี้ว่า Explorative testing อีกทั้งยังมีวิธีการอื่น ๆ อีก เช่น Snapshot testing หรือ Approval testing ช่วยให้เราเก็บสถานะต่าง ๆ ของการทำงานไว้ เพื่อนำกลับมาทดสอบซ้ำ

ถามว่าการทดสอบมันมีเยอะไหม ตอบเลยว่ามาก ดังรูป

จะเยอะไปไหน !! ไม่อธิบายดีกว่า

อธิบายมายาว ตัดจบดีกว่า

การทดสอบนั้นเป็นเรื่องที่มีความซับซ้อน ซึ่งยากต่อการทำความเข้าใจ แต่เป็นความรู้พื้นฐานมาก ๆ ที่ต้องมี อีกทั้งการทดสอบนั้น มันไม่ได้ช่วยให้เราพัฒนาระบบงานได้เร็วขึ้น แต่มันช่วยทำให้การพัฒนาระบบยั่งยืน นั่นคือ ช่วยให้ทีมเดินไปข้างหน้าได้อย่างราบรื่น มีปัญหาก็แก้ไขได้อย่างรวดเร็ว ซึ่งถ้าทำได้ ก็จะทำให้ทีมเร็วขึ้นแบบอัตโนมัติ คุณค่าของการทดสอบจะสูงมาก ๆ เมื่อมีหลายคนทำงานร่วมกัน หรือมีหลาย ๆ ระบบทำงานด้วยกัน
วันนี้เขียน test เถอะครับ ถ้าไม่มั่นใจอะไร ก็เขียน test เถอะครับ เพื่อทำให้มีความมั่นใจขึ้น มาลงมือทำกัน ให้มากกว่าพูด
สวัสดี

Viewing all articles
Browse latest Browse all 1997

Trending Articles