ทำไมโปรแกรมเมอร์ต้องทดสอบ?

สองสามระดับถัดไปจะเป็นการทดสอบในแบบที่โปรแกรมเมอร์ต้องการ แต่ก่อนอื่น มาดูกันว่าการทดสอบคืออะไรและเหตุใดจึงจำเป็น

สำหรับซอฟต์แวร์ เราสามารถพูดได้ว่างานของการทดสอบคือการตรวจสอบว่าโปรแกรม:

  • ทำในสิ่งที่เธอต้องทำ
  • ไม่ทำในสิ่งที่เธอไม่ควรทำ

ประเด็นที่สองนั้นมีความสำคัญไม่น้อยไปกว่าประเด็นแรก แต่จะเพิ่มเติมในภายหลัง

เริ่มกันที่ข้อแรก "โปรแกรมทำในสิ่งที่ควรทำ" หมายความว่าอย่างไร

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

ทันทีที่เราเขียนว่า "ผู้ใช้ควรปฏิบัติตนอย่างไร" ความคิดทั้งหมดในการเขียนเอกสารที่ดีก็พังทลาย คนไม่ใช่เครื่องจักร ยิ่งกว่านั้นผู้คนมักจะทำงานกับซอฟต์แวร์ตามที่พวกเขาต้องการ ไม่มีใครเริ่มทำความรู้จักกับเทคโนโลยีด้วยการศึกษาคำแนะนำ มันคือข้อเท็จจริง.

ดังนั้นเราจึงได้ข้อเท็จจริงใหม่: ลักษณะเฉพาะของซอฟต์แวร์คือมีสถานการณ์การทำงานที่แตกต่างกันมากมาย บางอย่างชัดเจน บางอย่างบันทึกไว้ได้ บางอย่างสันนิษฐานได้ บางอย่างเดาได้ และอีก 50% จะไม่เกิดขึ้นกับคุณด้วยซ้ำ

จากมุมมองของโปรแกรมเมอร์ ข้อบกพร่องส่วนใหญ่ไม่ใช่ข้อบกพร่องเลย ข้อผิดพลาดคือเมื่อโปรแกรมไม่ทำงานตามที่ควรหรือตามที่คาดไว้ และมีหลายสถานการณ์ที่ไม่ชัดเจนว่าโปรแกรมควรทำงานอย่างไรหรือสถานการณ์ที่ขัดแย้งกัน ...

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

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

แต่กลับไปที่ข้อผิดพลาดที่ทุกคนรับรู้ว่าเป็นข้อผิดพลาด: โปรแกรมทำอะไรผิดพลาดอย่างเห็นได้ชัด ตกลง ทำลายบางอย่าง ฯลฯ ข้อผิดพลาดดังกล่าวสามารถแบ่งออกเป็น 3 ประเภทตามเงื่อนไข: ใหญ่ กลาง และเล็ก

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

ดังนั้นในโครงการใด ๆ ควรมีผู้ทดสอบ คนเหล่านี้เรียนรู้ที่จะมองผลิตภัณฑ์จากมุมต่างๆ คุณจึงเห็นสถานการณ์ต่างๆ ของโปรแกรมได้มากขึ้น งานของพวกเขาคือค้นหาข้อผิดพลาดและจดไว้ (เพื่อไม่ให้พบข้อผิดพลาดเดียวกันหลาย ๆ ครั้ง)

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

โปรดจำไว้ว่าขั้นตอนแรกในการแก้ปัญหาคือการยอมรับว่ามีปัญหา คุณไม่สามารถแก้ไขข้อผิดพลาดที่คุณไม่รู้

ทดสอบระบบอัตโนมัติ

ฉันคิดว่าเราทุกคนเห็นพ้องต้องกันว่าการทดสอบมีความสำคัญ ดังนั้น มาดูการทดสอบเหมือนโปรแกรมเมอร์กันเถอะ โปรแกรมเมอร์มองการทดสอบอย่างไร? โปรแกรมเมอร์ทำให้งานของผู้อื่นเป็นไปโดยอัตโนมัติ อาชีพสุดท้ายที่จะหายไปคืออาชีพการเขียนโปรแกรม

เราทำทุกกระบวนการที่พบโดยอัตโนมัติ การทดสอบจึงต้องเป็นแบบอัตโนมัติ และจะทำให้การค้นหาข้อผิดพลาดเป็นไปโดยอัตโนมัติได้อย่างไร? คำตอบสั้น ๆ : ไม่ แต่ที่นี่อีกครั้งความจริงที่ว่าเราเป็นโปรแกรมเมอร์มาช่วยเรา

