• AWS ยึดความถูกต้องของระบบเป็นรากฐานสำคัญเพื่อรักษา ความปลอดภัย·ความทนทาน·ความสมบูรณ์·ความพร้อมใช้งาน และได้ขยายขอบเขตการใช้งานจากจุดเริ่มต้นอย่าง TLA+ ไปสู่ model checking, fuzzing, property-based testing, runtime verification และ formal proof
  • TLA+ ช่วยกำจัดบั๊กที่การทดสอบแบบดั้งเดิมจับได้ยากตั้งแต่ช่วงต้น และทำให้มั่นใจในการปรับแต่งประสิทธิภาพ แต่เพื่อให้เข้าถึงได้ง่ายขึ้นสำหรับนักพัฒนา จึงมีการนำเครื่องมืออย่าง ภาษาโปรแกรม P และ PObserve มาใช้ร่วมกัน
  • Property-based testing ของ S3 ShardStore, deterministic simulation และ SQL fuzzing ของ Aurora Limitless Database เป็นตัวอย่างที่ดึง formal methods ให้เข้าใกล้การพัฒนาและการทดสอบ integration ในชีวิตประจำวันมากขึ้น
  • Fault Injection Service ฉีดความขัดข้อง เช่น ข้อผิดพลาดของ API, การหยุด I/O ชั่วคราว และ instance failure เพื่อยืนยันกลไก resilience โดย Amazon.com ได้รันการทดลองบน FIS 733 รายการในกระบวนการเตรียม Prime Day 2024
  • ในพื้นที่ที่ขอบเขตความปลอดภัยและการปรับแต่งประสิทธิภาพมีความสำคัญ เช่น Cedar, Firecracker และการปรับแต่ง RSA บน Graviton 2 มีการใช้ formal proof ขณะที่ learning curve ที่สูงและการเข้าถึงเครื่องมือยังคงเป็นข้อจำกัดต่อการนำไปใช้

วิธีที่ AWS จัดการกับความถูกต้องของระบบ

  • AWS ต้องรักษามาตรฐานสูงด้าน ความปลอดภัย, ความทนทาน, ความสมบูรณ์, ความพร้อมใช้งาน เพื่อให้บริการที่ลูกค้าไว้วางใจได้ และความถูกต้องของระบบคือสิ่งที่รองรับเรื่องนี้
  • บทความ “How Amazon Web Services Uses Formal Methods” ใน CACM ปี 2015 แนะนำแนวทางเพื่อรับประกันความถูกต้องของบริการหลักของ AWS และหลังจากนั้นบริการเหล่านี้ก็ถูกใช้อย่างแพร่หลายในหมู่ลูกค้า AWS
  • เครื่องมือหลักในช่วงแรกคือภาษา formal specification TLA+ ที่พัฒนาโดย Leslie Lamport
    • ช่วยค้นพบและกำจัดบั๊กละเอียดอ่อนที่การทดสอบแบบดั้งเดิมอาจพลาด ตั้งแต่ช่วงต้นของการพัฒนา
    • ให้ความมั่นใจว่าสามารถทำ performance optimization เชิงรุกได้โดยยังคงรักษาความถูกต้องของระบบ
  • เมื่อ 15 ปีก่อน แนวปฏิบัติด้านการทดสอบของ AWS พึ่งพา unit test ณ เวลา build เป็นหลัก และ integration test ณ เวลา deploy ที่มีขอบเขตจำกัด
  • หลังจากนั้น AWS ได้ผนวก formal methods และ semi-formal methods เข้ากับกระบวนการพัฒนา
    • theorem proving, deductive verification, model checking
    • property-based testing, fuzzing, runtime monitoring

