Quality Assurance vs Quality Control

วันนี้เรามาคลายความสงสัยของ สองคำนี้กันดีกว่า ว่ามันต่างกันอย่างไร เวลาเราสมัครงาน คงมีบางคนสงสัยเหมือนกันว่า คำสองคำนี้ต่างกันอย่างไรหนอ แต่เราด็ต้องยอมรับว่าแต่ละองค์กรให้คำจำกัดความ ของ สองตำแหน่งนี้ต่างกัน วันนี้เราจะมาหาคำตอบกันว่า สองคำนี้มีหน้าที่ต่างกันอย่างไรบ้าง

Quality Assurance (QA) คือ กระบวนการที่มุ่งเน้นไปในการป้องกันการเกิดข้อผิดพลาดของตัว Application หรือ Defect นั้นเอง ในขณะที่ Quality Control คือ กระบวนการที่มุ่งเน้นไปเพื่อที่จะทำการหาตัว Defect ของApplication ที่อาจจะเกิดขึ้น ถ้ายังงง เรามาดูให้ล฿กกันเข้าไปอีกว่ามีหน้าที่อย่างไรในแต่ละตำแหน่ง
QA QC
นิยาม เป็นการควบคุมกระบวนการการพัฒนา softwareว่าถูกต้องตามกระบวนการหรือควรทำหรือไม่ เป็นการตรวจสอบว่าคุณภาพของตัว software ที่ทำการพัฒนาเรียบร้อยแล้วนั้นสามารถทำงานได้จริงหรือไม่
Focus on เป็นการป้องกันไม่ให้เกิด defect ในระหว่างที่ทำการพัฒนา software ทำการทดสอบเพื่อหาdefect ของระบบหลัง¬จากที่มีการพัฒนา software เรียบร้อยแล้ว¬¬
จุดประสงค์ จะเป็นการควบคุมกระบวนการพัฒนา และกระบวนการทดสอบระบบเพื่อไม่ให้มี defect เกิดขึ้น ทำการค้นหา Defect จาก software ที่ได้ทำการพัฒนา ก่อนที่จะมีการส่งให้ผู้ใช้งานใช้
ทำอย่างไร มีการสร้างกระบวนการการทำงานในการพัฒนาโปรแกรมให้เป็นระบบ มีการตรวจสอบขั้นตอนในแต่ระกระบวนการ ทำการค้นหาหรือกำจัดปัญหาที่อาจจะเกิดขึ้นจากการใช้ Software เพื่อให้เป็นไปตามความต้องการของผู้ใช้งาน
ทำอะไร มีการวางแผนและจัดทำเอกสาร เพื่อให้มีกระบวนการการพัฒนาsoftware เป็นไปตามกระบวนการที่ถูกต้อง เพื่อป้องกันการเกิดปัญหาทางด้านคุณภาพของตัว softwareที่พัฒนา มีการทำการทดสอบทั้งการใช้งานและการทดสอบทางด้านเทคนิคเพื่อหาข้อผิดพลาดของ software ที่อาจจะเกิดขึ้นได้เมื่อนำไปใช้งานจริง

ความรับผิดชอบ ทุกคนในทีมที่อยู่ในกระบวนการพัฒนาระบบ เป็นความรับผิดชอบของ QC ในทีมที่ทำการทดสอบและหาข้อบกพร่องของระบบ
ตัวอย่าง การตรวจสอบ การตรวจสอบ และการทดสอบ

QA คือคบที่จะมาคอยจัดการกระบวนการในการพัฒนาsoftware และตรวจสอบระบบการพัฒนา software ว่าเป็นไปอย่างมีประสิทธิภาพหรือไม่ เพื่อป้องกันให้สุดท้ายแล้วได้software ที่มีประสิทธิภาพ ออกมาให้ดีที่สุดให้กับผู้ใช้งาน โดยทางQA ก็จะมีการตรวจสอบเอกสาร การวางแผนการพัฒนา ว่ามีกระบวนการถูกต้องหรือไม่ แต่ละกระบวนการต้องแต่การเก็บ requirement จนถึง การส่งมอบงานให้ลูกค้า มีการทำงานที่ถูกต้องและมีประสิทธิภาพพอไหมนั่นเอง
ส่วน QC จะป็นแค่ส่วนหนึ่งของกระบวนการพัฒนาระบบ คือหลังจากที่กระบวนการพัฒนาระบบทำการพัฒนาระบบเรียบร้อยแล้ว QC จะเข้ามาทำการทดสอบระบบต่อ โดบจะมีการทดสอบหลายอย่างเช่น กระบวนการการทพงานของ software ว่าสามารถทำงานได้ถูกต้องหรือไม่ ตรงตามความต้องการของผู้ใช้งานหรือไม่ สามารถรองรับการใช้งานของ user ได้จริงหรือไม่ ก่อนจะทำการส่งมอบงานไปยังผู้ใช้งาน เพื่อเตรียมความพร้อมของระบบให้เหมาะสมกับการใช้งานนั้นเอง

Test Case & Test Scenario & Test Script

