Wednesday, 24 December 2008

The Economy of Software Testing(3)

Series The Economy of Software Testing
The Economy of Software Testing (1)
The Economy of Software Testing (2)
The Economy of Software Testing (3)

หลังจากที่เราได้รู้ความเป็นมาของ Software Validation and Verification กันแล้วเราจะมาดูกันว่า Validation และ Verification จริงแล้วมันคืออะไร และคำว่า defect นั้นคืออะไร อะไรที่เรียกว่า defect

Verification and Validation

Verification นั้นคือการ check ว่า software หรือ product ที่เราผลิตนั้นเราได้ตรงการ specification หรือไม่แต่ไม่ได้ check ว่า software ที่ทำมานั้นการทำงานนั้นถูกต้องหรือไม่ (you build it right)

Validation นั้นคือการตรวจสอบ software หรือ product นั้นว่ามีการทำงานที่ถูกต้องไหม มักจะอ้างอิงไปถึง user requirement หรือสิ่งที่ user ต้องการจริงๆว่า software หรือ product นั้นได้ให้ในสิ่งที่ user ต้องการไหม (you build the right thing)

Software Defect (ข้อผิดพลาดของ software)
Software defect นั้นอาจจะหมายถึงได้หลายๆอย่างเช่น Bug, Defect, Fault, Problem, Error, Incident, Anomaly, Variance, Failure, Inconsistency, Feature แม้ว่าหนังสือในหลายๆเล่มนั้นจะบอกว่าคำแต่ละคำนั้นจะใช้ในกรณีที่ต่างกันไปก็ตามแต่ในทีนี่เราจะเรียกทั้งหมดว่า defect และหากสังเกตว่าจะมีคำว่า feature นั้นอยู่ใน defect ด้วยเพราะ feature นั้นต่อให้เลิศหรูอลังการณ์ล้านแปดยังไงก็ตามแต่ถ้า feature นั้นลูกค้าไม่ต้องการมันก็คือ defect ดีๆนั้นเอง โดย software นั้นเป็นไปได้ค่อนข้างยากที่จะไม่มี defect เลย ซึ่งการหา defect นั้นเป็นเรื่องที่ค่อนข้างที่จะต้องใช้เวลาในการหา โดยการที่ยิ่งหาเร็วเท่าไรยิ่งดีเพราะว่า cost ในการ fixed นั้นยิ่งลดลงดังนั้นเราจึงจำเป็นที่จะต้องรู้ว่าในส่วนไหนบ้างที่มีโอกาศจะเกิด defect ได้บ้างซึ่งจะมีดังนี้

  • Requirement Definition เกิดจากการเก็บ requirement ที่ผิดพลาดหรือว่าเข้าใจกันคนละอย่างกับ user ผู้ให้ข้อมูล หรืออาจจะไม่สมบรูณ์
  • Design อาจจะเป็นผลกระทบมาจาก requirement การได้มาซึ่งข้อมูลที่ผิดทำให้การ design นั้นผิดตามไป
  • Implementation การที่ design มาผิดหรือว่าการทำความเข้าใจในตัว design ผิดทำให้การ implement นั้นผิดตามไปด้วย
  • Support System ภาษาที่ใช้ในการ programming ที่ไม่ดีนั้นก่อให้เกิด defect ได้เหมือนกันเช่น Compiler ของตัวภาษานั้นไม่ดีทำให้เกิด defect ได้
  • Inadequate Testing of Software การตั้ง test case ที่ไม่ครอบคลุม ไม่ดีพอ หรือว่าการ test ที่ไม่ครบถ้วนทำให้ defect นั้นหลุดลอดออกมา
  • Evolution การที่พัฒนาขึ้นมาจากตัวเดิมโดยเพิ่มบางสิ่งบางอย่างลงไปทำให้อาจเกิด defect เพิ่มขึ้น
การ test ตัว software แล้วปรากฎว่าไม่มี defect ไม่ได้แสดงว่า software นั้นไม่มี defect เพียงแต่ว่าเราหาไม่เจอ

“if you can’t say it, you can’t do it”

คำพูดที่บอกว่า ถ้าเราไม่รู้ว่ามันคืออะไรเราก็ไม่สามารถทำมันได้ เพราะว่าในการตรวจสอบว่า software นั้นมี defect ปนมาหรือไม่นั้นจะทำไม่ได้ถ้าหากขาดตัว specification (เป็นสิ่งที่บอกในการพัฒนา software เราต้องทำอะไร) ในการนำมาอ้างอิงในการ check ยกตัวอย่างเช่น specification ของ word processor ซึ่งจะแบ่งออกเป็น functional requirement เช่น save, print, check spelling, change font, …. และ Non-functional requirement เช่น security, reliability, user friendly, platform, .… โดยที่เราจะเอา functional และ non-functional ไปใช้ในการ test