ภาษาโปรแกรม P และ PObserve

  • เมื่อ AWS ขยาย formal methods ออกไปนอกทีมแรก ๆ ในช่วงต้นทศวรรษ 2010 ก็พบว่าวิศวกรจำนวนมากประสบความยากลำบากในการ เรียนรู้ TLA+ และทำให้ใช้งานได้อย่างมีประสิทธิผล
  • จุดแข็งของ TLA+ คือเป็นภาษานามธรรมระดับสูงที่ใกล้เคียงคณิตศาสตร์ แต่ก็กลายเป็นกำแพงในการเข้าถึงสำหรับนักพัฒนาที่คุ้นเคยกับภาษา imperative
  • ภาษา P ซึ่งเป็นภาษาแบบ state machine สำหรับการทำแบบจำลองและวิเคราะห์ระบบกระจาย ช่วยลดช่องว่างนี้
    • นักพัฒนาทำแบบจำลองการออกแบบระบบเป็น state machine ที่สื่อสารกัน
    • mental model นี้คุ้นเคยกับนักพัฒนา Amazon ที่ทำงานกับ microservices และ service-oriented architecture (SOA) เป็นจำนวนมาก
    • P ได้รับการพัฒนาที่ AWS ตั้งแต่ปี 2019 และยังคงดูแลในฐานะโปรเจกต์โอเพนซอร์สเชิงกลยุทธ์
  • ทีมผลิตภัณฑ์หลักหลายทีมของ AWS ใช้ P เพื่อตรวจสอบความถูกต้องของการออกแบบระบบ
    • สตอเรจ: Amazon S3, EBS
    • ฐานข้อมูล: Amazon DynamoDB, MemoryDB, Aurora
    • คอมพิวต์: EC2, IoT
  • S3 ใช้ P ในกระบวนการย้ายจาก eventual consistency ไปสู่ strong read-after-write consistency
    • ระบบย่อยดัชนีของ S3 เป็นที่เก็บ metadata ของออบเจ็กต์ที่ช่วยให้ค้นคืนข้อมูลได้อย่างรวดเร็ว
    • เพื่อให้ได้ consistency ที่แข็งแกร่ง จำเป็นต้องปรับเปลี่ยนหลายส่วนที่ไม่ใช่เรื่องง่ายใน protocol stack ของดัชนี S3
    • P ช่วยทำ formal modeling และ verification ของการออกแบบโปรโตคอล เพื่อกำจัดบั๊กระดับการออกแบบตั้งแต่ต้น และช่วยยืนยัน optimization ที่มีความเสี่ยงด้วย model checking
  • ในปี 2023 ทีม AWS P ได้สร้าง PObserve
    • ใช้ structured logs จากการรันของระบบกระจาย
    • ตรวจสอบย้อนหลังว่า log สอดคล้องกับพฤติกรรมที่ formal P specification ของระบบอนุญาตหรือไม่
    • ลดช่องว่างระหว่าง implementation ระดับ production ที่เขียนด้วยภาษาอย่าง Rust หรือ Java กับ P specification ณ เวลาออกแบบ
    • เชื่อม verification ณ เวลาออกแบบเข้ากับ runtime monitoring ของ implementation เพื่อเพิ่มคุณค่าของการลงทุนใน formal specification

