Skip to content
Tech

ทำไมการอัปเดต dependency เพียงเวอร์ชัน patch ยังทำให้แอปพลิเคชันใน production พังได้?

79

โอกาส

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 และการอัปเกรดที่ปลอดภัย

วิธีที่ผมให้คะแนนโอกาส

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

ความรุนแรง7/10

ความเจ็บปวดที่มันก่อขึ้นเมื่อปรากฏตัว

ความถี่9/10

ความถี่ที่คนจริงๆ เจอมัน

ช่องว่าง7/10

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

ปัญหาอื่นที่น่าแก้ไข