เราสามารถรับประกันได้ว่าโปรแกรมจะไม่ผิดพลาดหรือไม่?


10

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

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

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

ฉันเห็นด้วยกับความคิดของฉันว่ามันค่อนข้างบ้า แต่ฉันแค่อยากรู้เราจะรู้ได้อย่างไรว่าปัญหาไม่ได้เกิดจากโปรแกรมและอินพุต แต่มีปัจจัยอื่น ๆ

PS ระบบบ้านี้ไม่มีบันทึก


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

16
ใช่โดยลบมัน
Steven A. Lowe

6
ฮาร์ดแวร์บางชิ้นมีข้อบกพร่องจริง มันเป็นเครื่องพิสูจน์ถึงผู้ผลิตชิปประจำวันว่ามีน้อย ฉันจะสงสัยซอฟต์แวร์ก่อน

มีเหตุผลเสมอสำหรับโปรแกรมที่จะผิดพลาด สแลมเป็นเหตุผลเชิงตรรกะ
mouviciel

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

คำตอบ:


8

ฉันจะบอกว่าไม่!

ในทางทฤษฎีแล้วคำตอบคือไม่เราทำได้แค่ทดสอบ: -

  • บางสภาพแวดล้อมมีจำนวน จำกัด
  • บางครั้งมีจำนวน จำกัด
  • กรณีทดสอบจำนวน จำกัด

นี่เป็นจำนวนที่น้อยกว่าจำนวนสภาพแวดล้อมเวลาและกรณีที่เป็นไปได้ทั้งหมดของโปรแกรมที่อาจพบในช่วงชีวิต นอกจากนี้เรายังมีความรู้เล็กน้อยเกี่ยวกับอนาคตที่คุณควรตั้งโปรแกรมรับมือกับภาวะเงินเฟ้อ 10,000% โปรแกรมของคุณควรรับมือกับสถาปัตยกรรม 31 บิตใหม่ที่ยอดเยี่ยมหรือไม่?

ทฤษฎีได้รับการสนับสนุนจากประสบการณ์ส่วนตัวที่ฉันได้พบ: -

  • โปรแกรมแตกหักเมื่อถูกย้ายไปยังตำแหน่งที่ตั้งอื่น ตรวจสอบ "MAY" เมื่อเดือนคือ "MAI"
  • โปรแกรมที่ล้มเหลวในการทดสอบคอมไพเลอร์เวอร์ชั่นใหม่บั๊กในเวอร์ชันก่อนหน้านี้ร่วมกับบั๊กในโปรแกรมสร้างผลลัพธ์ที่ถูกต้อง
  • โปรแกรมแตกหักในระบบปฏิบัติการรุ่นใหม่ เมื่อ Solaris เพิ่มจำนวนรายการไดเรกทอรีเริ่มต้น SMALLINT จะส่งกลับโดย ftok () ส่งคืนค่าศูนย์สำหรับไฟล์แรกในไดเรกทอรีเสมอ
  • โปรแกรมแตกเนื่องจากเป็นครั้งแรกที่พบชุดค่าผสมเฉพาะซึ่งมีทั้งที่ถูกต้องและไม่คาดคิดและจะไม่เคยได้รับการทดสอบ - อัตราดอกเบี้ยติดลบของเงินฝากรายการสินค้าที่มีน้ำหนักเป็นศูนย์ ไม่สามารถคำนวณ VAT และอื่น ๆ ได้

ฉันบอกว่าใช่ด้วยบทบัญญัติ - หากคุณมีหลายเธรด เคยได้ยินเรื่อง "Race Condition"
mattnz

6

ในทางทฤษฎีถ้าคุณเริ่มต้นด้วยสถานะที่เหมือนกันผลลัพธ์จะเหมือนกัน ในความเป็นจริงการประกันสถานะเริ่มต้นเหมือนกันในอุปกรณ์ "ขนาดเซิร์ฟเวอร์" เป็นไปไม่ได้สวยมาก

ใช้ตัวแปรที่ไม่มีค่าเริ่มต้น ดูรหัสนี้:

  short i;

  if(i==-1)
  {
        //do something special
  }
  else
  {
        i=0;
        //do something else
  }

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

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

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


6

ตอนนี้คำถามของฉันคือโปรแกรมคอมพิวเตอร์จะเกิดข้อผิดพลาดโดยไม่มีเหตุผลหรือไม่?

