เคยตกลงที่จะไม่ทดสอบคุณสมบัติหรือไม่?


12

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

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

นอกจากนี้สมมติว่าทุกอย่างมีการสำรองข้อมูลดังนั้นกรณีที่เลวร้ายที่สุดข้อมูลอาจถูกกู้คืนด้วยความพยายาม

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

คำตอบ:


10

ฉันต้องการเริ่มต้นด้วยการพูดทุกอย่างที่ฉันทำคือ SQL Server ดังนั้นนี่คือตัวอย่างที่ฉันให้ โดยทั่วไปอย่างไรก็ตามสิ่งนี้ใช้กับรหัสรูปแบบใด ๆ โดยไม่คำนึงถึงระบบ

มาเริ่มกันที่การทำลายอันนี้กันหน่อย

อัพเกรด

คุณมีระบบและกำลังจะอัพเกรดบางส่วนหรือทั้งหมด ตัวอย่างเช่นการอัพเกรดอินสแตนซ์จาก SQL Server 2012 เป็น 2014 ณ จุดนี้การทดสอบเป็นสิ่งจำเป็น น่าเสียดายที่การทดสอบทุกส่วนของแอปพลิเคชั่นขนาดเล็กอาจไม่สามารถทำได้ ณ จุดนี้ฉันจะทำสิ่งที่ฉันจะเรียกว่าการทดสอบ "ทำงาน" เป็นระบบพื้นฐานที่ใช้งานได้ วิ่งผ่านงานทั่วไปของคุณเริ่มต้นให้เสร็จ อย่าทดสอบทุกตัวเลือกเพียงแค่เส้นทางหลัก

เมื่อทำการอัพเกรด SQL Server นอกจากนี้ยังมีบางส่วนที่ต้องอ่าน โดยทั่วไปคุณต้องการอ่านBackward Compatibilityรายการสำหรับเวอร์ชั่นใหม่ ( นี่คือ 2014 ) และตรวจสอบให้แน่ใจว่าคุณไม่มีอะไรในรายการใด ๆ (ทำลายการเปลี่ยนแปลงการเปลี่ยนแปลงพฤติกรรม ฯลฯ )

รหัสแอปพลิเคชัน

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

หนึ่งในสิ่งที่สามารถช่วยได้จริงๆคือสร้างชุดunit testsที่สามารถทำซ้ำได้อย่างง่ายดาย Steve Jones แนะนำให้ใช้tSQLtเพื่อทดสอบรหัส TSQL ของคุณ (SQL Server เท่านั้นที่ฉันกลัว) แต่ด้วยการทำเช่นนี้คุณสามารถเรียกใช้ชุดการทดสอบที่กำหนดตายตัวได้อย่างรวดเร็วและจะช่วยในการทดสอบการถดถอย (การทดสอบทุกอย่างก่อนที่จะทำการอัปเกรด)

คุณสมบัติ / การตั้งค่า

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

Ad hoc สอบถามที่อ้างอิง / ส่งผลกระทบต่อข้อมูลผู้ใช้

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

ตัวอย่างเช่นคุณต้องลบโฆษณาหนึ่งรายการขึ้นไปจากตาราง AdList ทุกไตรมาส

DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')

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

วิธีการหนึ่งที่ง่ายต่อการทดสอบDELETE, UPDATEหรือINSERTคือการเปลี่ยนพวกเขาที่จะเลือกและเรียกพวกเขาแล้วยืนยันว่าจำนวนและประเภทของแถวที่คุณคาดว่าจะถูกส่งกลับ

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

แบบสอบถามเฉพาะกิจที่อ้างอิง / ส่งผลกระทบต่อข้อมูลระบบ

นี่อาจเป็นข้อยกเว้นอย่างหนึ่งสำหรับกฎ "ทดสอบทุกอย่าง" คุณกำลังเรียกใช้แบบสอบถามข้อมูลในข้อมูลระบบ สิ่งสำคัญที่นี่คือการเรียกคืนข้อมูลที่คุณคาดหวัง หากการสืบค้นเป็นสิ่งที่เรียบง่าย (การสอบถามมุมมองระบบ) คุณอาจจะตกลงตราบใดที่คุณได้ตรวจสอบความหมายของมุมมอง / คอลัมน์จริงๆ หากแบบสอบถามมีความซับซ้อน (กล่าวว่าการกดปุ่มการดู 3 หรือ 4 ระบบพร้อมการคำนวณในคอลัมน์ที่ส่งคืน) จากนั้นคุณอาจต้องการทดสอบสองสามครั้งเพื่อให้แน่ใจว่าคุณจะได้รับข้อมูลที่คุณต้องการคืน

สรุป

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

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


4

ฉันรู้ว่าสิ่งที่คุณรู้สึกฉันมี 3 ปีที่ทำงานกับ MySQL และในกรณีของฉันฉันมักจะทดสอบแบบสอบถามDMLที่สามารถแก้ไขหรือทำลายข้อมูลใด ๆ ในทุกตาราง / ฐานข้อมูล / การจำลองแบบ Slave

เป็นวิธีที่ปลอดภัยที่สุดในการทดสอบข้อความค้นหาของคุณก่อนที่จะเรียกใช้

ไม่มีทางรู้ว่าแบบสอบถามของคุณสามารถทำให้ข้อมูลของคุณมีความเสี่ยง วิธีเดียวคือการรู้โครงสร้างฐานข้อมูลและการกำหนดค่าของคุณดังนั้นคุณสามารถระบุได้อย่างง่ายดายเมื่อแบบสอบถามหนึ่งสามารถทำให้ข้อมูลที่ละเอียดอ่อนของคุณตกอยู่ในความเสี่ยงหรือไม่

เมื่อวันที่DELETE, UPDATE, INSERTคุณควรพยายามที่จะใช้SELECTก่อนถ้าคุณไม่แน่ใจว่าข้อมูลที่คุณกำลังจะเปลี่ยน ในการเลือกให้พยายามใช้ชนิดข้อมูลเดียวกันสำหรับเงื่อนไขเช่นเดียวกับชนิดข้อมูลคอลัมน์ในบางกรณีใช้EXPLAINสำหรับการปรับให้เหมาะสม

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