ทำไมการอัปเดต dependency เพียงเวอร์ชัน patch ยังทำให้แอปพลิเคชันใน production พังได้?
โอกาส
Semantic versioning เป็นเพียงข้อตกลง ไม่ใช่สัญญา การวิเคราะห์ระบบนิเวศซอฟต์แวร์อย่างเป็นระบบยืนยันว่า release แบบ patch และ minor มักนำการเปลี่ยนแปลงที่ทำลาย behavior มาด้วยอย่างสม่ำเสมอโดยไม่มีเครื่องมือ static analysis ใดตรวจจับได้ และ 68 เปอร์เซ็นต์ของการพังที่พบใน npm อยู่ในหมวดหมู่ behavioral นี้ซึ่งยากที่สุดที่จะตรวจจับโดยอัตโนมัติ ความเสียหายส่วนใหญ่เกิดจาก transitive dependencies ซึ่งมีเพียง 21 เปอร์เซ็นต์ที่มีการครอบคลุมการทดสอบในสภาพแวดล้อมจริง เครื่องมือสแกน dependency ตั้งค่าสถานะ CVE ด้านความปลอดภัยแต่ไม่มีกลไกตรวจจับความไม่เข้ากันเชิง semantic ที่ลึกสองชั้น นักพัฒนาที่อัปเดต dependency ตรงหนึ่งรายการในวันนี้ไม่มีเครื่องมือใดบอกได้ว่า behavior ใน production จะเปลี่ยนแปลงอย่างไร
ทำไมถึงสำคัญ
การตรวจจับความเสียหายเชิง behavior ใน transitive dependencies ก่อนที่จะถึง CI คือชั้นที่หายไประหว่าง version pinning และการอัปเกรดที่ปลอดภัย
วิธีที่ผมให้คะแนนโอกาส
คะแนนโอกาสเป็นมุมมองส่วนตัวของผม ไม่ใช่การวัดผล โดยดูว่ามันเจ็บปวดแค่ไหน บ่อยแค่ไหนที่มันกัดกิน และมีทางแก้อยู่น้อยเพียงใดในปัจจุบัน คะแนนสูงกว่าหมายความว่าผมคิดว่าคุ้มค่าแก่การสร้างมากกว่า
ความเจ็บปวดที่มันก่อขึ้นเมื่อปรากฏตัว
ความถี่ที่คนจริงๆ เจอมัน
ความขาดแคลนของเครื่องมือที่ดีสำหรับมันในปัจจุบัน
ปัญหาอื่นที่น่าแก้ไข
ทำไมซอฟต์แวร์ที่เราพึ่งพามากที่สุดถึงใช้งานยากที่สุด?
Techทำไมฉันยังไม่เป็นเจ้าของข้อมูลที่ตัวเองสร้างขึ้นมาเลยแม้แต่น้อย?
Techทำไมฉันถึงไม่สามารถรับใบรับรองที่พิสูจน์ได้ว่าข้อมูลของฉันถูกลบออกจริง?
Techทำไมฉันถึงไม่รู้ได้ว่าสิ่งที่กำลังทำงานอยู่ตรงกับสิ่งที่ SBOM ของฉันประกาศไว้หรือไม่
Techทำไมทุกห่วงโซ่พิสูจน์แหล่งที่มาของ C2PA ถึงขาดสะบั้นทันทีที่เนื้อหาเข้าสู่โซเชียลมีเดีย?
Techทำไม test ที่ AI สร้างขึ้นถึงผ่านบนบั๊กที่มันควรจะตรวจจับ?