Comments on: Define Test http://llun.in.th/2011/09/define-test/ /īm/ /ə/ /prōgræmər/ Sun, 26 Feb 2012 02:23:00 +0000 hourly 1 http://wordpress.org/?v=3.3.1 By: Backup My Bookmark Table | MzSoft http://llun.in.th/2011/09/define-test/#comment-670 Backup My Bookmark Table | MzSoft Mon, 05 Dec 2011 08:49:47 +0000 http://llun.in.th/?p=2355#comment-670 [...] http://llun.in.th/2011/09/define-test/ [...] [...] http://llun.in.th/2011/09/define-test/ [...]

]]>
By: hybridknight http://llun.in.th/2011/09/define-test/#comment-656 hybridknight Sun, 25 Sep 2011 12:50:00 +0000 http://llun.in.th/?p=2355#comment-656 //man ... เข้ามาดู //man … เข้ามาดู

]]>
By: sourcode http://llun.in.th/2011/09/define-test/#comment-655 sourcode Sun, 25 Sep 2011 08:53:00 +0000 http://llun.in.th/?p=2355#comment-655 *เดินผ่าน* *เดินผ่าน*

]]>
By: llun http://llun.in.th/2011/09/define-test/#comment-654 llun Sun, 25 Sep 2011 08:44:00 +0000 http://llun.in.th/?p=2355#comment-654 ฮ่า จะบอกว่าสรุปสั้นไปก็ได้แหละ แต่เอามาจากในบล๊อกนั้นเลยนะ :P แต่มันต้องเริ่มมาจาก 1. Requirement ที่ได้มามี Behavior อย่างไรบ้าง แล้วก็ตีออกมาดูว่ามี Module/Class อะไรบ้างที่ต้องใช้ โดยแต่ละ Module/Class มีหน้าที่อะไร (ไม่ควรจะซ้ำกันเลย และชัดเจน) 2. เมื่อได้หน้าที่ของ Module/Class แต่ละชั้นที่ชัดเจนแล้วถึงมาเขียน Test ครอบแต่ละชั้นเนื่องเพื่อให้ยังคงความชัดเจนของมันอยู่ คราวนี้ตอบคำถามแรกคือความละเอียดของ Test ว่ามันควรจะทำละเอียดแค่ไหน อันนี้ถึงจะเคยบอกว่าแล้วแต่ แต่จริงๆ อยากให้ทำระดับ Class เพราะว่า 1. จะได้ความชัดเจนในหน้าที่ของ Class นั้นว่ามันทำอะไร 2. เพื่อทำให้รู้ว่าเราทำอะไรซ้ำกับชั้นอื่นๆ หรือ Class อื่นหรือป่าว จริงๆ จะเปลี่ยนจาก Class เป็น Module หรือ Component ก็ได้แต่สิ่งที่จะเสียไปคือความชัดเจนภายในไป ส่วนเรื่องให้คนอื่นเขียน Test ก็อย่างที่เขียนไว้ด้านบนคือ คนที่จะบอกได้ว่าตรงหรือไม่ตรงตาม Requirement มีสองคนคือ 1 คนที่ให้ Requirement กับ 2 คนที่แปลง Requirement นั้นออกมาเป็นขั้นตอนการทำงาน คราวนี้ในขั้นตอนการทำงานมันมีส่วนย่อยๆ ที่เป็นข้อจำกัดอีก ซึ่งคนทำจะเป็นคนรู้และต้องเอาไปต่อลองว่าทำไม่ได้ และจะกลายเป็นคนให้ Requirement เองด้วย เพราะงั้น คนทำนั่นแหละ เลยต้องเป็นคนเขียน Test กำหนดสิ่งที่ทำไม่ได้และบอกให้คนออก Requirement คนแรกรับรู้ด้วย ฮ่า จะบอกว่าสรุปสั้นไปก็ได้แหละ แต่เอามาจากในบล๊อกนั้นเลยนะ :P

