มีกลิ่นเหมือนคำถามการบ้าน
จำเป็นต้องทำการทดสอบในสาขาซอฟต์แวร์หรือไม่?
ใช่. อย่างแน่นอน ในทุกระดับ นอกเหนือจากโดเมนพิเศษบางอย่างเรายังไม่อยู่ในขั้นตอนที่เราสามารถพิสูจน์ได้ว่ารหัสของเราถูกต้องกับข้อผิดพลาดที่เฉพาะเจาะจง (อย่างน้อยไม่ได้อยู่ในกรอบเวลาที่สมเหตุสมผล) ดังนั้นเราจึงต้องขว้างก้อนหินเพื่อดูว่าและ มันอยู่ที่ไหน
ถ้าเราสร้างซอฟต์แวร์ด้วยความระมัดระวังเราจะทดสอบทำไม
การทดสอบไม่เพียงเกี่ยวกับการค้นหาข้อผิดพลาดในการเขียนโค้ด นอกจากนี้ยังเกี่ยวกับการตรวจสอบให้แน่ใจว่าคุณได้ปฏิบัติตามข้อกำหนดทั้งหมดของคุณแล้วและระบบโดยรวมทำงานได้ตามที่คาดหวัง หากฉันมีข้อกำหนดว่าการทำธุรกรรมที่ล้มเหลวจะต้องส่งคืนรหัสข้อผิดพลาดเฉพาะดังนั้นฉันต้องเขียนการทดสอบเพื่อตรวจสอบว่ามีฟังก์ชันการทำงานอยู่และทำงานได้อย่างถูกต้อง
และทุกอย่างที่สันนิษฐานว่าสเปคและการออกแบบนั้นสมบูรณ์ถูกต้องและสอดคล้องกันภายในซึ่งมักไม่เป็นเช่นนั้น แม้ว่าคุณจะทำตามข้อกำหนดของจดหมายและทำตามการออกแบบจนถึงจุดสุดท้ายและเครื่องหมายอัฒภาคหากข้อมูลจำเพาะหรือการออกแบบไม่ดีแล้วก็จะมีปัญหาในเวลารวม บ่อยครั้งที่การทดสอบระบบหรือการรวมเข้าด้วยกันคือเมื่อคุณพบว่าสเปคนั้นมีข้อผิดพลาดและจำเป็นต้องได้รับการแก้ไข (ดูเรื่องสงครามด้านล่าง)
หลังจากการทดสอบเรามั่นใจได้หรือไม่ว่าเราบรรลุเป้าหมายนี้ (ผลิตภัณฑ์ / ซอฟต์แวร์ทำงานตามที่ตั้งใจ) เพราะเราทำการทดสอบเสร็จแล้ว? มันเป็นไปได้?
ไม่ไม่ถึง 100% เราไม่สามารถทดสอบอินพุตหรือพา ธ ของการดำเนินการที่เป็นไปได้ในการผสมใด ๆ ยกเว้นโค้ดที่ง่ายที่สุด เราไม่สามารถอธิบายถึงปัจจัยด้านสิ่งแวดล้อมทั้งหมดได้ เราไม่สามารถจินตนาการถึงโหมดความล้มเหลวที่เป็นไปได้ทั้งหมด
เราสามารถทดสอบไปยังจุดที่เราเป็นเหตุผลที่ว่าไม่มีปัญหาใหญ่ ๆ นี่คือสาเหตุที่เราต้องทำการทดสอบทุกระดับ เขียนชุดการทดสอบเพื่อให้แน่ใจว่าโค้ดของคุณจัดการกับเงื่อนไขขอบอย่างถูกต้อง (อินพุตไม่ถูกต้อง, ผลลัพธ์ที่ไม่คาดคิด, ข้อยกเว้น, ฯลฯ ) การทดสอบหน่วยเพื่อตรวจสอบว่ารหัสของคุณตรงตามข้อกำหนด การทดสอบระบบเพื่อตรวจสอบการประมวลผลแบบ end-to-end รวมการทดสอบเพื่อตรวจสอบว่าส่วนประกอบทั้งหมดพูดคุยกันอย่างถูกต้อง ทำการทดสอบการใช้งานเพื่อให้แน่ใจว่าทุกอย่างใช้งานได้ในลักษณะที่ลูกค้าไม่ต้องการยิงคุณ
สถานการณ์ในโลกแห่งความเป็นจริง - ฉันทำงานกับระบบแบ็คเอนด์ที่ส่งการอัปเดตไปยังบริการ GUI เพื่อแสดงในตารางบนหน้าจอเป็นครั้งคราว ในระหว่างโครงการมีการเพิ่มข้อกำหนดเพื่อเพิ่มการกรองไปยังจอแสดงผล (เช่นผู้ประกอบการสามารถเลือกที่จะแสดงชุดย่อยของรายการในตาราง) ความผิดพลาดในการออกแบบ # 1 - การกรองควรทำโดยบริการ GUI (ฉันมีความคิดที่แปลกประหลาดนี้, ความคิดโบราณวัตถุที่ฟังก์ชั่นการจัดการการแสดงผลควรเป็นความรับผิดชอบของซอฟต์แวร์การจัดการการแสดงผล) แต่เนื่องจากการเมืองและการไร้ความสามารถของฉันปัญหาความต้องการนั้นถูกวางไว้ในบริการแบ็คเอนด์ เอาล่ะไม่มีปัญหาฉันทำได้ กรองการเปลี่ยนแปลงสถานะฉันได้รับข้อความจากนั้นฉันจะส่งสร้างหรือลบข้อความแต่ละแถวในตารางนั้นเป็นวิธีที่อินเทอร์เฟซใช้งานได้ (การออกแบบที่ผิดพลาด # 2 - ไม่มีวิธีส่งอัปเดตไปยังหลายแถวในข้อความเดียวเราไม่สามารถแม้แต่ส่ง "ชัดเจน" หรือ "ลบ" ข้อความเดียวเพื่อล้าง ตารางทั้งหมด)
ทุกอย่างทำงานได้ดีในระหว่างการพัฒนา การทดสอบหน่วยระบบและการรวมระบบแสดงว่าฉันส่งข้อมูลที่ถูกต้องและจัดการกับการเปลี่ยนแปลงตัวกรองอย่างถูกต้อง จากนั้นเราจะทำการทดสอบการใช้งานและสิ่งทั้งหมดล้มลงอย่างหนักเพราะปริมาณข้อมูลที่ท่วมท้น เวลาแฝงของเครือข่ายระหว่างบริการแบ็กเอนด์ของฉันและ GUI อยู่ในลำดับ 0.15 ถึง. 25 วินาที ไม่เลวเลยถ้าคุณต้องส่งการอัพเดตสำหรับแถวโหลหรือมากกว่านั้น ถึงตายเมื่อคุณต้องส่งอัปเดตหลายร้อยรายการ เราเริ่มได้รับรายงานข้อผิดพลาดว่า GUI ถูกหยุดลงหลังจากเปลี่ยนสถานะตัวกรอง ดีไม่มีสิ่งที่เกิดขึ้นคือมันใช้เวลาหลายนาที เพื่ออัปเดตจอแสดงผลเนื่องจากโพรโทคอลข้อความที่มีการอัพเดทกระดูกหัวแถวต่อครั้งต่อครั้งไม่สามารถจัดการกับสถานการณ์จริงได้
โปรดทราบว่าสิ่งเหล่านี้อาจมีและควรได้รับการคาดหวังจากทุกคนจากผู้รับเหมาชั้นนำจนถึงแก่ฉันเล็กน้อยหากเราใส่ใจที่จะทำแม้แต่การวิเคราะห์ขั้นพื้นฐานที่สุดล่วงหน้า การป้องกันเพียงอย่างเดียวที่ฉันจะเสนอคือเรากำลังจะปิดโครงการปีที่สองของโครงการหกเดือนที่จะถูกส่งคืนเกือบจะทันทีหลังจากส่งมอบและเราทุกคนก็หมดหวังที่จะเห็นด้านหลังของมัน
ซึ่งนำเราไปสู่เหตุผลสุดท้ายในการทดสอบ - CYA โครงการในโลกแห่งความจริงล้มเหลวด้วยเหตุผลหลายประการหลายโครงการเป็นเรื่องทางการเมืองและไม่ใช่ทุกคนที่กระทำโดยสุจริตเมื่อสิ่งต่าง ๆ ผิดพลาด นิ้วชี้ไปที่ข้อกล่าวหาและในตอนท้ายของวันคุณต้องสามารถชี้ไปที่บันทึกแสดงว่าอย่างน้อยสิ่งของของคุณก็ทำงานได้ตามที่ควรจะเป็น
If we create a software with care in during its development period then why should we go for Test?
- เพราะไม่ว่าอะไรก็ตามแม้แต่โปรแกรมเมอร์ที่เก่งที่สุดก็ทำผิดพลาด