Oz’s Blog

ตุลาคม 7, 2007

พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 1

Filed under: Software Testing — siroz @ 10:00 am

ตอนที่ผมเรียนวิชา Software Testing & Quality Assurance อาจารย์ผู้สอนได้นำส่วนหนึ่งของบทความ The Growth of Software Testing ของ David Gelperin และ Bill Hetzel ซึ่งตีพิมพ์ในวารสาร Communications of the ACM เมื่อเดือนมิถุนายน 1988 มาประกอบการสอน
ตอนนั้น ผมเองสนใจในเรื่องนี้อยู่แล้ว จึงไปหาบทความต้นฉบับมาอ่าน
ผมคิดว่า เนื้อหาของบทความนี้น่าสนใจ และมีประโยชน์มาก สำหรับคนที่สนใจในเรื่องการทดสอบซอฟต์แวร์ (ซึ่งโดยปกติ คนที่ำทำงานในสายงานพัฒนาซอฟต์แวร์ ก็ควรจะสนใจเื่รื่องนี้)
ถึงแม้ว่ามันจะค่อนข้างเ่ก่า แต่ก็ยังสามารถใช้อ้างอิงได้ และมีคนใช้อ้างอิงเยอะเสียด้วย

เนื่องจากว่า บทความนั้นสงวนลิขสิทธิ์โดย ACM ซึ่งเป็นผู้ตีพิมพ์ ผมคงจะเผยแพร่ต้นฉบับ หรือแม้แต่แปลมาให้อ่านกันไม่ได้
(แต่ถ้าใครมี account ของ ACM หรือเป็นนักศึกษาในมหาวิทยาลัยที่เป็นสมาชิกของ ACM ก็น่าจะ download มาอ่านได้)
เอาเป็นว่า .. ผมเรียบเรียงมาเล่าให้ฟังคร่าวๆ พร้อมกับแทรกสาระ และเรื่องอื่นๆ ที่เกี่ยวข้องควบคู่กันไปละกันนะครับ


บทความนี้พูดถึงแนวคิด และกระบวนการในการทดสอบซอฟต์แวร์ ซึ่งพัฒนามาเรื่อยๆ ตามช่วงเวลาต่างๆ ตั้งแต่เริ่มมีการใช้คอมพิวเตอร์ มาจนถึงช่วงเวลาขณะที่บทความนั้นตีพิมพ์ (ก่อนปี 1988 เล็กน้อย)
อย่างที่ผมมักจะพูดบ่อยๆ (ขออนุญาตพูดอีกที) ว่า ผมคิดว่า องค์ความรู้ทาง software engineering นั้น ยังจัดว่าใหม่ และยังไม่นิ่ง ยังต้องพัฒนาปรับปรุงอีกมาก กว่าจะถึงจุดที่เรียกได้ว่า mature จริงๆ
บทความนี้ สะท้อนจุดนี้ในด้านของแนวคิดเรื่องการทดสอบซอฟต์แวร์ได้ค่อนข้างชัด เพราะ ในช่วงเวลาไม่กี่ทศวรรษ จะเห็นว่าแนวคิดเปลี่ยนไปถึง 4 ครั้งด้วยกัน
โดยแบ่งเป็น “ยุค” ของแนวคิืดในการทดสอบซอฟต์แวร์ ซึ่งแบ่งได้เป็น 5 ยุคด้วยกัน โดยใช้งานเขียน (หนังสือ หรือ บทความ) ที่มีบทบาทสำคัญในการนำเสนอแนวคิด เป็นจุดแบ่ง
ผมขอเล่าทีละยุคไล่มาตั้งแต่ต้นละกันนะครับ

Debugging-Oriented Period (ก่อน 1956)
ยุคนี้ เรียกได้ว่าเป็นยุคเริ่มแรกของการใ้ช้งานคอมพิวเตอร์
สำหรับช่วงเวลานี้ มองในมุมหนึ่ง คือ การทดสอบ (test) และการ debug (ซึ่งแปลตามตัวว่า การขจัด bug) ถูกมองเป็นเรื่องเดียวกัน หรือยังเป็นเรื่องที่แยกจากกันได้ไม่ชัดเจน
คือ เป็นการทดลองใช้โปรแกรมที่เขียนขึ้นมา ซึ่งเป็นการพยายามที่จะตรวจสอบว่าโปรแกรมนั้น ทำงานได้จริงหรือไม่
หรือถ้าจะมองในอีกมุมหนึ่งคือ แนวคิดของการทดสอบซอฟต์แวร์จริงๆ ยังไม่เกิด เพราะ ในยุคนั้นจะมุ่งเน้นที่การ debug ซึ่งเป็นส่วนหนึ่งของการเขียนโปรแกรม มากกว่าที่จะมีการทดสอบ ซึ่งเป็นกิจกรรมที่แยกออกมาเป็นอิสระ อย่างที่การทดสอบซอฟต์แวร์ในยุคหลังจากนั้นเป็น

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

