เราจะรู้ได้อย่างไรว่าวิธีการทางการทำงาน


20

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

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

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

8
คำถามนี้มีการใช้ถ้อยคำค่อนข้างเป็นส่วนตัวและเป็นวิธีกระตุ้น ฉันขอแนะนำการใช้ถ้อยคำใหม่หรือปิด
Suresh Venkat

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

1
@Neel: การแก้ไขที่ดี สิ่งหนึ่งที่การเปลี่ยนแปลงของคุณละเว้นคือการอ้างอิงถึงความปลอดภัยของระบบซึ่งเป็นส่วนหนึ่งของสาระสำคัญของคำถามเดิม บางทีเจนนี่อาจนำสิ่งนั้นกลับมาเพื่อทำให้คำถามของเธออีกครั้ง
Dave Clarke

1
สำหรับกระสุนใหม่ 4: ความเข้าใจผิดที่ยิ่งใหญ่: การทดสอบ (เหมือนจริง) ไม่สามารถแสดงข้อผิดพลาดได้
กราฟิลส์

คำตอบ:


11

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

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

เกี่ยวกับจุดที่ 3: มีการดำเนินการบางอย่างเพื่อตรวจสอบระบบในการตั้งค่าที่มีการจำลองความผิดพลาดอย่างชัดเจนรวมถึงFaulty Logic: การให้เหตุผลเกี่ยวกับโปรแกรมที่ทนต่อความผิดพลาด Matthew Meola และ David Walker European Symposium on Programming, 2010 ทำงานเกี่ยวกับการตรวจสอบรูปแบบความน่าจะเป็นและการตรวจสอบความน่าจะเป็นอย่างแน่นอนทั้งสองยังแก้ไขปัญหาของความผิดพลาดในระดับหนึ่ง


9

คะแนนของคุณในการสั่งซื้อ:

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

9

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

ไม่มีเรือขนาดเล็กที่ไม่มีตรรกะของมันภายใต้การตรวจสอบความเท่าเทียมในการใช้งาน โดยไม่ต้องมี FPU ของมันถูกต้องภายใต้ FV; หากไม่มีโปรโตคอลการเชื่อมโยงกันของแคชซึ่งขึ้นอยู่กับ FV (กรณีนี้เกิดขึ้นตั้งแต่ปี 1995)

ยกเว้นความแตกต่างที่ชัดเจนระหว่างซอฟต์แวร์และระบบทางกายภาพที่ได้รับการออกแบบมา (เช่นสะพานที่หนึ่งสามารถเพิ่มปัจจัยด้านความปลอดภัย) พวกเขาเล่นบทบาทของคณิตศาสตร์วิศวกรรมใน CS อย่างไรก็ตามการใช้งาน FM ขึ้นอยู่กับผลประโยชน์ / ค่าใช้จ่ายเสมอ การทดสอบ Fuzz ให้ผลตอบแทนสูงใน บริษัท ต่างๆเช่น Microsoft (Google SAGE ในหนึ่งสไลด์)

