ข้อกำหนดมีความเสถียรและเชื่อถือได้


20

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


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

ในใจของฉันพวกเขาต้มลงไปในสิ่งเดียวกันความมั่นคง ...
Darknight

ทำไมคุณถาม
JᴀʏMᴇᴇ

คำตอบ:


37

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

ว่าในใจของฉันมีความน่าเชื่อถือ แต่ไม่มั่นคง

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

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


2
Ian Somerville กำหนดความน่าเชื่อถือว่า "ความน่าจะเป็นของการดำเนินการที่ปราศจากความล้มเหลวตามเวลาที่กำหนดในสภาพแวดล้อมที่กำหนดสำหรับวัตถุประสงค์เฉพาะ" ในหนังสือวิศวกรรมซอฟต์แวร์ ดังนั้นระบบของคุณหยุดทำงานทุก 5 นาทีจึงไม่น่าเชื่อถือ (ขึ้นอยู่กับการวัดของคุณ)
m3th0dman

2
@ m3th0dman ขึ้นอยู่กับวิธีที่คุณกำหนดความล้มเหลวแล้ว ไม่มีการสูญเสียข้อมูลและความถูกต้องของข้อมูล 100% จะไม่ใช่ความล้มเหลวในหนังสือของฉันแม้ว่าแอปจะหยุดทำงานและเริ่มต้นใหม่เอง ฉันต้องการแก้ไขปัญหา แต่มันจะไม่สำคัญถ้ามัน 'ทำงาน'
CaffGeek

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

ฉันไม่คิดว่าแอพตัวอย่างนี้น่าเชื่อถืออย่างจริงจัง ความน่าเชื่อถือและความมั่นคงไม่จำเป็นต้องแยกจากกัน
Moshe Revah

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

24

คำจำกัดความเหล่านี้มาจากมาตรฐาน ISO 9126 ซึ่งแบ่งในลักษณะและคุณสมบัติย่อย: ตารางนี้PDFหรือวิกิพีเดียหรือบทความนี้

ความเสถียรคือ: แสดงถึงความไวต่อการเปลี่ยนแปลงของระบบที่กำหนดซึ่งเป็นผลกระทบด้านลบที่อาจเกิดจากการเปลี่ยนแปลงของระบบ

ความน่าเชื่อถือเป็นคุณสมบัติหลักที่ประกอบด้วย:

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

6

เป้าหมาย: เขียนโปรแกรมเพื่อเพิ่มตัวเลขสองตัว

เชื่อถือได้ แต่ไม่เสถียร:

add(a,b):
    if randomInt mod 5 == 0: 
        throw exception
    else
        print a+b

มีเสถียรภาพ แต่ไม่น่าเชื่อถือ:

add(a,b):
    if randomInt mod 5 == 0: 
        print a+a
    else
        print a+b

คำจำกัดความนี้ไม่ถูกต้อง ไม่ใช่วิธีการใช้ข้อกำหนดในอุตสาหกรรมจริง ๆ
Federico

2

ในบริบทของการประเมินห้องสมุดคำศัพท์มีความหมายต่างกันอย่างสิ้นเชิง

ไลบรารีที่เชื่อถือได้คือไลบรารีที่ทำงานได้โดยไม่ล้มเหลวเป็นระยะ ๆ

ไลบรารีที่มีเสถียรภาพคือไลบรารีที่ไม่เปลี่ยนแปลงมากนัก


ฉันประหลาดใจที่เห็นคำตอบมากมายที่ตีความว่ามีความเสถียรเนื่องจาก "ไม่ผิดพลาด" สำหรับฉันความหมายแรกคือ "ไม่มีการเปลี่ยนแปลงมากนักในบางครั้ง" มันไม่เคลื่อนไหวอีกต่อไป สิ่งที่ไม่หยุดทำงานอีกต่อไปอาจเป็นสิ่งที่มาพร้อมกับมัน แต่ความเสถียรไม่ได้เกี่ยวกับพฤติกรรมของซอฟต์แวร์เป็นหลัก
Martin Maat

0

ความเสถียรและความน่าเชื่อถือเป็นสิ่งที่แตกต่างกันในการพัฒนาซอฟต์แวร์อย่างไรก็ตามพวกเขาทั้งคู่ใช้เป็นคำศัพท์น้องสาว :)

ฉันเห็นด้วยกับความเห็นก่อนหน้านี้บางส่วนและต้องการเพิ่ม 2 เซนต์ของฉัน

ความน่าเชื่อถือคือขอบเขตของการทดลองทดสอบหรือขั้นตอนการวัดใด ๆ ที่ให้ผลลัพธ์แบบเดียวกันกับการทดลองซ้ำ

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

มีการอ้างอิงเพิ่มเติมในหัวข้อนี้:


0

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

ในทางกลับกันเสถียรภาพก็เป็นเพียงการวัดความพร้อมใช้งาน "ถ้าคุณพยายามเชื่อมต่อบริการของเราจะมีอย่างน้อย X% ของเวลา"


0

เชื่อถือได้แต่ไม่เสถียร :

add(a,b):
    if a == nil ||  b == nil: 
        throw exception
    else
        return (a+b)

มีเสถียรภาพแต่ไม่น่าเชื่อถือ :

add(a,b):
    if a == nil ||  b == nil: 
        return 0
    else
        return (a+b)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.