Software Bug มันจะเกิด bug ขึ้นก็ต่อเมื่ออยู่ในข้อกำหนดด้านล่างนี้เกิดขึ้นอย่างน้อยหนึ่งข้อ
  1. Software นั้นมี bug ถ้าไม่ได้ทำในสิ่งที่ specification บอกว่ามันควรจะทำ
  2. Software นั้นมี bug ถ้าทำในสิ่งที่ specification บอกว่ามันไม่ควรจะทำ
  3. Software นั้นมี bug ถ้าทำในสิ่งที่ตัว specification นั้นไม่ได้กล่าวถึง (mention) ให้ทำ
  4. Software นั้นมี bug ถ้าไม่ทำในสิ่งที่ specification นั้นไม่ได้กล่าวถึง (mention) แต่เป็นสิ่งที่ควรจะทำ
  5. Software นั้นมี bug นั้นใช้งานยาก ไม่สวย ช้า นั้นเป็นสิ่งที่บ่งบอกว่าลูกค้าคือพระเจ้า ถ้าพระเจ้าไม่ชอบนั้นสิ่งนั้น สิ่งนั้นก็คือ Bug
Bug Locations จากการศึกษาพบว่า Bugs นั้นไม่ได้เกิดจากการเขียน code โดยจะเกิดในส่วนที่ต่างๆดังนี้
  • Specification (ประมาณ 55%) โดยจะพบว่า Bugs อาศัยอยู่ในชั้นนี้อย่างสนุกสนาน
  • Design (ประมาณ 25%)
  • Code (ประมาณ 15%)
  • Other (ประมาณ 5%)
Cost กับการ Fixed Defect

การ fixed defect นั้นมี cost ที่ขึ้นเป็น Exponential คือทีละ 10x โดยสมมติว่า defect ใน specification นั้นมีค่าในการ fixed คือ 1$ แต่ถ้าไปเจอใน Design -> 10 $ แต่ถ้าเรายังไม่เจอใน Design ไปเจอในCode -> 100$ แต่ภ้าไม่เจอใน code ไปเจอใน Software Released -> 1000$
จากข้อเท็จจริงด้าน cost ในการ fixed defect นั้นแสดงว่าการ test defect นั้นจะอยู่ในกระบวนการการพัฒนา software ทุกขั้นที่ต้องคอย test อยู่ตลอด ดังนั้นเป้าหมายหลักในการหา Bugs นั้นก็คือ การหา Bugs ให้เร็วที่สุดเท่าที่เป็นไปได้ แล้วไปแจ้งแก่ developer และคอย check ว่า fixed เรียบร้อยแล้ว

จบแล้วครับสำหรับ Series The Economy of Software Testing เป็นยังไงกันบ้างครับ มีความคิดเห็นยังไงสามารถติชมได้ครับ

ref :
SW Verification and Validation for Practitioner and Manager 2 Ed.
Software Testing Fundamwntals: Method and Metrics
Lecture วิชา SWE613 Software Verification and Validation

เพิ่มเติม
พอดีได้ไปเจอบทความ ของคุณ Siroz แล้วมันมีความคล้ายกันเพียงแต่ว่ามองกันคนละแนวกันโดยบทความของคุณ Siroz นั้นจะเน้นไปในวิวัฒนาการของการทดสอบ software จริงๆ ซึ่งถ้าใครสนใจสามารถเข้าไปดูตาม link ด้านล่างครับ

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

2 comments:

นศ IT@KMITL said...

ชอบมากเลยค่ะ
ขอบคุณมากสำหรับบทความที่มีสาระแบบนี้

กำลังเตรียมตัวสอบเลยมา search หาอะไรประดับความรู้

ยังไงก็ขอให้นำสาระความรู้ดีๆแบบนี้มาเผยแพร่อีกนะคะ
ขอบคุณค่ะ

Anonymous said...

ขอบคุณมากนะคะ

สนใจเนื้อหาเกี่ยวกับการเทสค่ะ

ตอนนี้อยากทราบถึงการวิเคราะห์ผล Performance test อ่ะค่ะ เห็นรายงานผลจาก Load Runner แล้วไม่ค่อยเข้าใจอ่ะค่ะ