เราต้องการข้อมูลการทดสอบหรือเราสามารถพึ่งพาการทดสอบหน่วยและการทดสอบด้วยตนเองได้หรือไม่?


10

ขณะนี้เรากำลังทำงานในโครงการ PHP / MySQL ขนาดกลาง / ใหญ่ เราทำการทดสอบหน่วยด้วย PHPUnit & QUnit และเรามีผู้ทดสอบเต็มเวลาสองคนที่ทำการทดสอบแอปพลิเคชันด้วยตนเอง ขณะนี้ข้อมูลการทดสอบ (จำลอง) ของเราสร้างขึ้นด้วยสคริปต์ SQL

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

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

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

คำตอบ:


4

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

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

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

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


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

@ christian.p ตรวจสอบการอัปเดตของฉันเกี่ยวกับการชี้แจงคำถามของคุณ
AJC

ดังนั้นทางออกของคุณคือการละทิ้งสคริปต์และเพียงเพิ่มข้อมูลทดสอบด้วยตนเองผ่าน UI หรือไม่ สิ่งที่เกี่ยวกับคำตอบที่ P.Brian.Mackey ให้ไว้และคำตอบของเขาในการเชื่อมต่อข้อมูลด้วย UI?
Christian P

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

ผู้ทดสอบทุกคนมีสภาพแวดล้อมการทดสอบของตนเองและผู้ทดสอบวางฐานข้อมูลอย่างสมบูรณ์วันละหลายครั้งดังนั้นจึงไม่สามารถเพิ่มข้อมูลทดสอบได้ด้วยตนเอง แต่เราสามารถขอให้พวกเขาเพิ่มข้อมูลสำหรับการทดสอบได้อย่างสุภาพ
Christian P

6

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

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

เริ่มทำ refactor ปรับปรุงให้เล็กเพื่อให้สามารถจัดการได้ มองหารูปแบบต่อต้านเช่นคลาส / วิธีการของพระเจ้าไม่ใช่ตาม DRY, ความรับผิดชอบเดี่ยว ฯลฯ ...

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

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


ฉันต้องอธิบายให้กระจ่างเล็กน้อย: "การเปลี่ยนแปลงข้อมูลทดสอบอย่างง่ายทำให้เกิดข้อบกพร่อง" - ปัญหาที่นี่ไม่ได้อยู่ในแอปพลิเคชัน - แอปทำงานได้ดีเมื่อข้อมูลถูกต้อง (และคุณไม่สามารถเพิ่มข้อมูลที่ไม่ถูกต้องด้วยตนเอง) . ปัญหาที่นี่คือข้อมูลทดสอบที่ไม่ถูกต้องสามารถสร้างข้อผิดพลาดเมื่อพยายามทำงานกับข้อมูลนั้น ดังนั้นเราต้องทดสอบข้อมูลการทดสอบด้วยหรือไม่
Christian P

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

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

"ฉันไม่เห็นจุดของการบำรุงรักษาข้อมูลการทดสอบในสคริปต์" <- การสนับสนุนการทดสอบลดลงคือสิ่งที่ฉันพูด ไม่ลบการทดสอบเก่า มันเป็นความคิดที่ไม่ดี คุณกำลังลดการทำซ้ำและรวมตัวกับ UI ที่เป็นส่วนหนึ่งของสิ่งที่คุณพยายามทดสอบและสามารถปรับให้เข้ากับการเปลี่ยนแปลง ปลดปล่อยตัวคุณเองจาก UI เก็บข้อมูลอัตโนมัติ
P.Brian.Mackey

แต่เราจะแก้ไขปัญหาข้อมูลจำลองที่ไม่ถูกต้องได้อย่างไร หากเรายังคงสร้างข้อมูลจำลองสำหรับฐานข้อมูลเราจะตรวจสอบว่าข้อมูลจำลองนั้นใช้ได้หรือไม่? หากกฎธุรกิจต้องการค่านั้น X = 2 และฐานข้อมูลยอมรับ X = 100 - เราจะตรวจสอบความสมบูรณ์ของข้อมูลทดสอบได้อย่างไรเมื่อกฎธุรกิจซับซ้อน
Christian P

1

นี่เป็นปัญหาที่พบได้บ่อยและยากมากเช่นกัน การทดสอบแบบอัตโนมัติที่ทำงานกับ databse (แม้ฐานข้อมูลในหน่วยความจำเช่นHSQLDB ) มักจะช้าไม่ใช่กำหนดและเนื่องจากความล้มเหลวในการทดสอบเพียงแสดงให้เห็นว่ามีปัญหาอยู่ที่ไหนสักแห่งในรหัสของคุณหรือในข้อมูลที่คุณพวกเขาจะ ไม่มีข้อมูลมากนัก

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.