วิธีผูก formal methods แบบเบาเข้ากับ flow การพัฒนา

  • AWS นำ lightweight formal methods มาใช้เพื่อดึง formal methods ให้เข้าใกล้ flow การพัฒนาและทดสอบของทีมวิศวกรมากขึ้น
  • Property-based testing

    • ShardStore ของ Amazon S3 ใช้ property-based testing เพื่อทดสอบความถูกต้องและเพิ่มความเร็วการพัฒนาตลอดวงจรการพัฒนา
    • ใช้หลายเทคนิคร่วมกันเพื่อให้มนุษย์ระบุพฤติกรรมที่คาดหวัง และให้การทดสอบอัตโนมัติสำรวจ input และเงื่อนไข failure ได้มากขึ้น
      • specification ด้านความถูกต้องที่นักพัฒนาจัดเตรียม
      • coverage-guided fuzzing ที่ใช้ตัวชี้วัด code coverage เพื่อชี้นำการกระจายของ input
      • fault injection ที่จำลองความล้มเหลวของฮาร์ดแวร์และระบบอื่น ๆ ระหว่างการทดสอบ
      • minimization ที่ย่อตัวอย่างโต้แย้งโดยอัตโนมัติเพื่อให้มนุษย์ debug ได้ง่ายขึ้น
  • Deterministic simulation

    • deterministic simulation testing รันระบบกระจายใน single-threaded simulator และควบคุมแหล่งที่มาของความสุ่มทั้งหมด
      • thread scheduling
      • timing
      • ลำดับการส่งมอบข้อความ
    • นักพัฒนาสามารถเขียน scenario ของ failure หรือ success เฉพาะ เช่น สถานการณ์ที่ participant ล้มเหลวในขั้นตอนหนึ่งของ distributed protocol
    • เนื่องจาก testing framework ควบคุม nondeterminism จึงสามารถระบุลำดับการรันที่น่าสนใจ เช่น ลำดับที่เคยทำให้เกิดบั๊กในอดีตได้
    • scheduler สามารถขยายไปสู่ order fuzzing หรือการสำรวจลำดับที่เป็นไปได้ทั้งหมด
    • ย้ายการทดสอบคุณสมบัติของระบบในสถานการณ์ delay และ failure ให้เข้าใกล้ เวลา build มากกว่า integration test ทำให้การพัฒนาเร็วขึ้นและขยาย behavior coverage
    • งานบางส่วนของ AWS เกี่ยวกับการทดสอบลำดับ thread และ system failure ณ เวลา build ถูกโอเพนซอร์สเป็นโปรเจกต์ shuttle และ turmoil
  • Continuous fuzzing และการสร้าง input ทดสอบแบบสุ่ม

    • continuous fuzzing โดยเฉพาะการสร้าง input ทดสอบที่ขยายขนาดได้แบบ coverage-guided มีประสิทธิภาพสำหรับการทดสอบความถูกต้องของระบบ ณ เวลา integration
    • ในการพัฒนา Aurora Limitless Database ซึ่งเป็นฟีเจอร์ data sharding ของ Amazon Aurora มีการใช้ fuzzing อย่างกว้างขวางเพื่อตรวจสอบคุณสมบัติหลักสองประการ
    • fuzz SQL query และ transaction ทั้งหมด เพื่อตรวจสอบว่าการแบ่งตรรกะการรัน SQL ข้าม shard ถูกต้องหรือไม่
    • สังเคราะห์ SQL schema, dataset และ query แบบสุ่มจำนวนมากเพื่อรันบน engine ที่กำลังทดสอบ แล้วเปรียบเทียบผลกับ oracle ที่อิง engine แบบไม่ทำ sharding
    • ใช้วิธี verification อื่น ๆ ร่วมด้วย เช่น แนวทางที่ SQLancer บุกเบิก
    • การผสาน fuzzing กับ fault injection testing มีประโยชน์ต่อมิติความถูกต้องของฐานข้อมูล เช่น atomicity, consistency, isolation
      • สร้าง transaction อัตโนมัติ
      • กำหนดพฤติกรรมที่ถูกต้องด้วย correctness oracle ที่ระบุแบบ formal
      • รัน interleaving ที่เป็นไปได้ของ transaction และ statement ภายใน transaction บนระบบที่ทดสอบ
      • ตรวจสอบคุณสมบัติย้อนหลัง เช่น isolation ตามแนวทางอย่าง Elle

Fault Injection Service และการตรวจสอบสถานการณ์ความขัดข้อง

  • AWS เปิดตัว Fault Injection Service(FIS) เมื่อต้นปี 2021 เพื่อให้ลูกค้า AWS หลากหลายกลุ่มใช้การทดสอบแบบ fault injection ได้
  • FIS สามารถฉีดความขัดข้องจำลองเข้าไปในการ deploy ระดับทดสอบหรือ production ของโครงสร้างพื้นฐาน AWS ได้
    • ข้อผิดพลาดของ API
    • การหยุด I/O ชั่วคราว
    • instance ที่ล้มเหลว
  • Fault injection ช่วยตรวจสอบว่ากลไก resilience ที่สร้างไว้ในสถาปัตยกรรมช่วยปรับปรุง availability ได้จริง และไม่สร้างปัญหาความถูกต้องใหม่
    • failover
    • health check
  • การทดสอบ fault injection บน FIS ถูกใช้อย่างแพร่หลายทั้งโดยลูกค้า AWS และภายใน Amazon
  • Amazon.com รันการทดลอง fault injection บน FIS 733 รายการในกระบวนการเตรียม Prime Day 2024
  • ในปี 2014 Yuan และคณะวิเคราะห์ว่าความขัดข้องร้ายแรง 92% ของระบบกระจายที่ทดสอบ ถูกกระตุ้นจากการจัดการข้อผิดพลาดที่ไม่ร้ายแรงอย่างไม่ถูกต้อง
  • เหตุผลที่ความขัดข้องร้ายแรงบน normal path พบได้น้อย คือ normal path ถูกใช้งานบ่อยกว่า ถูกทดสอบดีกว่า และเรียบง่ายกว่า error path มาก
  • Fault injection testing และ FIS ทำให้ทดสอบพฤติกรรมของระบบในสถานการณ์ fault และ failure ได้ง่ายขึ้น จึงลดช่องว่างความหนาแน่นของบั๊กระหว่าง normal path กับ error path
  • ตัว fault injection เองไม่ถือเป็น formal method แต่สามารถผสานกับ formal specification ได้
    • กำหนดพฤติกรรมที่คาดหวังด้วย formal specification
    • เปรียบเทียบผลลัพธ์ระหว่างและหลัง fault injection กับพฤติกรรมที่ระบุไว้
    • สามารถจับบั๊กได้มากกว่าวิธีที่ตรวจเฉพาะ metric กับ log error หรือให้มนุษย์ตัดสินด้วยสายตา