แต่มันต้องเริ่มมาจาก

1. Requirement ที่ได้มามี Behavior อย่างไรบ้าง แล้วก็ตีออกมาดูว่ามี Module/Class อะไรบ้างที่ต้องใช้ โดยแต่ละ Module/Class มีหน้าที่อะไร (ไม่ควรจะซ้ำกันเลย และชัดเจน)
2. เมื่อได้หน้าที่ของ Module/Class แต่ละชั้นที่ชัดเจนแล้วถึงมาเขียน Test ครอบแต่ละชั้นเนื่องเพื่อให้ยังคงความชัดเจนของมันอยู่

คราวนี้ตอบคำถามแรกคือความละเอียดของ Test ว่ามันควรจะทำละเอียดแค่ไหน อันนี้ถึงจะเคยบอกว่าแล้วแต่ แต่จริงๆ อยากให้ทำระดับ Class เพราะว่า

1. จะได้ความชัดเจนในหน้าที่ของ Class นั้นว่ามันทำอะไร
2. เพื่อทำให้รู้ว่าเราทำอะไรซ้ำกับชั้นอื่นๆ หรือ Class อื่นหรือป่าว

จริงๆ จะเปลี่ยนจาก Class เป็น Module หรือ Component ก็ได้แต่สิ่งที่จะเสียไปคือความชัดเจนภายในไป

