แสดงบทความที่มีป้ายกำกับ ขั้นตอนทดสอบซอฟต์แวร์ แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ ขั้นตอนทดสอบซอฟต์แวร์ แสดงบทความทั้งหมด

Testing Type มีอะไรบ้าง (Software Testing)


Testing Type มีอะไรบ้าง (Software Testing)




เป็นอีกหนึ่งรายวิชาของสายการเรียน Software Engineering ซึ่งก็คือ วิชา Software Testing ซึ่งเป็นขึ้นตอนหนึ่งที่สำคัญมากๆ ในกระบวนการพัฒนาซอฟต์แวร์  และผมก็ได้หาความรู้เพิ่มเติมเกี่ยวกับวิชาจากนี้จาก Internet และก็ไปเจอเว็บนี้เข้า เนื้อ และ คำศัพท์ครอบคลุมมากๆครับ มาดูกันเลยย...
เชื่อว่าหลายๆท่านที่เคยเล่นเกมส์ออนไลน์ ที่เคยบูมในช่วงแรกๆเมื่อหลายปีก่อน คงเคยได้ยินการเรียกชื่อ version ต่อท้ายเกมส์นั้นๆ ว่า alpha , beta, closed beta อะไรทำนองนี้บ้าง  แถมล่าสุด IE9 ก็ออกตัว Beta ออกมาให้เราได้ใช้กัน ทราบกันหรือเปล่าครับว่า คำว่า alpha/beta มันคืออะไร (อย่าตอบว่าเป็นยาทาแก้สิวแก้ฝ้านะครับ) ที่จริงแล้วทั้งคู่นั้นก็คือประเภทของการ Testing อย่างนึงครับ
คำถามต่อมาก็คือ การ Testing จริงๆแล้วมันมีกันอยู่กี่ประเภท หลายคนก็คิดว่า Testing มันยังจะมีแยกอะไรไปได้อีกเหรอ Testing มันก็แค่การทดสอบว่า application ไม่เจ๊ง ทำงานได้ปกติ result ออกมาครบสมบูรณ์ก็น่าจะเพียงพอแล้ว แต่ในความจริงแล้วมันสามารถแตกยิบย่อยอะไรลงไปได้อีกเยอะแยะ ราว 20-30 ประเภท โห…เยอะจริงๆ
ตรงนี้ขอยกมาจากเวป softwaretestinghelp.com ที่พูดถึงประเภทของการ Test โดยขอใส่ประสบการณ์ที่ได้คลุกคลีกับการ Testing อธิบายเข้าไปเพื่อให้เข้าใจกันง่ายขึ้น (หรือมันจะยากขึ้นก็เหอะ) แต่ขอออกตัวไว้ก่อนว่าผมได้ทำแค่บางประเภทเท่านั้น แต่ก็ยังพอได้ยินจากในทีมที่ทำงานที่ทำมาบ้างครับ…
  • Alpha Testing – เป็นการ Test การใช้งานของระบบทั้งหมด โดยทำทุกอย่างให้เหมือนการใช้งานจริงทุกอย่าง โดยไม่จำเป็นต้องมีเครื่องหรือจำนวนเครื่องเหมือนที่จะมีจริง แต่ใช้การจำลองเครื่องขึ้นมาและสามารถใช้งานได้จริง ซึ่งเรียกว่า Virtual Machine โดยทั่วไปแล้ว จะการทำ Test ที่ฝั่ง developer หรือบริษัทที่พัฒนาโปรแกรมหรือระบบเอง โดยลูกค้า หรือ user จะยังไม่มีส่วนเกี่ยวข้องในการ Test นี้
  • Beta Testing หรือ Pilot Testing - เป็นการ Test ที่ผู้ใช้งานจะเข้ามาทดลองใช้ระบบจริงๆ ซึ่งระบบที่จะทดสอบนั้นสามารถใช้งานได้จริง ด้วยเครื่องจริง โดยการ Test ประเภทนี้จะเป็นขั้นตอนสุดท้ายก่อนที่จะส่งมอบให้ลูกค้า หรือทำการจำหน่ายออกไป
  • Blackbox Testing – ชื่อแปลความหมายว่าเป็นการ Test กล่องดำ นั่นก็คือ การ Test โดยที่เราไม่ต้องรู้ส่วนของการ Coding, Programming หรือส่วนต่างๆ ที่อยู่ด้านหลังการทำงานของโปรแกรมหรือระบบนั้นๆ Tester จะสนใจเฉพาะสิ่งที่อยู่ตรงหน้าเท่านั้น เช่น ดูเฉพาะหน้าต่างของโปรแกรม หรือผลลัพธ์ที่ได้เท่านั้น ไม่สนว่าขั้นตอนข้างหลังจะมีกระบวนการอย่างไรบ้าง
  • Whitebox Testing หรือ GlassBox Testing – ตรงกันข้ามกับ Blackbox Testing อย่างสิ้นเชิง นั่นคือเป็นการ Test code หรือ logic การคิดหรือคำนวณค่า นั่นคือดูการทำงานของ Code
  • Unit Testing – ลักษณะจะค่อนข้างคล้ายกับ Whitebox Testing คือเป็นการ Test ในระดับ Module ของ Application นั้นๆ โดยที่จะผู้ที่จะ Test จะต้องมีความรู้ในเรื่อง programming design และ coding ซึ่งโดยคนที่ทำการ Test จะเป็น Developer เองหรืออาจจะสลับกัน check ระหว่าง developer กันเอง สำหรับ Tester นั้น จะไม่มีส่วนเกี่ยวข้องในประเภทนี้ แต่ถ้ารู้เรื่องก็เยี่ยมครับ
  • Integration Testing – เป็นการ Test การประกอบร่าง module แต่ละ module ที่นำมาใช้งานกับ function นั้นๆ หรือในแง่ของ component ที่อยู่คนละ Server ก็จะเป็นการ Test ว่าสามารถ connect และทำงานร่วมกันได้หรือไม่ การ Test ประเภทนี้เหมาะกับระบบที่เป็น Client/Server
  • Incremental Integration Testing – เป็นการ Test การประกอบร่าง โดยค่อยๆใส่ทีละ Function หรือ Module เพิ่มเข้าไป แล้ว Test ไปเรื่อยๆ เรียกว่า Bottom Up Approach สำหรับข้อจำกัดของการ Test แบบนี้คือ Function หรือ Module นั้นๆ ควรจะต้องทำงานแบบอิสระ ไม่ผูกติดกับ module อื่นๆ เป็น dependency
  • Functional Testing – เป็นการ Test ที่สนใจ Function ของ application นั้นว่าสามารถทำงานจนได้ผลลัพธ์ได้ครบตรงตาม requirement ที่กำหนดมาหรือไม่
  • System Testing – เป็นการ Test ระบบทั้งระบบว่าตรงตาม requirement หรือไม่ โดยที่จะ Test บนระบบที่ปิด คือทำบน environment ที่ใช้สำหรับการ Test เท่านั้น - Functional Testing เป็น sub-set ของ System Testing
  • End-to-end Testing - เป็นการเทสระบบทั้งระบบเหมือนกับ System Testing โดยที่สิ่งจะต่างกันคือ Tester จะ Test บนระบบที่จะใช้ถูกงานจริงที่ประกอบร่างกันโดยสมบูรณ์แล้ว เช่น ระบบสามารถขอข้อมูล แล้ว Flow ข้อมูลที่ต้องการจากเครื่องต้นทางต้นทาง มาแสดงบนหน้าจออีกเครื่องนึง โดยที่ไปเก็บข้อมูลใน Database อีกเครื่องนึง เป็นต้น
  • Sanity Testing – เป็นประเภทการ Test โดยที่จะหยิบ function หลักๆ ของการทำงานมาใช้ (ส่วนใหญ่แล้วก็จะโดนบอกว่า ที่ไหนก็สำคัญ ฮ่าๆ) ซึ่งจะใช้ Test เมื่อมีที่การ update version ใหม่ๆขึ้นมา โดย version ใหม่ๆที่ออกมาจะต้องเป็นการ fixed defect เล็กๆน้อยๆ ซึ่งการทำการ Test นี้เพื่อเป็นการ guarantee ว่าระบบสามารถทำงานได้ปกติ ไม่ทำให้ระบบ หรือ application crash (ตรงนี้ถ้าเกิดขึ้นมาหล่ะก็น่ากลัวครับ)
  • Regression testing – ส่วนนี้ผมโดนทำบ่อย เป็นการ Test เพื่อทดสอบส่วนของระบบ หรือ application ที่มีการเปลี่ยนแปลง โดยเลือกเป็น function เป็นหลัก โดยทั่วไปแล้ว การ Test ประเภทนี้ เป็นการทำซ้ำๆกันแทบทุกวันเพื่อ Test functions ดังนั้นแล้วเพื่อไม่ให้เป็นการเปลืองเวลาในการ Test เราจึงมี Tool ที่ใช้ในการช่วยเรา run test เช่น Test script เป็น command line run ด้วย .bat หรือ HP Quick Test Pro ที่ช่วยในการทำ Automate Testing (ผมจะพูดถึง Test Tool ในตอนต่อๆไปครับ)
  • Acceptance Testing – เป็นการ Test ระบบ ซึ่งลักษณะจะเหมือนกับ End-To-End แต่ว่าจะทำการ Test โดยลูกค้า หรือ user ที่จะใช้งานจริงให้พึงพอใจเสียก่อน ก่อนที่จะ Sign-off งาน
  • Performance testing – เป็นการทดสอบระบบหรือ component ว่าสามารถรองรับการใช้งานด้วยจำนวนผู้ใช้ หรือ จำนวน data ที่เข้ามาในระบบตามที่ requirement บอกไว้หรือไม่ และเรามักใช้สลับกันกับ Load Testing และStress Testing โดยเหมารวมว่าเป็น Performance Testing ซึ่งความหมายของทั้งสองตัวนี้คือ…
  • Load Testing – เป็นประเภทหนึ่งในการทำ Performance Testing เพื่อใช้ในการดูการทำงานของระบบ เมื่ออยู่ในสภาวะที่คาดว่าจะเกิดขึ้นเมื่อมีการใช้งานจริง เช่น เราคาดไว้ว่า จะมีคนเข้ามาใช้งาน app เราประมาณ 100 คน เราก็สร้าง user เพื่อเข้าไปใช้พร้อมๆกัน แล้วดูว่าระบบจะทำงานได้ช้าลง เมื่อมี user เข้ามาใช้งานพร้อมๆกัน 100 คนหรือไม่
  • Stress Testing – อีก 1 ประเภทของ Performance Testing เป็น on-top ของ Load Testing คือการ Test นี้เราจะดูจำนวนมากที่สุดที่ระบบรับได้ จากตัวอย่างของ Load Testing ถ้าเราสามารถ guarantee ว่า 100 คนรับได้แน่นอน ตัวเลขต่อไปที่เราจะหาคือจำนวนที่ user ที่รองรับได้สูงสุดจนกว่าระบบจะล่ม ด้วยการเพิ่ม User ไปเรื่อยๆทีละ 5 user
    การทำ Performance นั้น เราคงไม่สามารถจะให้ user จริงๆมาใช้งานได้ ก็ต้องมีการสร้างหรือ generate user หลอกๆขึ้นมาเพื่อแทนที่ user จริงๆ และมักมีการเขียน script เพื่อให้มัน execute การ test ได้ เช่นเดียวกันกับกรณีการทำ Regression Testing
  • Usability Testing หรือ User Interface Testing – เป็นการ Test User Interface ของ application ว่าสามารถเข้าใช้งานได้ทุกเมนู หรือทุกหน้าจอหรือไม่ รวมไปถึงหน้าตาของ application เหมาะสมกับการใช้งานหรือไม่ ทั้งในแง่ความสะดวกและความง่ายในการใช้งาน อาจรวมไปถึงการทำ User Manual หรือ Troubleshooting document ให้ user เมื่อ user เจอปัญหา ก็จะสามารถใช้ document ช่วยในการอ้างอิงได้
  • Install/Uninstall testing - เป็นการ Test package ของ application ในแง่ของการติดตั้ง, การเอาออกจากเครื่อง (remove) และรวมไปถึงการ upgrade โปรแกรม (ถ้ามี) ซึ่งต้องครอบคลุมไปถึงการติดตั้งบน hardware / OS / Environment ที่ต่างกันด้วย
  • Recovery testing – เป็นการ Test โดยที่จะดูการ recover ของระบบ หรือ application หลังจากที่เกิดเหตุการณ์ผิดปกติของระบบ เช่น Crash, Hardware เสียหาย และเหคุการณ์ที่ไม่คาดคิด ว่าสามารถเปิดขึ้นมาแล้วทำงานได้ปกติ
  • Security Testing – เป็นการ Test ระบบเพื่อป้องกันการเข้าถึงข้อมูลโดยทุจริต หรือเรียกว่า Hack เข้าสู่ระบบ ไม่ว่าจะเป็นโจมตีทั้งภายในหรือภายนอก การ Test ประเภทนี้ส่วนใหญ่แล้วจะใช้กับบริษัทหรือองค์กรที่เก็บข้อมูลที่เป็นความลับ เช่น ธนาคาร เป็นต้น ซึ่งผู้ที่จะเป็น Tester ในประเภทนี้ต้องเป็นคนที่รู้เรื่อง Network Security และช่องทางที่เป็นไปได้ในการเจาะข้อมูลเป็นอย่างดี
  • Compatibility Testing – เป็นการ Test การเข้ากันระหว่าง hardware/software/network/OS ว่าสามารถทำงานเข้ากันได้หรือไม่ ที่เคยเจอคือ case ว่า สามารถ Run application นี้ได้บน Windows 2003 แต่ไม่สามารถทำบน Windows 2008 Server หรือ Windows 7 ได้
  • Comparison Testing - เป็นการ Test เพื่อเปรียบเทียบจุดเด่น จุดด้อยของแต่ละ version ที่ผ่านมา หรืออาจเปรียบถึง product ตัวอื่นๆที่ทำงานได้เหมือนกัน
  • Data Comparison Testing – เป็นการดึงข้อมูลในแต่ละส่วนของ module มาเปรียบเทียบกันว่าข้อมูลเหมือนกันหรือต่างกันหรือไม่ โดยที่ต้นทางของข้อมูลจะต้องเป็นที่ที่เดียวกัน
เป็นอย่างไรบ้างครับ ประเภทของการ Testing มีเยอะอย่างที่เกริ่นไว้เยอะมากๆ ที่จริงตอนผมนั่งเขียนก็ไม่นึกว่ามันจะมีเยอะแยะขนาดนี้ แต่ไม่ว่าจะเป็นการ Test ประเภทไหน หรือมีกี่อย่าง เป้าหมายที่สำคัญที่เหมือนกันก็คือ Quality of Software ต้องมีสูงสุด และครอบคลุม Requirements ที่ลูกค้าบอกมาทุกประการครับ

ขอบคุณแหล่งข้อมูลจาก : http://charathbank.wordpress.com