Metastability และพฤติกรรมระบบแบบ emergent

  • ในช่วง 10 ปีที่ผ่านมา ความสนใจต่อความล้มเหลวของระบบบางประเภทอย่าง metastable failures เพิ่มขึ้น
  • metastable failure คือความล้มเหลวที่ trigger เช่น overload หรือการล้าง cache ผลักระบบกระจายเข้าสู่สถานะที่ไม่สามารถฟื้นตัวได้หากไม่มีการแทรกแซง
    • ตัวอย่างการแทรกแซงคือการลดโหลดให้ต่ำกว่าระดับปกติ
  • ความล้มเหลวประเภทนี้เป็นหนึ่งในปัจจัยสำคัญที่ทำให้ระบบคลาวด์ไม่พร้อมใช้งาน
  • ในพฤติกรรม metastable ทั่วไป เมื่อโหลดเพิ่มขึ้น goodput จะเพิ่มขึ้นในช่วงแรก จากนั้นอิ่มตัว ผ่าน congestion และ goodput ลดลงเป็น 0 หรือใกล้ 0
  • หลังจากนั้น ระบบไม่สามารถกลับสู่สถานะสุขภาพดีได้ด้วยการลดโหลดเพียงเล็กน้อย แต่ต้องลดโหลดลงอย่างมากจึงจะฟื้นตัวได้
  • พฤติกรรมนี้อาจเกิดขึ้นได้แม้ในระบบเรียบง่าย และในระบบส่วนใหญ่ก็อาจถูกกระตุ้นได้จาก logic ฝั่ง client แบบ retry หลัง timeout
  • formal modeling ของระบบกระจายแบบดั้งเดิมมักเน้น safety และ liveness แต่ metastable failure แสดงให้เห็นว่ามีพฤติกรรมที่ไม่เข้ากับการจัดประเภทนี้อย่างเรียบร้อย
  • AWS ใช้ discrete-event simulation มากขึ้นเพื่อทำความเข้าใจพฤติกรรมระบบแบบ emergent
    • ลงทุนใน custom system simulation
    • ลงทุนในเครื่องมือที่ทำให้สามารถนำ model ระบบเดิมที่สร้างด้วยภาษาอย่าง TLA+ และ P ไปใช้กับ simulation ได้
  • หากขยาย exhaustive model checker อย่าง TLC ของ TLA+ ด้วย stochastic simulation ก็สามารถสร้างผลลัพธ์เชิงสถิติ เช่น distribution ของ latency ภายหลังได้
  • การขยายเหล่านี้ทำให้สามารถใช้ model checking กับงานอย่างการทำความเข้าใจความเป็นไปได้ในการบรรลุ SLA ด้าน latency