หากคุณมีสภาพแวดล้อมการประมวลผลที่เหมือนกันดังนั้นการป้อนอินพุต X ให้กับโปรแกรมจะให้ผลลัพธ์ที่เหมือนกันเสมอ R ในทางปฏิบัติมันแทบจะไม่ต้องมีโปรแกรมเดียวที่ทำงานแยกกัน แอปพลิเคชั่นที่ง่ายที่สุดในวันนี้ทำงานในระบบปฏิบัติการและแชร์หน่วยความจำกับโปรแกรมอื่น ๆ ที่อาจ 'โหลด' ในหน่วยความจำในเวลาเดียวกัน โปรแกรมเหล่านี้อาจเปลี่ยนแปลงหน่วยความจำในลักษณะที่ทำให้โปรแกรมทำงานผิดปกติ นี่เป็นปัญหาที่มีชื่อเสียงเกี่ยวกับตัวแปรประเภท 'ตัวชี้' เช่น โดยปกติข้อผิดพลาดดังกล่าวทำให้เกิดพฤติกรรมของระบบที่ผิดปกติและไม่ได้ผลการคำนวณที่ผิด

ในกรณีของคุณฉันคิดว่าปัญหาอาจจะ (และมักจะเป็น) ไม่ใช่สิ่งที่ฉันได้อธิบายไว้ข้างต้น ปัญหาอาจเป็นได้ว่า:

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

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

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

คำตอบคือไม่โดยทั่วไปซอฟต์แวร์ไม่ได้เปราะบางในกรณีนี้

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

อัปเดตข้อมูลเกี่ยวกับข้อผิดพลาดของหน่วยความจำเสียหาย: โปรดดูหน่วยความจำเสียหาย


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

3
ระบบปฏิบัติการสมัยใหม่ไม่อนุญาตให้โปรแกรมแก้ไขหน่วยความจำ (หรือแม้แต่อ่าน) ที่เป็นของโปรแกรมอื่น
PéterTörök

ใช่ระบบปฏิบัติการสมัยใหม่ไม่อนุญาตให้มีสิ่งใดในลักษณะนั้น
DeadMG

"ถ้าคุณมีสภาพแวดล้อมการคำนวณเหมือนกันแน่นอนจากนั้นการป้อนค่า X ให้กับโปรแกรมจะให้ผลลัพธ์เหมือนกันเสมอ R" ฉันไม่แน่ใจว่าสิ่งนี้เป็นจริง เกิดอะไรขึ้นถ้าหนึ่งใน SR latches ในหน่วยความจำได้รับสอง 1 เนื่องจากความเสียหายก่อนหน้า en.wikipedia.org/wiki/...
Yam Marcovic

@DeadMG และPéterTörökขอบคุณสำหรับความคิดเห็นของคุณฉันได้แก้ไขข้อความและเพิ่มการอ้างอิงไปยังหน้าที่อธิบายว่าปัญหายังคงเกิดขึ้น (ฉันรู้ว่าเป็นไปไม่ได้อย่างมาก)
NoChance

5

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

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

ในการถอดความสถิติสูงสุดเก่าสุดโปรแกรมทั้งหมดผิด แต่บางโปรแกรมมีประโยชน์


1
+1 สำหรับ "โปรแกรมทั้งหมดผิด แต่บางโปรแกรมมีประโยชน์"
CVn

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

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

@ Halainzil: ฉันเชื่อว่าฉันเขียนถูกต้องแล้ว "Hello, World!" โปรแกรมและไม่ชอบ ฉันยังเขียนโปรแกรมที่มีประโยชน์ถูกต้อง (แม้ว่าจะไม่ใช่โปรแกรมใหญ่)
David Thornley

2

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

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

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


1

ฉันคิดว่าคอมพิวเตอร์มาตรฐาน (มาตรฐาน) ส่วนใหญ่

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

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

Y2K11 ทุกคน?


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

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

1

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

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

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

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

"คำอธิบายที่ง่ายกว่าคือสิ่งอื่น ๆ ที่เท่าเทียมกันโดยทั่วไปจะดีกว่าคำที่ซับซ้อนกว่า" - การสรุปของ Occam's Razor


0

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


0

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

ตั้งแต่นั้นมาไม่


0

การทดสอบแสดงให้เห็นว่าไม่มีแมลง (Edsger W. Dijkstra)

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

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


คุณอ่านคำถามหรือไม่
Winston Ewert

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

ใช่ชื่อดูเหมือนจะพูดอย่างนั้น ร่างกายไม่ชัดเจน
Winston Ewert

0

สภาพแวดล้อมของฮาร์ดแวร์และซอฟต์แวร์อยู่ในสถานะคงที่ของการไหล ตัวอย่างชิ้นส่วนที่กำลังเคลื่อนที่ไฟฟ้าอุณหภูมิฝุ่นละอองและรหัส OS

ดังนั้นฉันไม่คิดว่าจะเป็นไปได้หรือคาดว่าโปรแกรมซอฟต์แวร์คอมพิวเตอร์จะทำงานเหมือนเดิมเสมอเนื่องจากสภาพแวดล้อมเปลี่ยนแปลงตลอดเวลา

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

ฉันกำลังพูดถึงคอมพิวเตอร์วันปัจจุบัน


0

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

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


-1

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


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