การจัดการข้อผิดพลาด - หากโปรแกรมล้มเหลวจากข้อผิดพลาดหรือเพิกเฉยต่อความเงียบ


20

ฉันกำลังเขียนโปรแกรมเล็ก ๆ ที่เรียบง่ายเพื่อส่ง MIDI ผ่านเครือข่าย ฉันรู้ว่าโปรแกรมจะพบปัญหาการส่งและ / หรือสถานการณ์ข้อยกเว้นอื่น ๆ ที่ฉันไม่สามารถทำนายได้

สำหรับการจัดการข้อยกเว้นฉันเห็นสองวิธี ฉันควรเขียนโปรแกรมเพื่อที่:

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

ผู้ใช้คาดว่าจะใช้วิธีการใดอย่างสมเหตุสมผล
มีวิธีที่ดีกว่าในการจัดการข้อยกเว้นหรือไม่

นอกจากนี้การตัดสินใจเกี่ยวกับการจัดการข้อยกเว้นของฉันควรได้รับผลกระทบจากการที่ฉันกำลังเผชิญกับการเชื่อมต่อเครือข่ายหรือไม่



มีวิธีในการแก้ไข +1 หรือไม่ ;) โอ้เดี๋ยวก่อนฉันติดตามคุณ แน่นอนว่าจะทำ :)
Arlen Beiler

2
"ผู้ใช้คาดหวังว่าจะใช้วิธีใดอย่างเหมาะสม" คุณลองถามหนึ่งในผู้ใช้ของคุณ? การทดสอบการใช้งานในห้องโถงนั้นมีประสิทธิภาพอย่างน่าทึ่ง ดูblog.openhallway.com/?p=146
Bryan Oakley

ฉันไม่ได้มีผู้ใช้ใด ๆ :)
อาร์เลน Beiler

คำตอบ:


34

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

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


18
ไม่เพียงพอที่จะรับประกัน -1 แต่ "ไม่เคย" เป็นคำที่แข็งแกร่งและมีสถานการณ์ที่การละเลยข้อผิดพลาดเป็นแนวทางที่ถูกต้อง ตัวอย่างเช่นซอฟต์แวร์ที่ถอดรหัสการถ่ายทอดสัญญาณ HDTV เมื่อคุณพบข้อผิดพลาดที่คุณมักจะทำสิ่งที่คุณสามารถทำได้คือการเพิกเฉยและถอดรหัสสิ่งที่เกิดขึ้นหลังจากนั้น
whatsisname

1
@whatsisname: จริง แต่คุณควรบันทึกไว้อย่างชัดเจนว่าทำไมคุณถึงเพิกเฉย อัปเดตคำตอบเพื่อพิจารณาความคิดเห็นของคุณ
marco-fiset

1
@ marco-fiset ฉันไม่เห็นด้วย การขัดจังหวะโปรแกรมทั้งหมดเป็นเพียงวิธีแก้ปัญหาหากเป็นสถานการณ์ที่การรีสตาร์ทจะช่วยแก้ไขปัญหาได้ นี่ไม่ใช่กรณีเสมอดังนั้นการล้มมันมักจะไม่มีจุดหมายและการผิดนัดที่พฤติกรรมนั้นเป็นเรื่องธรรมดา ทำไมคุณต้องการระงับการทำงานทั้งหมดของคุณเนื่องจากข้อผิดพลาดที่แปลเป็นภาษาท้องถิ่น? ไม่สมเหตุสมผลเลย แอปพลิเคชั่นส่วนใหญ่ทำและด้วยเหตุผลบางประการโปรแกรมเมอร์ก็ใช้งานได้ดี
MaiaVictor

@ Dokkat: จุดคือการไม่ดำเนินการกับค่าที่ไม่ถูกต้องซึ่งจะให้ทางออกที่ผิด (ขยะในขยะออก) การขัดข้องจะแก้ไขปัญหา: บังคับให้ผู้ใช้ป้อนข้อมูลที่แตกต่างกันหรือรบกวนนักพัฒนาแก้ไขโปรแกรมของพวกเขา;)
AndréParamés

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

18

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

