วันนี้มีโอกาสนั่งฟังการสนทนาเกี่ยวกับการทำงานระหว่าง Programmer กับ Tester
ถ้าจะให้มาทำงานร่วมกัน มันน่าจะดีนะ … แล้วอย่างไรดีล่ะ
ซึ่งทำให้นึกถึงเรื่อง ภูเขาน้ำแข็งในโลกของการทดสอบขึ้นมา ( IceBerg in Testing )
ที่ใช้อธิบายมุมมองของทาง Programmer และ Tester
รวมทั้งมีแนวคิดใหม่ๆ สำหรับการทำงานร่วมกัน
ดังนั้น เรามาดูกันว่ามันมีเรื่องราวอย่างไร
มุมมองเกี่ยวกับภูเขาน้ำแข็ง ของ Tester เป็นอย่างไร
Tester โดยมากจะเป็นเหมือน คนขึ้นเรือเพื่อไปชมความสวยงามต่างๆ ของภูเขาน้ำแข็ง
จะรู้ว่าผิวของน้ำแข็งที่โผล่พ้นน้ำขึ้นมาว่าเป็นอย่างไร รูปทรงเป็นอย่างไร
เหมือนกับการทดสอบระบบผ่าน User Interface, Acceptance Test และ Manual testing
ถามว่ารู้อะไรมากว่าลักษณะภายนอกของภูเขาน้ำแข็งไหม ตอบว่ารู้นะ
แต่ว่าไม่รู้รายละเอียดการทำงานจริงๆ ว่าเป็นอย่างไร
รวมทั้งมันไม่ได้น่าสนใจมากสักเท่าไร
มุมมองเกี่ยวกับภูเขาน้ำแข็ง ของ Programmer เป็นอย่างไร
จะตรงข้ามกับ Tester พอควร กล่าวคือ
Programmer จะเป็นเหมือน ปลาที่ว่ายน้ำอยู่ในทะเล
จะรู้ว่าต้องระวังอะไรบ้าง ที่อยู่ใต้ภูเขาน้ำแข็ง
แต่ไม่ได้รู้เรื่องอะไรมากนัก เกี่ยวกับ ผิวน้ำแข็ง ว่าเป็นอย่างไร
โดย programmer จะให้ความสำคัญกับ การเขียน code การเขียน unit test
และไม่ค่อยสนใจส่วนอื่นๆ ที่สูงขึ้นมามากนัก
จากเรื่องนี้ ทำให้เกิดแนวคิดใหม่ขึ้นมา
ถ้าให้ Programmer และ Tester ทำงานด้วยกันล่ะ มันน่าจะดีไม่น้อยเลยนะ …
เพราะว่าต่างฝ่ายก็ยังขาดความรู้ความสามารถอยู่
ซึ่งสามารถมาเติมเต็มกันได้
ผมไม่ได้บอกว่า Tester จะต้องมาเขียน code ได้เหมือน Programmer นะ
แต่ Tester ควรที่จะสามารถอ่าน code ได้
และสามารถพูดคุย code เหล่านั้นกับทาง Programmer ได้
ซึ่งเปรียบเทียบได้กับ เราทุกๆ คนสามารถอ่านหนังสือการ์ตูนได้
แต่ไม่สามารถวาดหรือเขียนหนังสือการ์ตูนขึ้นมาได้นั่นเอง
โดยที่ความสามารถเหล่านี้ สามารถเรียนรู้และเพิ่มเติมกันได้
เช่น ถ้าต้องการเขียนการ์ตูน ก็สามารถเริ่มเรียนรู้การวาดการ์ตูน
การออกแบบตัวละคร วางโครงเรื่องต่างๆ เป็นต้นได้
เพื่อทำให้เข้าใจโครงสร้างของการสร้างหนังสือการ์ตูนได้ดียิ่งขึ้น
การเรียนรู้ของ Programmer และ Tester เพื่อให้สามารถทำงานด้วยกันก็เช่นเดียวกัน
แนวคิดและวิธีการที่ขอแนะนำ
1. การเก็บข้อมูลต่างๆ
ถ้าเป็น Tester แล้วต้องเป็นแหล่งรวบรวมข้อมูลจากแหล่งข้อมูลต่างๆ
และเป็นผู้ให้ข้อมูลข่าวสารอีกด้วย
เนื่องจากจำเป็นต้องเรียนรู้ความสามารถต่างๆ ของ product
เพื่อทำการทดสอบระบบว่าตรงตามที่ลูกค้าต้องการหรือไม่
2. การพูดคุย
การพูดคุยที่ดีที่สุด คือ การพูดคุยแบบเห็นหน้าเห็นตากัน
ไม่ใช่คุยผ่าน email, chat ต่างๆ
3. เข้ามาทดสอบตั้งแต่เนิ่นๆ
Tester สามารถเข้ามามีส่วนร่วม เพื่อช่วยเหลือในการตัดสินใจ ว่า
จะทำการสร้าง product นี้อย่างไร
Tester สามารถเข้ามาช่วยและคิดว่า จะสร้าง product ที่สามารถทดสอบได้อย่างไร
หรือสามารถบอกเพิ่มเติมได้ว่า จะต้องทดสอบอย่างไร
ซึ่งมันส่งผลต่อสถาปัตยกรรมของ product ที่จะถูกสร้างขึ้นมาอีกด้วย
4.เรื่องคุณภาพไม่สามารถต่อรองได้ ต้องมาพร้อมเสมอ
การทดสอบต้องเข้ามาบทบาทตั้งแต่เริ่ม ขณะพัฒนา จนไปถึงสิ้นสุดการพัฒนา
ไม่ใช่มาทดสอบ เมื่อพัฒนาเสร็จเสร็จแล้ว !!!
5. สร้างความสัมพันธ์ที่ดีระหว่างกัน
เนื่องจากทุกๆ คนชอบโชว์ หรือ เล่า หรือ พูด ในสิ่งที่สนใจ
ดังนั้นในการทำงาน เราก็น่าจะโชว์ หรือ เล่า หรือ พูด
ในงานที่ทำให้คนอื่นฟังและเข้าใจด้วย ใช่ไหม !!!
โดยผมพบว่า สิ่งที่ทำแล้วเกิดประโยชน์สำหรับ Programmer และ Tester ก็คือ
การทำ Pair programming โดยทาง Tester อาจจะเข้าไป pair กับ Programmer
แล้วสามารถเริ่มต้นด้วยการคุยและบอกกับทาง Programmer ให้ทำการ demo งานที่ทำให้ดู
และแสดงหรืออธิบายขั้นตอนการทำงานของระบบงานให้ฟัง
เพื่อทำให้เกิดความเข้าใจทั้งสองฝ่าย นั่นคือ
- Tester เริ่มเข้าใจว่า code ที่พัฒนาขึ้นมามันทำงานอย่างไร
- Programmer เริ่มเข้าใจว่าสิ่งที่ตัวเองพัฒนาขึ้นมา มันเป็นอย่างไร ทดสอบง่ายหรือยากไหม
- ได้เห็นมุมมองจากทั้งสองฝ่าย และจะได้เห็นข้อผิดพลาดทต่างๆ ได้รวดเร็วขึ้น
ทั้ง Tester และ Programmer ( ทีมพัฒนา ) จะต้องเปลี่ยนแนวคิด เพื่อให้สามารถทำงานร่วมกันเป็นทีม
ในช่วงเริ่มต้น มันจะยากและลำบากมากๆ
ที่จะทำให้ทั้ง Tester และ Programmer เชื่อใจซึ่งกันและกัน หรือมีความเคารพต่อกัน
หมายถึงการเคารพในวิธีการคิด ไม่ใช่วัยวุฒิ
ตัวอย่างเช่น
Tester จะต้องพิสูจน์ตัวเองให้ได้ว่า มีคุณค่าต่อทีมอย่างไร
Programmer จะต้องพิสูจน์ตัวเองให้ได้ว่า มีคุณค่าต่อทีมอย่างไร
การทำงานร่วมกันเป็นทีม เรื่อง ความไว้ใจ เป็นสิ่งที่สำคัญมากๆ
ถ้าไม่ไว้ใจกัน ก็ไม่มีทางที่จะพูดหรือเปิดเผยสิ่งต่างๆ ออกมา
ดังนั้น จะต้องสร้างความไว้ใจซึ่งกันและกันขึ้นมาให้ได้ เป็นอันดับต้นๆ เลย
จากประสบการณ์ ที่เข้าไป pair กับ Programmer
จะพบ Programmer อยู่ 2 กลุ่มคือ
กลุ่มที่ 1 Programmer ที่ชอบโชว์และอธิบาย code และ test
รวมทั้งขั้นตอนการทำงานต่างๆ ในแต่ละขั้นตอน
กลุ่มที่ 2 เมื่อทำการเปิด code ขึ้นมา แล้วอุทานขึ้นมาว่า นี่มัน code… อะไรเนี่ย
และก็มีบางส่วนที่ต่อต้านไปเลย เช่นจะมาดู code ทำไม จะมาดู test ทำไม เสียเวลา เป็นต้น
จุดสำคัญ
ทาง Tester สามารถเข้ามาช่วยอธิบายให้ Programmer เข้าใจว่า
ทำไมการทดสอบจึงมีความสำคัญในกระบวนการพัฒนา
ทั้ง unit test, integration test และ system test …
ต่อจากนั้น ทีม จะเริ่มหาเส้นทางของตัวเอง เพื่อทำงานร่วมกัน
เนื่องจากการพัฒนา software หรือสร้าง product มันคือ การเรียนรู้ที่ไม่มีวันจบสิ้น …