# การทดสอบซอฟต์แวร์
การทดสอบซอฟต์แวร์  เป็นกระบวนการเพื่อช่วยให้ซอฟต์แวร์ที่พัฒนามี ความถูกต้อง, ความสมบูรณ์, ปลอดภัย, และมีคุณภาพที่ดี

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

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

 ภาพรวม 
การทดสอบไม่สามารถขจัดข้อบกพร่องภายในซอฟต์แวร์ได้ทั้งหมดอย่างสมบูรณ์ ต้องจัดให้มี การประเมินผล หรือการเปรียบเทียบสถานะและ พฤติกรรมของผลิตภัณฑ์ที่เกี่ยวข้องกับทฤษฎีโอราเคล หรือกลไก โดยบางชนิดที่สามารถยอมรับปัญหา โอราเคลสามารถรวมอยู่(แต่ไม่มีข้อจำกัด) คุณสมบัติ, ข้อตกลง, ข้อเปรียบเทียบผลิตภัณฑ์ ส่วนของเวอร์ชันของผลิตภัณฑ์เดียวกัน, ข้อสรุปเรื่องการวางแผน หรือตามวัตถุประสงค์ที่คาดหวัง มาตรฐานที่คาดหวังจากผู้ใช้คนสุดท้ายหรือลูกค้า, เข้าใจประเด็น, สามารถปรับใช้กับกฎหมาย, หรือกฎเกณฑ์อื่นๆ ทุกๆ ผลิตภัณฑ์ซอฟต์แวร์มีผู้เข้าร่วมประชุมเพื่อหาจุดมุ่งหมายร่วมกัน ตัวอย่างเช่น ประชุมร่วมสำหรับ ระบบวิดีโอเกม ความสมบูรณ์ต่างจาก ระบบธุรกรรมผ่านธนาคาร เพราะฉะนั้น เมื่อการพัฒนาองค์กรหรือมิฉะนั้น การลงทุนผลิตภัณฑ์ซอฟต์แวร์ สามารถประเมินมูลค่า หรือผู้ใช้สามารถยอมรับได้ในผลิตภัณฑ์ที่ซอฟต์แวร์ กลุ่มผู้ฟังที่เป็นเป้าหมาย, ผู้ซื้อ และผู้มีส่วนร่วมอื่นๆ การทดสอบซอฟต์แวร์ คือกระบวนการ การพยายามทำการประเมินราคา การจัดการศึกษาโดยหน่วยงานด้านมาตรฐาน และกฎระเบียบทางเทคนิคของสหรัฐฯ ในปี 2002 รายงานว่า ซอฟต์แวร์การหาข้อบกพร่องมีต้นทุน ในสหรัฐฯ สามารถทำรายได้ถึง 59.5 ล้าน ดอลลาร์สหรัฐ ในทุกๆปี มากกว่าอันดับสามของต้นทุนถ้าสามารถหลีกเลี่ยง ถ้าทำการทดสอบซอฟต์แวร์

 ประวัติ 
ในการแยกของการหาข้อบกพร่องจากการทดสอบ ในขั้นต้น แนะนำโดย Glenford J. Myers ในปี 1979 ถึงแม้นว่าเป็นการตัดสินใจมีการทดสอบน่าเสียหาย (การทดสอบเป็นหนึ่งในการค้นหาข้อบกพร่อง) มีภาพประกอบการออกแบบจากสมาคมวิศวกรรมซอฟต์แวร์ เป็นพื้นฐานการพัฒนากิจกรรม เช่น การหาข้อบกพร่อง, จากการทวนสอบ, ของการตรวจสอบความถูกต้องตามที่ออกแบบไว้ Dave Gelperin และ William C. Hetzel กำหนดใน ปี 1988 และเป้าหมายในการทดสอบซอฟต์แวร์ ตามลำดับต่อไปนี้
                     ก่อน  1956    – การตรวจสอบข้อบกพร่อง
                     1957 - 1978 – การสาธิต
                     1979 - 1982 – การทำลาย
                     1983 - 1987 – การประเมินผล
                     1988 - 2000 – การป้องกัน

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

คุณภาพของซอฟต์แวร์ที่สามารถทดสอบได้ ได้แก่
 reliability - ความน่าเชื่อถือ
 efficiency - ประสิทธิภาพ
 portability - ความสามารถในการเคลื่อนย้าย
 maintainability - ความสามารถในการดูแลรักษา
 compatibility - ความสามารถเข้ากันได้
 usability - สามารถใช้ได้ง่ายเข้าใจได้ง่าย

 รูปแบบการทดสอบ 
 Unit test - เป็นการทดสอบในระดับ function call เพื่อเป็นการยืนยันการทำงานระดับย่อยที่สุดว่าทำงานได้ถูกต้อง เป็นการทดสอบโดยนักเขียนโปรแกรมผู้เขียนโค๊ด
 Integration test - เป็นการทดสอบการเชื่อมต่อส่วนย่อยๆ(Component หรือ Module)ที่นำมาประกอบกัน ให้ได้ซอฟต์แวร์ที่สมบูรณ์
 System test - เป็นการทดสอบการเชื่อมต่อหรือติดต่อสื่อสารกันระหว่างซอฟต์แวร์ หรือระบบอื่นๆ
 Acceptant test - เป็นการทดสอบโดยผู้ใช้ (End user) หรือโดยลูกค้า เพื่อดูว่าซอฟต์แวร์ทำงานถูกต้องตามต้องการหรือไม่
 Usability test - เป็นการทดสอบการใช้งานซอฟต์แวร์โดยผู้เชียวชาญส่วนติดต่อผู้ใช้ ว่าใช้งานได้ง่าย เข้าใจได้ง่าย หรือไม่

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

 การทดสอบซอฟต์แวร์ หัวข้อ 

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

ข้อบกพร่อง และความผิดพลาด
 ความสามารถเข้ากันได้ 
 การรวมข้อมูล และเงื่อนไขก่อนการทดสอบ 
 เปรียบเทียวบการทดสอบแบบคงที่ และแปรผัน 

 การตรวจสอบและยืนยันความถูกต้องของระบบ 
 ทีมการทดสอบระบบ 
 วิธีการทดสอบ 
 กระบวนการทดสอบ 
 การค้นหาข้อผิดพลาด 
 เอกสารรับรอง 
 ข้อถกเถียง 
 ดูเพิ่มเติมที่ 
 อ้างอิง 
 เชื่อมโยงภายนอก