Demonstrating-Oriented Period (1957-1978)
ปัจจัยหลัก ที่ำทำให้แนวคิดของการทดสอบซอฟต์แวร์ เกิดขึ้นมาเป็นรูปเป็นร่าง แยกต่างหากมาจากการ debug คือ การที่คอมพิวเตอร์ มีความสำคัญ และมีการนำมาใช้งานแพร่หลายมากขึ้น
คนเิริ่มเข้าใจ และมองเห็นว่า การแก้ปัญหาที่มีสาเหตุมาจาก ข้อผิดพลาดจากการทำงานของคอมพิวเตอร์ ต้องใช้ค่าใช้จ่ายที่สูงมาก
ซึ่งประเด็นนี้ี้ ทำให้เสถียรภาพและความน่าเชื่อถือของคอมพิวเตอร์ ทั้งในด้านฮาร์ดแวร์ และซอฟต์แวร์ กลายเ็ป็นเรื่องสำคัญอย่างยิ่งยวดตามไปด้วย
ในมุมของซอฟต์แวร์ มีความจำเป็นที่จะต้องมีการใช้กิจกรรม หรือกระบวนการบางอย่าง เพื่อที่จะตรวจสอบความถูกต้องของโปรแกรมที่เขียนขึ้น ก่อนที่จะนำไปใช้งานจริง
จากเดิมที่ อาศัยแค่การ debug เป็นกิจกรรมหลักที่ทำเพื่อกำจัดข้อผิดพลาดที่มีในโปรแกรม ในยุคนี้ จะให้ความสำคัญกับการทดสอบ ซึ่งมีเป้าหมายเพื่อตรวจสอบว่า โปรแกรมที่เขียนขึ้นมาทำงานไดัถูกต้อง ตามที่ได้กำหนดไว้หรือไม่
นั่นคือ จะมีการสร้างกรณีทดสอบ เพื่อใช้แสดงให้้เห็นว่าโปรแกรมที่เขียนขึ้นมาทำงานได้ถูกต้องจริง
เมื่อทดสอบโปรแกรมด้วยกรณีทดสอบทั้งหลายที่สร้างขึ้นมานี้แล้ว ถ้าได้ผลเป็นผ่าน นั่นหมายถึง โปรแกรม(ควรจะ)ไม่มีข้อผิดพลาดแล้ว (ถ้าโปรแกรมมีข้อผิดพลาดอยู่ ทดสอบแล้วจะได้ผลเป็น “ไม่ผ่าน”)
ซึ่ง การทดสอบโปรแกรม ก็เป็นงานที่ต้องใช้ค่าใช้จ่าย(ในเชิง แรงงานที่ลงไป เครื่องมือ ทรัพยากรอื่นๆ ฯลฯ) สูงเช่นกัน ดังนั้นจึงเ็ป็นความท้าทายอย่างหนึ่ง ที่จะต้องทดสอบโปรแกรม โดยให้มีข้อผิดพลาดหลุึดรอดเหลืออยู่ในโปรแกรมน้อยที่สุด ในขณะที่จะต้องใช้ค่าใช้จ่ายในการทดสอบให้น้อยที่สุดเช่นกัน เพื่อให้คุ้มค่าต่อ การลงทุนเพื่อลดความเสี่ยงต่อปัญหาที่เกิดจากความผิดพลาดในโปรแกรม ซึ่งตรงนี้ คือ ประสิทธิผลของการทดสอบนั่นเอง
(ประเด็นนี้ ถ้าจะพูดกันจริงๆ คงจะยาว ขอเก็บไว้ก่อน ถ้ามีโอกาสคงจะได้นำมาคุยกัน)

เมื่ออ่านมาถึงตรงนี้แล้ว เราอาจจะรู้สึกว่า อะไรๆ มันเริ่มจะฟังดูดีแล้ว
ความพยายามที่จะีทดสอบ เพื่อจะแสดงว่า โปรแกรมทำงานได้ถูกต้องตามที่ต้องการ น่าจะเป็นแนวคิดที่ดี และถูกต้องในการทดสอบซอฟต์แวร์
มันควรจะเป็น happy ending แล้ว
ผมคิดว่า หลายๆ องค์กร หลายๆ โปรเจ็กต์ ก็ใช้แนวความคิดนี้เป็นหลัก

แต่ในความเป็นจริงแล้ว การทดสอบโดยมีเป้าหมายที่เน้นไปที่ การแสดงความถูกต้องของโปรแกรม เป็นหลักนั้น มีจุดอ่อนซึ่งมีผลเสียโดยตรงต่อประสิทธิผลของการทดสอบ
ในปัจจุบัน แนวคิดเป้าหมายนี้ไม่ค่อยเป็นที่ยอมรับนัก โดยเฉพาะในเชิงวิชาการ (หนังสือส่วนใหญ่ จะไม่ใช้แนวคิดนี้เป็นจุดประสงค์ของการทดสอบซอฟต์แวร์)
แนวคิดในยุคถัดไป จะเป็นการแก้ไขจุดอ่อนนี้