ขอบเขตความปลอดภัยที่ต้องใช้ formal proof

  • ในขอบเขตความปลอดภัยที่สำคัญ เช่น authorization และ virtualization formal methods ที่กล่าวมาก่อนหน้าอาจไม่เพียงพอ และ correctness proof มีคุณค่าน่าลงทุนสูง
  • ภาษา policy authorization Cedar

    • AWS เปิดตัวภาษา policy authorization Cedar ในปี 2023 สำหรับการเขียน policy ที่ระบุสิทธิ์แบบละเอียด
    • Cedar ออกแบบโดยคำนึงถึง automated reasoning และ formal proof
    • implementation สร้างด้วยภาษาโปรแกรม Dafny ที่เป็นมิตรต่อ verification
    • ผ่าน Dafny จึงพิสูจน์ได้ว่า implementation ตอบสนองคุณสมบัติด้านความปลอดภัยหลายประการ
    • proof นี้เป็น proof ในความหมายทางคณิตศาสตร์ที่ไปไกลกว่าการทดสอบ
    • ทีมยังใช้ differential testing โดยใช้โค้ด Dafny เป็น correctness oracle เพื่อตรวจสอบความถูกต้องของ implementation ภาษา Rust ที่พร้อมสำหรับ production
    • AWS เปิดซอร์สโค้ด Dafny และขั้นตอนการทดสอบควบคู่กับ implementation ของ Cedar เพื่อให้ผู้ใช้ตรวจสอบงานด้านความถูกต้องได้
  • Firecracker VMM

    • virtual machine monitor Firecracker ใช้โปรโตคอลระดับต่ำชื่อ virtio เพื่อเปิดเผยอุปกรณ์ฮาร์ดแวร์จำลอง เช่น network card หรือ SSD ให้กับ guest kernel ภายใน VM
    • อุปกรณ์จำลองนี้เป็นปฏิสัมพันธ์ที่ซับซ้อนที่สุดระหว่าง guest ที่ไม่น่าเชื่อถือกับ host ที่เชื่อถือได้ จึงเป็นขอบเขตความปลอดภัยที่สำคัญ
    • ทีม Firecracker ใช้ Kani ซึ่งสามารถ reason โค้ด Rust แบบ formal เพื่อพิสูจน์คุณสมบัติหลักของขอบเขตความปลอดภัยนี้
    • proof นี้รับประกันว่าไม่ว่า guest จะพยายามทำอะไร คุณสมบัติสำคัญของขอบเขตดังกล่าวจะยังคงอยู่
    • AWS สนับสนุนการพัฒนาเครื่องมือพื้นฐาน เช่น Kani, Dafny, Lean และ SMT solver ที่ขับเคลื่อนเครื่องมือเหล่านี้
    • formal model และ specification ถูกนำกลับมาใช้ซ้ำหลายรูปแบบ
      • model checking ณ เวลาออกแบบ
      • ทำหน้าที่เป็น correctness oracle ใน runtime monitoring
      • simulation ของพฤติกรรมระบบแบบ emergent
      • การสร้าง proof ของคุณสมบัติหลัก

ผลด้านประสิทธิภาพและต้นทุนที่เกินกว่าความถูกต้อง

  • formal methods ยังสำคัญต่อการปรับปรุงประสิทธิภาพของระบบคลาวด์อย่างปลอดภัย
  • จากการทำแบบจำลอง core commit protocol ของ Aurora relational database engine ด้วย P และ TLA+ พบโอกาสลดต้นทุน distributed commit จาก 2 network round trips เหลือ 1.5 network round trips โดยไม่แลกกับคุณสมบัติด้าน safety
  • ผลลัพธ์เช่นนี้พบได้บ่อยในทีมที่นำ formal methods มาใช้
    • กระบวนการคิดอย่างลึกซึ้งและเขียน distributed protocol แบบ formal บังคับให้เกิดการคิดอย่างมีโครงสร้าง
    • ให้ insight ที่ลึกขึ้นเกี่ยวกับโครงสร้างของ protocol และปัญหาที่ต้องแก้
    • หากสามารถตรวจสอบหรือพิสูจน์แบบ formal ได้ว่า design optimization ที่เสนอถูกต้อง วิศวกรระบบกระจายก็สามารถเลือก design ที่กล้าขึ้นได้โดยไม่เพิ่มความเสี่ยง
  • ประสิทธิภาพการผลิตและผลด้านต้นทุนไม่ได้จำกัดอยู่แค่ design optimization ระดับสูง
  • ทีม AWS สามารถค้นพบการปรับแต่ง implementation ของ RSA public-key cryptography บนโปรเซสเซอร์ Graviton 2 ที่ใช้ ARM ซึ่งช่วยปรับปรุง throughput ได้สูงสุด 94%
  • ใช้ interactive theorem prover HOL Light เพื่อพิสูจน์ความถูกต้องของ optimization นี้
  • เนื่องจาก CPU cycle ของคลาวด์ในสัดส่วนสูงถูกใช้กับการเข้ารหัส optimization เช่นนี้จึงช่วยลดต้นทุนโครงสร้างพื้นฐาน สนับสนุนความยั่งยืน และปรับปรุงประสิทธิภาพที่ลูกค้ารับรู้ได้