ในขณะที่มีข้อผิดพลาดเกิดขึ้นในที่สุดคุณจะพบข้อผิดพลาดบางอย่างที่ใหญ่จนคุณไม่สามารถเพิกเฉยได้เพราะมันจะประกอบด้วยสิ่งที่ผู้ใช้มอบให้และสิ่งนั้นจะผิดอย่างสมบูรณ์ จากนั้นคุณมีผู้ใช้ที่บ่นคุณเกี่ยวกับโปรแกรมของคุณไม่ทำงานและคุณต้องแก้ไข และถ้าส่วน "ให้บางอย่างแก่ผู้ใช้" อยู่ในขั้นตอนที่ 28 และคุณไม่รู้ว่าข้อผิดพลาดดั้งเดิมที่ทำให้เกิดความยุ่งเหยิงทั้งหมดนี้อยู่ในขั้นตอนที่ 3 เพราะคุณไม่สนใจข้อผิดพลาดในขั้นตอนที่ 3 คุณจะมี heck เวลา debugging ปัญหา!

ในทางกลับกันหากข้อผิดพลาดนั้นในขั้นตอนที่ 3 ทำให้ทุกอย่างเกิดขึ้นบนใบหน้าของผู้ใช้และสร้างข้อผิดพลาดที่บอกว่าSOMETHING WENT BADLY WRONG IN STEP 3!(หรือเทียบเท่าทางเทคนิคการติดตามสแต็ก) ผลลัพธ์ก็เหมือนกัน - ผู้ใช้บ่นคุณ โปรแกรมทำงานไม่ถูกต้อง - แต่คราวนี้คุณจะรู้ว่าการที่จะเริ่มมองหาเมื่อคุณไปที่จะแก้ไขได้

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


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

@Arlen: นั่นอาจเป็นความคิดที่ไม่ดี ข้อผิดพลาดเกิดขึ้นเพราะสิ่งที่เกิดขึ้นที่คุณไม่คาดคิดว่าเมื่อคุณได้รับการเข้ารหัสมัน ซึ่งหมายความว่าสมมติฐานทั้งหมดของคุณได้ออกไปนอกหน้าต่าง ตัวอย่างเช่น "ตำแหน่งที่ดีที่รู้จักกันดี" อาจไม่ดีอีกต่อไปหากคุณอยู่ระหว่างการปรับเปลี่ยนโครงสร้างข้อมูลบางส่วนและตอนนี้อยู่ในสถานะที่ไม่สอดคล้องกัน
Mason Wheeler

จะเกิดอะไรขึ้นถ้าฉันคาดหวังเช่นข้อความที่เสียหายป้องกันไม่ให้ดีซีเรียลไลเซชัน ในบางกรณีฉันได้ทำข้อยกเว้นต่อเนื่องและส่งกลับข้ามสาย ที่นั่นดูการแก้ไขคำถามของฉัน
Arlen Beiler

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

16

มีตัวเลือกอื่น ๆ ระหว่าง "ระเบิด" และ "ละเว้น"

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

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

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

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

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

ดูบทความการจัดการข้อยกเว้นที่ยอดเยี่ยมของ Eric Lippertสำหรับคำแนะนำเพิ่มเติมเกี่ยวกับการจัดหมวดหมู่และการจัดการข้อยกเว้น


1
คำตอบที่ดีที่สุดในความคิดของฉัน
วันพฤหัสบดีที่

6

นี่คือมุมมองของฉันสำหรับคำถาม:

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

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

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

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

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


6

คุณไม่ควรละเลยข้อผิดพลาดอย่างเงียบ ๆ และโดยเฉพาะอย่างยิ่งไม่ได้ค่าใช้จ่ายของความสมบูรณ์ของข้อมูล

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

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

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

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


คุณหมายถึงการใส่เครื่องหมายคำถามท้ายบรรทัดแรกหรือไม่?
CVn

@ MichaelKjörling: ไม่ผิดพลาดคัดลอกวาง (คัดลอกสูตรจากคำถามและรวมเครื่องหมายคำถามโดยไม่ได้ตั้งใจ)
Jan Hudec

4

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

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


1

ฉันไม่เชื่อว่าโปรแกรมควรเพิกเฉยหรือทำให้เกิดความเสียหายเมื่อใดก็ตามที่เกิดปัญหา

ฉันจะทำอย่างไรกับซอฟต์แวร์ภายในที่ฉันเขียนเพื่อ บริษัท ของฉัน ...

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

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

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

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

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


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

1

กลยุทธ์ของฉันคือการแยกแยะระหว่างข้อผิดพลาดในการเข้ารหัส (ข้อผิดพลาด) และข้อผิดพลาดรันไทม์และทำให้เกิดข้อผิดพลาดในการเขียนได้ยากมากที่สุด

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

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

สำหรับข้อผิดพลาดรันไทม์ที่อาจเกิดขึ้นกับรหัสที่ไม่มีบั๊กเช่นเครือข่ายหรือการสื่อสารแบบอนุกรมล้มเหลวหรือไฟล์ที่ขาดหายไปหรือเสียหาย:

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

0

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

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