Robustness กับการแข่งขัน Correctness [ปิด]


17

การอ่าน "รหัสสมบูรณ์ 2" ในย่อหน้าข้อกำหนดคุณภาพฉันพบสิ่งนี้:

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

(นี่คือจุดของรายการช่องทำเครื่องหมายขนาดใหญ่เพื่อตรวจสอบคุณภาพของข้อกำหนด)

ดังนั้นฉันจึงพบคำจำกัดความของความทนทานและความถูกต้องจำนวนมากในเว็บหนังสือวิชาการ ฯลฯ

เช่น :

ในหนังสือ "Object Oriented Software Construction, 2nd Edition, Bertrand Meyer, Prentice-Hall, 1997" หนังสือ:

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

อย่างไรก็ตามเรื่องนี้ยังไม่ชัดเจนว่าทำไมและในสถานการณ์ทั้งสองนี้อาจขัดแย้งกัน

คำถามของฉันคือทำไมคุณสมบัติทั้งสองนี้ในการแข่งขัน ?


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

ฉันไม่ได้ตระหนักถึงคำจำกัดความของ "ประสิทธิภาพ" นอกเหนือจาก "จัดการอินพุตทุกประเภทที่ไม่คาดคิดอย่างสง่างาม" (นอกเหนือจากอินพุตที่จำเป็นในการใช้งาน)
Kaz

ฉันได้แก้ไขคำถามของฉันพยายามที่จะชัดเจนที่สุดเท่าที่จะเป็นไปได้เพื่อให้สามารถเปิดได้อีกครั้ง
ชนะ

คำตอบ:


36

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


17

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

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

เพื่อกลับไปเป็นตัวอย่างที่แม่นยำของคุณและดูคำจำกัดความของคำศัพท์robustnessใน Wikipedia:

ในด้านวิทยาศาสตร์คอมพิวเตอร์ความทนทานคือความสามารถของระบบคอมพิวเตอร์ที่จะรับมือกับข้อผิดพลาดระหว่างการดำเนินการ [1] [2] และรับมือกับการป้อนข้อมูลที่ผิดพลาด

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

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

หากต้องการนำทุกสิ่งมาไว้ในหนังสือของคุณ: อะไรคือการแลกเปลี่ยนที่ยอมรับได้ในตอนนี้? สมมติว่าคุณเขียนแอปพลิเคชันทางวิทยาศาสตร์ที่ผู้ใช้สามารถป้อนปริมาณแรงดันไฟฟ้ารวมถึงขนาด ดังนั้นอินพุตที่ถูกต้องน่าจะเป็น "10 kV" หรือ "200 mV" การแลกเปลี่ยนที่ยอมรับได้อาจรวมถึงการอนุญาตอินพุตเช่น "10kV", "10kVolt" หรือแม้แต่เพียงแค่ "10" และเพื่อความถูกต้องของแผนที่เหล่านี้กับค่าแรงดันไฟฟ้าที่ถูกต้อง โปรดทราบว่านี่ยังเป็นการแลกเปลี่ยนและไม่ใช่สิ่งที่ "ดีที่สุดของทั้งสองโลก" พิจารณาตัวพิมพ์เล็กและตัวพิมพ์เล็ก: "10 kV" และ "10 KV" อาจจะใช้ได้ แต่ "10 mV" และ "10 MV" อาจไม่เป็นเช่นนั้น ความถูกต้องจะกลายเป็นที่น่าสงสัยในขณะที่คุณไม่แน่ใจว่ามันเป็นพันล้านหรือในขณะนี้


5

เป็นตัวอย่างในทางปฏิบัติเป็นXHTMLเทียบกับHTML

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

ดังนั้น XHTML มีจุดมุ่งหมายเพื่อความถูกต้องในขณะที่ HTML มีจุดมุ่งหมายเพื่อความทนทาน ปัจจุบัน HTML ดูเหมือนจะเป็นที่นิยมมากขึ้น แต่ทั้งสองฝ่ายมีข้อโต้แย้งที่ดี

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