ส่วนเรื่องให้คนอื่นเขียน Test ก็อย่างที่เขียนไว้ด้านบนคือ คนที่จะบอกได้ว่าตรงหรือไม่ตรงตาม Requirement มีสองคนคือ 1 คนที่ให้ Requirement กับ 2 คนที่แปลง Requirement นั้นออกมาเป็นขั้นตอนการทำงาน คราวนี้ในขั้นตอนการทำงานมันมีส่วนย่อยๆ ที่เป็นข้อจำกัดอีก ซึ่งคนทำจะเป็นคนรู้และต้องเอาไปต่อลองว่าทำไม่ได้ และจะกลายเป็นคนให้ Requirement เองด้วย เพราะงั้น คนทำนั่นแหละ เลยต้องเป็นคนเขียน Test กำหนดสิ่งที่ทำไม่ได้และบอกให้คนออก Requirement คนแรกรับรู้ด้วย

]]>
By: teerapapc http://llun.in.th/2011/09/define-test/#comment-653 teerapapc Sun, 25 Sep 2011 08:27:00 +0000 http://llun.in.th/?p=2355#comment-653 โอย มัน ตัด newline ทิ้ง หมดเลย  อ่านยากหน่อยนะครับ :P โอย มัน ตัด newline ทิ้ง หมดเลย  อ่านยากหน่อยนะครับ :P

]]>
By: teerapapc http://llun.in.th/2011/09/define-test/#comment-652 teerapapc Sun, 25 Sep 2011 08:25:00 +0000 http://llun.in.th/?p=2355#comment-652 พี่สรุปสั้นไปหน่อยปะครับ หะหะ ว่า ผมอยากให้คนอื่นเขียนแทน จริงๆอันนั้นเป็นข้อสรุปของ ข้อ 3 ย่อยของผมเท่านั้นเองแต่ที่พี่เขียนมา เรื่องการกำหนด input / output มันก็ไม่ได้ตอบปัญหาทั้ง 3 ข้อที่ผมเขียนเท่าไหร่อยู่ดี ผมรู้ว่า module นี้ ควรจะมี input /output อะไร แต่ผมขี้เกียจจะเขียนโค้ด simulate มัน (นี่คือข้อ 3)จากข้อ 2 ของผม พบว่าส่วนใหญ่มันพังตอน integration test เพราะฉะนั้น จะเขียน test โค้ด ละเอียดยิบย่อยระดับทุกๆ class เลย ไปทำไม เขียน test คลุมเป็นกลุ่มๆ ก็น่าจะพอ ดู input / output ระดับนอกสุด ก็พอการกำหนด input / output ของทุกคลาส แล้วมาเขียน test แยกกันหมด มันเหนื่อย และเยอะเกินไป ทั้งๆที่ เวลาโค้ดทำงานจริงๆ มันต้องทำงานร่วมกับ class อื่นอยู่ดี แล้วถึงพี่เขียนละเอียดไป พี่ก็ต้องเขียน integration test อีกอยุ่ดี  การเขียนละเอียดทำให้หาสาเหตุ class ตัวปัญหาเร็วขึ้นเท่านั้น อย่างที่เขียนไว้ใน blog ผม มันเป็นเรื่อง การ define ว่า unit ของโปรแกรมเรา เล็กแค่ไหนน่ะครับแล้วผมก็กลับคิดว่า คนอื่น เขียน test ให้อาจจะดีกว่าด้วย เพราะเป็นการ recheck requirement ไปด้วยกันด้วย เพราะถ้าผมเขียน test เอง ก็จะเขียนตาม requirement ที่ผมเข้าใจ ซึ่งอาจจะไม่ถูกก็ได้ แต่ test ผ่าน แต่คนอื่นเขียน เค้าก็เขียนตาม requirement ที่เค้าเข้าใจ ผมก็เขียนโค้ดตาม requirement ที่ผมเข้าใจ  เอ่าไม่ผ่าน ก็เจอว่า เข้าใจอะไรไม่ตรงกัน พี่สรุปสั้นไปหน่อยปะครับ หะหะ ว่า ผมอยากให้คนอื่นเขียนแทน จริงๆอันนั้นเป็นข้อสรุปของ ข้อ 3 ย่อยของผมเท่านั้นเองแต่ที่พี่เขียนมา เรื่องการกำหนด input / output มันก็ไม่ได้ตอบปัญหาทั้ง 3 ข้อที่ผมเขียนเท่าไหร่อยู่ดี ผมรู้ว่า module นี้ ควรจะมี input /output อะไร แต่ผมขี้เกียจจะเขียนโค้ด simulate มัน (นี่คือข้อ 3)จากข้อ 2 ของผม พบว่าส่วนใหญ่มันพังตอน integration test เพราะฉะนั้น จะเขียน test โค้ด ละเอียดยิบย่อยระดับทุกๆ class เลย ไปทำไม เขียน test คลุมเป็นกลุ่มๆ ก็น่าจะพอ ดู input / output ระดับนอกสุด ก็พอการกำหนด input / output ของทุกคลาส แล้วมาเขียน test แยกกันหมด มันเหนื่อย และเยอะเกินไป ทั้งๆที่ เวลาโค้ดทำงานจริงๆ มันต้องทำงานร่วมกับ class อื่นอยู่ดี แล้วถึงพี่เขียนละเอียดไป พี่ก็ต้องเขียน integration test อีกอยุ่ดี  การเขียนละเอียดทำให้หาสาเหตุ class ตัวปัญหาเร็วขึ้นเท่านั้น อย่างที่เขียนไว้ใน blog ผม มันเป็นเรื่อง การ define ว่า unit ของโปรแกรมเรา เล็กแค่ไหนน่ะครับแล้วผมก็กลับคิดว่า คนอื่น เขียน test ให้อาจจะดีกว่าด้วย เพราะเป็นการ recheck requirement ไปด้วยกันด้วย เพราะถ้าผมเขียน test เอง ก็จะเขียนตาม requirement ที่ผมเข้าใจ ซึ่งอาจจะไม่ถูกก็ได้ แต่ test ผ่าน แต่คนอื่นเขียน เค้าก็เขียนตาม requirement ที่เค้าเข้าใจ ผมก็เขียนโค้ดตาม requirement ที่ผมเข้าใจ  เอ่าไม่ผ่าน ก็เจอว่า เข้าใจอะไรไม่ตรงกัน

]]>