โจทย์ที่ยังเหลือและโอกาสในอนาคต

  • ตลอด 15 ปีที่ผ่านมา AWS ประสบความสำเร็จในการขยายวิธีทดสอบแบบ formal และ semi-formal แต่การนำไปใช้ในอุตสาหกรรมยังมีโจทย์อยู่
  • อุปสรรคหลักของเครื่องมือ formal methods คือ learning curve ที่ชัน และความต้องการความรู้เฉพาะโดเมน
  • เครื่องมือจำนวนมากยังมีลักษณะเชิงวิชาการและขาด interface ที่เป็นมิตรกับผู้ใช้
  • แม้แนวทาง semi-formal ที่ตั้งหลักได้ดีแล้วก็ยังมีอุปสรรคต่อการนำไปใช้
    • deterministic simulation เป็นเทคนิคทดสอบระบบกระจายหลักที่ใช้สำเร็จใน AWS และโปรเจกต์อย่าง FoundationDB แต่บางครั้งยังไม่คุ้นเคยแม้กับนักพัฒนาระบบกระจายที่มีประสบการณ์ซึ่งเข้าร่วม AWS
    • ช่องว่างคล้ายกันมีอยู่ใน methodology ที่พิสูจน์แล้ว เช่น fault injection testing, property-based testing และ fuzzing
  • จำเป็นต้องให้ความรู้แก่นักพัฒนาระบบกระจายเกี่ยวกับวิธีและเครื่องมือทดสอบเหล่านี้ และสอนวิธีคิดที่ rigor
  • ช่องว่างด้านการศึกษาเริ่มตั้งแต่ระดับวิชาการ
    • แม้แต่แนวทาง formal reasoning ขั้นพื้นฐานก็ยังไม่ค่อยถูกสอน
    • ผู้สำเร็จการศึกษาจากสถาบันชั้นนำก็ยังนำเครื่องมือเหล่านี้ไปใช้ได้ยาก
    • formal methods และ automated reasoning สำคัญต่อการประยุกต์ใช้ในอุตสาหกรรม แต่ยังถูกมองว่าเป็นสาขาเฉพาะทาง
  • metastability และคุณสมบัติ emergent อื่น ๆ ของระบบขนาดใหญ่ก็เป็นพื้นที่วิจัยสำคัญที่มีโจทย์ด้านการรับรู้คล้ายกัน
    • แนวปฏิบัติที่อาจก่อให้เกิดพฤติกรรมระบบแบบ metastable เช่น “retry N ครั้งเมื่อ timeout” ยังคงถูกแนะนำอย่างแพร่หลายแม้จะเป็นปัญหาที่ทราบกันแล้ว
    • เครื่องมือและเทคนิคปัจจุบันสำหรับทำความเข้าใจพฤติกรรมระบบแบบ emergent ยังอยู่ในช่วงเริ่มต้น
    • การทำ modeling ความเสถียรของระบบมีต้นทุนสูงและซับซ้อน
  • AWS มองว่า large language model และ AI assistant จะช่วยบรรเทาปัญหาการนำ formal methods ไปใช้ในทางปฏิบัติได้มาก
    • เช่นเดียวกับ AI-assisted unit testing ที่ได้รับความนิยม สิ่งเหล่านี้อาจช่วยนักพัฒนาสร้าง formal model และ specification
    • เทคนิคขั้นสูงอาจเข้าถึงได้สำหรับชุมชนนักพัฒนาที่กว้างขึ้น

กรอบความถูกต้องที่ AWS ลงทุนต่อเนื่อง

  • การสร้างซอฟต์แวร์ที่เชื่อถือได้และปลอดภัยต้องอาศัยแนวทางหลากหลายในการ reason เกี่ยวกับความถูกต้องของระบบ
  • AWS นำหลายเทคนิคมาใช้ควบคู่กับการทดสอบมาตรฐานอุตสาหกรรม เช่น unit test และ integration test
    • model checking
    • fuzzing
    • property-based testing
    • fault injection testing
    • deterministic simulation
    • event-based simulation
    • runtime verification ของ execution trace
  • formal specification มีบทบาทสำคัญในฐานะ test oracle ที่ให้คำตอบที่ถูกต้องสำหรับแนวปฏิบัติด้านการทดสอบหลายอย่างของ AWS
  • correctness testing และ formal methods ยังคงเป็นพื้นที่ลงทุนหลักของ AWS โดยอิงจากผลตอบแทนจากการลงทุนที่ได้รับแล้ว

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น