กระบวนการพัฒนาซอฟต์แวร์ประกอบด้วยการเปลี่ยนแปลงอย่างต่อเนื่อง ในกระบวนการของการเปลี่ยนแปลงอย่างต่อเนื่องโปรแกรมเมอร์มักจะทำลายสิ่งที่ทำงานได้ดีจนกระทั่งเมื่อไม่นานมานี้

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

ที่นี่ซอฟต์แวร์ทั้งหมดสามารถแบ่งออกเป็นสองส่วน:

  • โปรแกรมโต้ตอบกับบุคคล
  • โปรแกรมโต้ตอบกับโปรแกรมอื่น

ตัวเลือกแรกทำให้เป็นอัตโนมัติได้ยากขึ้น ต้องใช้ผู้ทดสอบอัตโนมัติพิเศษ ซึ่งเรียกอีกอย่างว่า QA Automation หรือ Software Test Engineer

แต่ตัวเลือกที่สองสามารถและควรเป็นแบบอัตโนมัติโดยอิสระ หากคุณมีซอฟต์แวร์ที่:

  • ทำได้ดี
  • ทดสอบแล้ว
  • นำมาใช้เป็นโมดูลแยกต่างหากหรือบล็อกแบบลอจิคัล
  • ไม่ได้วางแผนที่จะเปลี่ยนแปลง
  • โมดูลหรือโปรแกรมอื่นขึ้นอยู่กับมัน
  • การทำงานล้มเหลวมีค่าใช้จ่ายสูง

ฉันขอแนะนำให้สละเวลาเขียนการทดสอบเพื่อจับประเด็นสำคัญๆ ของฟังก์ชันการทำงานปัจจุบัน คุณควร จัดสรรเวลาทำงานของคุณ 5%สำหรับสิ่งนี้หรือ 1 วันต่อเดือน

ไม่จำเป็นต้องเขียนการทดสอบเพื่อประโยชน์ในการทดสอบ

จะไม่มีใครสนับสนุนการทดสอบของคุณ ไม่ใช่โปรแกรมเมอร์คนอื่น ไม่ใช่ตัวคุณเอง ไม่มีใครทำอย่างนั้น 99% ของการทดสอบข้อเขียนทั้งหมดถูกละทิ้งและ/หรือปิดใช้งาน หากคุณไม่สามารถเขียนแบบทดสอบได้ - อย่าเขียน เขียนเฉพาะในกรณีที่คุณไม่สามารถทำได้หากไม่มีพวกเขา

ประเภทของการทดสอบ

โปรแกรมเมอร์แต่ละคนหากไม่ได้รับการฝึกอบรมพิเศษ จะสามารถบอกได้ด้วยคำพูดของเขาเองว่าการทดสอบคืออะไร: การตรวจสอบว่าโปรแกรมทำในสิ่งที่ควรทำหรือไม่ อย่างไรก็ตามผู้เชี่ยวชาญในสาขานี้แยกแยะการทดสอบ (ประเภท) ทั้งหมด

การทดสอบทั้งหมดเกี่ยวข้องกับความน่าเชื่อถือและความพร้อมใช้งานของซอฟต์แวร์ แต่เพื่อให้เข้าใจทิศทางของการทดสอบได้ดียิ่งขึ้น เรามาดูตัวอย่างบางส่วนกัน

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

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

เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น คุณต้องระบุปัญหาดังกล่าวล่วงหน้าและดำเนินการเพื่อกำจัดปัญหาเหล่านั้น ทำได้โดยใช้การทดสอบโหลดหรือเรียกอีกอย่างว่าการทดสอบประสิทธิภาพ

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

ร้านค้าออนไลน์ของคุณมักจะรวมเข้ากับบริการของบุคคลที่สาม: การส่งจดหมายและ SMS, ระบบการชำระเงิน, แชทสนับสนุนออนไลน์, รวบรวมข้อเสนอแนะจากผู้ใช้, ระบบโฆษณา ฯลฯ เพื่อให้แน่ใจว่าทั้งหมดนี้ใช้งานได้ตามที่ต้องการ คุณต้องทดสอบการรวมระบบ .

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

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

การทดสอบอาจมีหลายประเภท: ยิ่งผลิตภัณฑ์มีความซับซ้อนมากเท่าใด การพัฒนาก็ยิ่งต้องควบคุมมากขึ้นเท่านั้น