Quản lý phụ thuộc linh hoạt và tối ưu thông qua Max-SMT
Author
Venue
Hội nghị Quốc tế IEEE/ACM về Kỹ thuật Phần mềm (ICSE), 2023
Abstract
Các trình quản lý gói như NPM đã trở thành công cụ thiết yếu trong phát triển phần mềm. Kho lưu trữ NPM lưu trữ hơn 2 triệu gói và phục vụ hơn 43 tỷ lượt tải xuống mỗi tuần. Tuy nhiên, trình giải quyết phụ thuộc của NPM có một số hạn chế. 1) NPM có xu hướng "tham lam" và thường không cài đặt được các phiên bản mới nhất của các phụ thuộc; 2) Thuật toán của NPM dẫn đến các phụ thuộc trùng lặp và mã nguồn phình to, điều này đặc biệt xấu cho các ứng dụng web cần tối ưu hóa kích thước mã; 3) Thuật toán khắc phục lỗ hổng bảo mật của NPM cũng có tính tham lam và thậm chí có thể gây ra các lỗ hổng mới; và 4) Khả năng tạo ra các phụ thuộc trùng lặp của NPM có thể làm hỏng các khung làm việc có trạng thái và yêu cầu nhiều sự cẩn trọng để khắc phục. Mặc dù các công cụ hiện có cố gắng giải quyết những vấn đề này, nhưng chúng hoặc là không ổn định, hoặc dựa vào các thay đổi sau khi cài đặt đối với cây phụ thuộc, không đảm bảo tính tối ưu, hoặc không thể kết hợp được. Chúng tôi giới thiệu Pacsolve, một khung làm việc và triển khai thống nhất cho việc giải quyết phụ thuộc, cho phép các ràng buộc và mục tiêu tối ưu hóa tùy chỉnh. Chúng tôi sử dụng Pacsolve để xây dựng Maxnpm, một giải pháp thay thế hoàn chỉnh và có thể thay thế trực tiếp cho NPM, giúp các nhà phát triển kết hợp nhiều mục tiêu khi cài đặt các phụ thuộc. Chúng tôi đánh giá Maxnpm trên một mẫu lớn các gói phần mềm từ hệ sinh thái NPM và cho thấy nó có thể: 1) giảm thiểu nhiều lỗ hổng bảo mật trong các phụ thuộc hơn công cụ kiểm tra của NPM trong 33% trường hợp; 2) chọn các phụ thuộc mới hơn so với NPM trong 14% trường hợp; và 3) chọn ít phụ thuộc hơn so với NPM trong 21% trường hợp. Tất cả mã nguồn và dữ liệu của chúng tôi đều mở và có sẵn.