ขออนุญาตจบตอนก่อนนะครับ (ก่อนที่จะยาวเกินไป)
ตอนต่อไป เราจะมาต่อกันในยุคที่ 3 ครับ

10:00 นาฬิกา
7 ตุลาคม 2550

16 ความเห็น »

  1. เออ…อ่านแล้วเคยจำได้นะเนี่ย -*-

    ความเห็น โดย :-p — ตุลาคม 7, 2007 @ 11:42 pm

  2. ดีครับ ขอบคุณครับ แล้วจะรออ่าน ตอนต่อไปครับ

    ความเห็น โดย iporsut — ตุลาคม 8, 2007 @ 8:41 am

  3. ขอบคุณครับ😀

    รับรองคราวนี้ไม่ต้องรอตอนต่อไปนานครับ เพราะใช้วิธีเดียวกับละครช่องเจ็ด (เขียนตุนเอาไว้ก่อนแล้ว)

    ความเห็น โดย siroz — ตุลาคม 8, 2007 @ 10:02 pm

  4. โห มีกั๊กให้ลุ้นด้วย

    ความเห็น โดย deans4j — ตุลาคม 8, 2007 @ 10:36 pm

  5. ขอกั๊กๆ ไว้หน่อยสิ … จะได้ลุ้นหลายๆ ตอน
    มีคนเคยบอกว่า entry ยาวๆ อ่านแล้วเหนื่อย .. คนเีขียนก็เหนื่อยเหมือนกัน😛

    ความเห็น โดย siroz — ตุลาคม 9, 2007 @ 11:10 am

  6. ใช่ๆๆ อิจฉาด้วยเขียนได้ยาวขนาดนี้

    ความเห็น โดย sangkaew — ตุลาคม 9, 2007 @ 5:01 pm

  7. งง ว่า ทำไมต้องอิจฉาง่ะครับ??

    ความเห็น โดย siroz — ตุลาคม 10, 2007 @ 10:06 pm

  8. มาปูเสื่อรอครับ🙂

    ความเห็น โดย idome — ตุลาคม 12, 2007 @ 10:05 am

  9. […] ตอนที่ 2 Filed under: Software Testing — siroz @ 10:01 pm จากตอนที่แล้ว ที่เราพูดถึง “ยุค” ต่างๆ […]

    Pingback โดย พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 2 « Oz’s Blog — ตุลาคม 16, 2007 @ 10:02 pm

  10. 1.การทดสอบซอฟต์แวร์, การหาข้อผิดพลาด จะทำอย่างไร
    2.การพัฒนา Software หลายๆ คน มีปัญหาอะไรเกิดขึ้นบ้าง ?
    3.การพัฒนา OpenSource — Free Software Projects ต่างจากปกติอย่างไรบ้าง ?
    ช่วยตอบให้ด้วยน่ะคร๊าฟฟฟฟ
    ส่งาทางเมลลืให้หน่อยน่ะคร๊าบบ
    ขอบคุณมากคับ

    ความเห็น โดย กัส — มีนาคม 3, 2008 @ 4:03 pm

  11. เอาอย่างนั้นเลยนะ…

    ความเห็น โดย siroz — มีนาคม 4, 2008 @ 6:22 am

  12. ผมเป็นกรรมการตรวจรับอย่างจำเป็น
    อยากหาความรู้การตรวจรับโปรแกรม การตรวจรับSource code
    ไม่ทราบรบกวนเกนไปมั้ย

    ความเห็น โดย สถาพร — สิงหาคม 18, 2008 @ 12:29 pm

  13. ขอโทษนะคะ

    พี่เป็นเด็กปโท ลูกศิษย์ อ. พรฤดี รึป่าวคะ

    ความเห็น โดย IT@KMITL — ธันวาคม 27, 2008 @ 6:31 pm

  14. […] พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที… พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 2 […]

    Pingback โดย >The Economy of Software Testing(3) | Oracle in Thai | Oracle in Thai | Oracle User Group in Thailand | — มีนาคม 23, 2011 @ 4:42 pm

  15. […] พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที… พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 2 […]

    Pingback โดย The Economy of Software Testing(2) | Oracle in Thai | Oracle in Thai | Oracle User Group in Thailand | — มีนาคม 23, 2011 @ 4:48 pm

  16. […] พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที… พัฒนาการของการทดสอบซอฟต์แวร์ ตอนที่ 2 […]

    Pingback โดย The Economy of Software Testing(1) | Oracle in Thai | Oracle in Thai | Oracle User Group in Thailand | — มีนาคม 23, 2011 @ 4:48 pm


RSS feed for comments on this post. TrackBack URI

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

บลอกที่ WordPress.com .

%d bloggers like this: