ฉันออกแบบซอฟต์แวร์และชิ้นส่วนเชิงกล
มันซับซ้อน
เนื่องจากมี "ส่วน" นับล้านในซอฟต์แวร์ที่ทันสมัย
ชิ้นส่วนซอฟต์แวร์มีความซับซ้อนและมีจำนวนมาก ชิ้นส่วนที่ไม่เคลื่อนที่เชิงกลไม่มีสถานะ
ชิ้นส่วนที่เคลื่อนที่ด้วยกลไกมีตำแหน่ง (ตัวแปรเดียว)
โปรแกรมที่ใช้งานและใช้ RAM ขนาด 1Mb จะมีสถานะเป็นล้านไบต์ นั่นเป็นสถานะที่ไกลเกินกว่าระบบกลไกทั่วไป
จะมีการรวมกันของรัฐที่ไม่เคยได้รับการทดสอบเพราะพวกเขาเกิดขึ้นน้อยมาก ในระบบกลไก (เช่นรถยนต์) ง่ายต่อการตรวจสอบว่าชิ้นส่วนกลไกไม่ได้ชนกันระหว่างการใช้งาน ซอฟต์แวร์ CAD เชิงกลที่ฉันใช้ในที่ทำงานทำโดยอัตโนมัติ
หากคุณสร้างเครื่องจักรจากชิ้นส่วนที่มองไม่เห็นและไม่สามารถสัมผัสได้และมีชิ้นส่วนที่เคลื่อนไหวนับล้านชิ้นซึ่งพลาดไปอีกชิ้นหนึ่งมันจะเป็นเหมือนโปรแกรมง่ายๆ
แม้แต่ "hello world" ก็ยังทำงานบนระบบปฏิบัติการ ระบบ 8 บิตเก่าและระบบปฏิบัติการมินิคอมพิวเตอร์น่าเชื่อถือมากเพราะใช้งานง่าย
สิ่งต่าง ๆ เช่น DLLs และไลบรารีที่แชร์ถูกแทนที่ด้วยเป็นส่วนหนึ่งของการปรับปรุงไวรัสหรือการติดตั้งซอฟต์แวร์จากนั้นโปรแกรมที่น่าสนใจไม่ทำงาน บิตเช่นการเปลี่ยนยางในรถของคุณเป็นยางรถจักรยาน สถานะขอบบางอย่างของฟังก์ชันไลบรารีรบกวน (ไม่ดำเนินการตามที่โปรแกรมคาดไว้)
โปรแกรมที่เขียนด้วยภาษาเช่น Java ที่ไม่อนุญาตให้มีการโต้ตอบระหว่างวัตถุ (การใช้ตัวชี้ซ้ำ, ขอบเขตขอบเขตล้น) โดยทั่วไปนั้นค่อนข้างน่าเชื่อถือเมื่อคุณให้โปรแกรมทำงาน
เมื่อคุณใช้ระบบปฏิบัติการที่มีไลบรารีแบบสแตติกเมื่อโปรแกรมทำงานก็จะทำงานต่อไป (แต่จะยังคงมีเงื่อนไขขอบจำนวนมากขึ้นอยู่กับขนาดสถานะของมัน)
Dave Parnas เขียนเกี่ยวกับความน่าเชื่อถือของซอฟต์แวร์ด้วยการทำให้สถานะของโปรแกรมเล็กลง พวกการเขียนโปรแกรมฟังก์ชั่นที่เข้มงวดกำลังทำสิ่งเดียวกันโดยการบังคับให้มอบหมายคงเดียว