องคำนี้ถ้าคงเป็นที่คุ้นหู คุ้นตากันอย่างมากกับคนที่อยู่ในวงการ IT หรือจะรู้จักเป็นอย่า
มากก็คงคนที่ทำอาชีพทดสอบระบบ Software ทั้งหลาย แต่เคยคิดบ้างไหมเอ๋ยว่า สองคำนี้ต่างกันอย่างไร ในทางปฏิบัติ ตามที่ส่วนตัวเข้าใจ สองคำนี้มีความหมายไม่เหมือนกัน แต่ก็ขึ้นอยู่กับบริษัท หรือองค์กร จะเลือกใช้คำนิยามนี้ขึ้มาอีก เหมือนๆกับตำแหน่ง IT อื่นๆที่ใช้กันผสมมากมาย จนไม่รู้ว่าตำแหน่งอะไรกันแน่ กลับมาเข้าเรื่องกันต่อเลยดีกว่า สองคำนี้ จากประสบการที่เคยทำงานทางด้านทดสอบ Software มาพอสมควร ก็พอที่จะแยกได้ตามความเข้าใจจากการทำงาน เพราะส่วนตัว ไม่เคยเรียนวิชานี้มาก่อนเลย แต่ปัจจุบันบางมหาวิทยาลัย น่าจีสอนกันมากขึ้น เพราะปัจจุบันมีคนเข้ามาทำงานทางนี้กันเพิ่มมากขึ้นที่เดียว

Test Case & Test Scenario ถ้าจะเอา สองคำนี้มานั่งแปลอย่างตรงตัวเลยก็คือ

Test Case คือ กรณีที่ใช้ในการทดสอบ

Test Scenario คือ สถานนะการที่ใช้ในการทดสอบ

พอแปลแล้ว ก็ยังคงเกิดอาการงง กันอยู่ไม่ใช่น้อย ก่อนอื่นเรามาดูคำว่า
Test Case กันก่อนเลย คำคำนี้ จะเป็นการทดสอบที่มีเพียงเงื่อนไขเดียวในการทดสอบ เช่น การทดสอบหน้า Login โดยกรอกข้อมูล Password ผิด เป็นต้น เป็นการเขียนที่จะมีการระบุเงื่อนไขในการทดสอบเพียงอย่างเดียวเพื่อดูผลที่ได้จากการทดสอบ จากตัวอย่างที่กล่าวมาข้างต้นนี้ จะแสดงให้เห็นว่า ผลที่ควรจะเป็นไปสำหรับการทดสอบนี้คือ ไม่สามารถ Login เข้าสู้ระบบได้ เมื่อมีการใส่Password ผิดนั้นเอง ส่วนมากมักจะใช้คำเหล่านี้การเขียนTest Case ในการทดสอบ Function ของตัว Software นั้นเอง ในส่วนนี้การเขียน Test Case จะอ้างอิงจาก Function และ Business Requirement ของแต่ละ Application ที่เราจะทดสอบ
Test Scenario นั้นจะเป็นการเขียนจำลองเหตุการณ์ ที่เกิดขึ้นจริงที่ระบบจะนำไปใช้ในแต่ละ Business โดยในแต่ละ Test Scenario อาจจะมีการแบ่งเป็น Positive และ Negative ด้วยก็ได้ ส่วนมากนิยมเขียนตั้งแต่เริ่มBusiness Flow จนจบ เพื่อให้แน่ใจว่า Application ที่ทดสอบสามารถนำเอามาใช้ควบคู่ไปกับ Business ในแต่ละเหตุการณ์ที่เกิดขึ้นจริงๆได้ ในการเขียนประเภทนี้ จะเป็นการใช้เพื่อทดสอบ ในระดับของ UAT (User Acceptance Test ) ซึ่งการทดสอบนี้ จะผ่านการทดสอบในระดับ Function มาก่อนเพื่อให้แน่ใจว่า ในแต่ละ Functionนั้ ระบบไม่เกิดการ Error หรือ ไม่สามารถใช้งานได้
Test Script คือส่วนที่จะใช้เขียนเพื่อบอก Step การทำงาน ในแต่ละ Test Case / Test Scenario เช่น ต้องไป Click ที่ไหน ปุ่มอะไรที่หน้าจอไหน ซึ่งบางครั้ง อาจจะหมายถึง Step(Script) ใน ส่วนของ Automate ด้วยก็ได้

คำนิยาม (1)

Unit Test คือ การทดสอบบางส่วนของโปรแกรมว่าเป็นไปตามเงื่อนไขหรือไม่ เช่น เมื่อมีการกรอกข้อมูลตัวเลขลงในช่องเลขบัตรประชาชน ที่มีไม่ถึง 13 หลัก , การกรอกตัวอักษรลงไปใน Field ดังกล่าว เป็นต้น

Functional Test คือการทดสอบในแต่ละ Function ของโปรแกรมว่าสามารถทำงานได้ตรงตาม Requirment หรือไม่ เช่น
Member Registeration สามารถทำการลงทะเบียนได้ตามRequirment ที่ต้องการหรือไม่