แม้ในไมโครมีระบบย่อย (เช่นท่อไมโครโปรเซสเซอร์) ที่ FV ไม่ได้มีผลกระทบเช่นเดียวกับที่อื่น ๆ (เช่น FPU ซึ่งการทดสอบแบบดั้งเดิมไม่ได้ทำในทุกกรณีเมื่อการประเมินวิถีสัญลักษณ์อย่างเป็นทางการพิสูจน์ว่าไม่มีบั๊ก : Kaivola et al CAV'09)

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


8

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


1
นอกจากนี้ยังมีบางสิ่งที่เรียกว่า "ความพอเพียง" ของการเข้ารหัสของคุณ: สิ่งที่คุณทำเป็นทางการในผู้ช่วยพิสูจน์คือระบบที่คุณเขียนลงบนกระดาษ (ดูที่twelf.plparty.org/wiki/Adequacy ) อย่างไรก็ตามนี่ไม่ใช่ที่อยู่จุดแรกของคุณมันกำลังสร้าง bijection
Jamie Morgenstern

6

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

ใช่อาจจะมีการค้ำประกันไม่ วิธีการทางการมีไว้เพื่อค้นหาและกำจัดข้อผิดพลาดและโน้มน้าวใจมนุษย์

เทคนิคใดที่เป็นที่รู้จักในการทดสอบว่าข้อกำหนดนั้นเหมาะสมหรือไม่?

คุณอาจจะสนใจในเครื่องมือการตรวจสอบแบบจำลองสำหรับรายละเอียดของระบบอย่างเป็นทางการ

กระบวนการพิสูจน์อาจมีข้อบกพร่องเช่นกัน! ใครจะรู้ว่ากฎการอนุมานเหล่านั้นถูกต้องและถูกต้องตามกฎหมาย

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

นอกจากนี้การพิสูจน์อาจมีขนาดใหญ่มากและเราจะรู้ได้อย่างไรว่าพวกเขาไม่มีข้อผิดพลาด?

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

มีเทคนิคใดที่ทราบกันดีว่ามีความผิดพลาดของฮาร์ดแวร์จริงหรือไม่?

วิธีการเกี่ยวกับความผิดพลาดใจกว้างพิมพ์ชุมนุมภาษา ?

อย่างไรก็ตามฉันส่วนใหญ่เห็นการวิจัยซึ่งเน้นทั้งวิธีการหรือการทดสอบอย่างเป็นทางการ สิ่งที่เป็นที่รู้จักกันเกี่ยวกับการรวมทั้งสองเข้าด้วยกัน?

"การประชุม TAP จะทุ่มเทให้กับการบรรจบกันของการพิสูจน์และทดสอบ"

เพียงแค่ googling สำหรับ "บทพิสูจน์และการทดสอบ" มีเพลงฮิตยอดนิยมหลายรายการ


5

เทคนิคใดที่เป็นที่รู้จักในการทดสอบว่าข้อกำหนดนั้นเหมาะสมหรือไม่?

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

มีเทคนิคใดที่ทราบกันดีว่ามีความผิดพลาดของฮาร์ดแวร์จริงหรือไม่?

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

อย่างไรก็ตามฉันส่วนใหญ่เห็นการวิจัยซึ่งเน้นทั้งวิธีการหรือการทดสอบอย่างเป็นทางการ สิ่งที่เป็นที่รู้จักกันเกี่ยวกับการรวมทั้งสองเข้าด้วยกัน?

ว้าววันนี้ฉันจะไร้ยางอายและอ้างอิงตัวเองอีกครั้ง ด้วยผู้เขียนร่วมเราทำงานร่วมกันในการตรวจสอบและทดสอบแบบจำลองคุณสามารถดูรายการสิ่งพิมพ์ของนักศึกษาปริญญาเอกในอดีตของกลุ่มของเราหรือค้นหา "การตรวจสอบแบบจำลองความน่าจะเป็นโดยประมาณ" หรือ "การตรวจสอบแบบจำลองทางสถิติ" ในเครื่องมือค้นหาใด ๆ Younes et al., Sen et al. หรือตัวฉันเองและคนอื่น ๆ )


โฆษณา 1: โปรดทราบว่าความต้องการในการกำหนดรายละเอียดอย่างเป็นทางการควรจะช่วยเหลือส่วนที่เป็นอัตนัยซึ่งตรงข้ามกับสูตรในภาษาธรรมชาติ โดยจะต้องแม่นยำมากความไม่แน่นอนและความไม่แน่นอนจะปรากฏให้เห็นและจะต้องแก้ไข
กราฟิลส์

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

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

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

5

คุณอาจสนใจในผลงานของJohn Rushbyหนึ่งในผู้ออกแบบทฤษฎีบท PVS ซึ่งเป็นคนที่สนใจในประเด็นที่คุณพูดถึง คุณอาจสนุกกับการอ่านรายงานคลาสสิกนี้ต่อ FAA เกี่ยวกับการใช้วิธีการแบบเป็นทางการและการรับรองระบบที่สำคัญ (1993)และงานเขียนใหม่ของเขาเกี่ยวกับการประกอบกรณีความน่าจะเป็นไปได้และความปลอดภัยที่เป็นทางการ การวิเคราะห์ ฯลฯ )

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