Integrated Test คือการนำเอาการทดสอบในแต่ล่ะส่วนมาประกอบกันเพื่อทำการทดสอบในแต่ละส่วนว่าสามาถรถเชื่อมต่อ หรือติดต่อหากันได้อย่างถูกต้องหรือไม่
เช่นการนำเอาFunctional ทั้งหมด ใน module A มาทำการทดสอบ เพื่อดูว่าระบบสามารถดึงข้อมูลจาก อีกFunction หนึ่งมาแสดงที่อีกFunction หนึ่งได้ถูกต้องหรือไม่
ยกตัวอย่างเช่น
1. Function A เป็นการ Register สมาชิกเข้าระบบ
2. Funvtion B เป็นการ Accept สมาชิกที่ทำการกรอกข้อมูลเข้าระบบ
ในการทำ Intergrated Test จะเป็นการนำเอา Function A และ B มาทำต่อเนื่องกัน

End to End Test คือการจับเอาแต่ละส่วนของ Integrated Test มาทำการ Test ตั้งแต่ต้นจนจบอีกครั้ง

Regression Test คือ การทดสอบเพื่อดูว่าเมื่อมีการทำการเปลี่ยนแปลงในจุดหนึ่งจะมีกระทบกับส่วนอื่นในระบบหรือไม่ ซึ่งจะซ้ำกับการ Test ที่เคยทำมาแล้ว แต่จะใช้ทดสอบเพื่อให้แน่ใจว่าเมื่อมีการเปลี่ยนแปลงในจุดหนึ่งในระบบ จะไม่มีผลกระทบกับ Function เดิมที่ยังใช้งานได้อยู่

System Integration Test (SIT) คือ เพื่อ Verify ว่าระบบต่างๆ สามารถทำงานร่วมกันได้อย่างถูกต้อง ตรงตามวัตถุประสงค์ ทั้ง Network integration และ Product integration ซึ่งจะรวมไปถึง Infrastructure ของระบบ

User Acceptant Test (UAT) คือ การทดสอบ เพื่อConfirm business requirement กับ User ว่าเป็นไปตามที่ต้องการหรือไม่ โดยจะทำหารทดสอบที่เหมือนกับ Enviroment เสมือนจริง พร้อมกับใช้ข้อมูลจริงในการทดสอบ

ทดสอบระบบ – แนะนำตัว

สวัสดีครับ และยินดีอย่างมากที่ได้เข้ามาอ่าน กับบทความที่ได้เขียนขึ้น โดยส่วนตัวอยากเขียน blog นี้เพื่อรวบรวม หลักการ การทำงานเกี่ยวกับการ ทดสอบระบบที่มีอยู่ ทั่วไปเลยที่บางครั้งบางคราว อาจจะเป็นที่รู้จักในหมู่กลุ่มคน หรือบริษัทที่มีการนำเอาระบบคอมพิวเอตณืใหม่เข้ามาใช้ในธุรดิจที่ทำอยู่ แต่ก็มีไม่น้อยเลยเช่นเดียวกันที่บางธุรกิจไม่รู้จักเกี่ยวกับการทดสอบระบบเลย ผมคนนึงที่โดนบังคับเข้ามาทำงานในตำแหน่งนี้โดนไม่ได้เป็นที่ยินยอม มากนักลัจากที่เคยสัมผัสมา 4-5 ปีที่ผ่านมา ก็เข้าใจไปเองว่า อุสาหกรรมซอฟแวร์ ประเทศไทยคงไม่ได้รู้จัก หรือให้ความสำคัญในส่วนนี้มากนัก   ผมในฐานะคนคนนึงที่สัมผัสถึงกระบวนการไม่มากนัก ก็อยากจะเขียนข้อความเพื่อเป็นช่องทาง ในการอิบาย แลกเปลี่ยนความรู้เกี่ยวกับการทดสอบ กับผู้รู้ทั้งหลาย หรือผู้ไม่รู้ที่ต้องการข้อมูล นำไปใช้หรือช่วยให้เข้าใจการทำงานในส่วนนี้ให้มากขึ้น

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

นอกเรื่องมาเยอะล่ะ พูดถึงการทดสอบระบบพอเป็นน้ำจิ่มล่ะกัน เดี๋ยวจะไม่สาระอะไรเลย ส่วนมากเราจะเริ่มทดสอบระบบนี้หลังจากที่ Developer ทำการเขียน Programming Code เสร็จแล้ว ถ้าเราพบหรือเจอการทำงานที่ผิดพลาด จากสิ่งที่ควรจะเป็นเราก็ต้องแจ้งทาง Developer เพื่อทำการแก้ไข สิ่งที่ผิดนั้นสะก่อนที่ผู้ใช้อย่าเราๆ จะมาใช้  ก็เหมือนกับที่เราใช้ program ทั่วๆไป นั่นเอง เช่น ถ้าเราสั่งสินค้า online ก็จะมีการคำนวนเงินที่เราจะต้องจ่ายว่าเท่าไหร่ ถ้าไม่มีการทดสอบระบบมาก่อน ก็มีโอกาสที่การคิดเงินอาจจะคำนวนผิดพลาดได้ เป็นต้น