Jupyter notebooks đã trở thành một công cụ tiêu chuẩn trong lập trình khoa học dữ liệu (data science). Các chương trình trong Jupyter notebooks khác biệt so với các chương trình điển hình vì chúng được xây dựng từ một tập hợp các đoạn mã xen kẽ với văn bản và hình ảnh. Điều này cho phép khám phá tương tác và các đoạn mã có thể được thực thi theo thứ tự khác nhau, hệ quả là dẫn đến các kết quả khác nhau do hiệu ứng phụ giữa các đoạn mã. Các nghiên cứu trước đó đã chỉ ra sự hiện diện của việc trùng mã lớn – các bản sao mã (code clones) – trong nguồn của các chương trình truyền thống, cả trong các ngôn ngữ lập trình hệ thống và các ngôn ngữ lập trình tập lệnh. Trong bài báo này, các tác giả trình bày nghiên cứu quy mô lớn (large scale) đầu tiên về việc trùng mã trong Jupyter notebooks. Họ đã phân tích một nguồn tài liệu gồm 2.7 triệu Jupyter notebooks được lưu trữ trên GitHub, đại diện cho 37 triệu đoạn mã riêng lẻ và 227 triệu dòng mã. Các tác giả nghiên cứu các bản sao ở mức độ của từng đoạn mã riêng lẻ và xem xét mức độ mà các đoạn mã lặp lại trên nhiều notebook. Họ cũng nghiên cứu cả các bản sao giống nhau và bản sao xấp xỉ và tiến hành kiểm tra nhỏ (small scale) về các bản sao phổ biến nhất. Bài báo phát hiện rằng việc trùng mã là phổ biến trong Jupyter notebooks – hơn 70% các đoạn mã đều là bản sao chính xác của các đoạn mã khác (với sự khác biệt có thể xuất hiện ở các khoảng trắng), và khoảng 50% số notebook không có bất kỳ đoạn mã duy nhất nào, mà chỉ bao gồm các đoạn mã cũng được tìm thấy ở nơi khác. Trong các notebook được viết bằng Python, ít nhất 80% các đoạn mã đều là bản sao xấp xỉ và việc trùng mã thường xuyên hơn trong Python so với các ngôn ngữ khác. Các tác giả cũng phát hiện rằng các bản sao giữa các kho lưu trữ (repositories) khác nhau thường xuyên hơn so với các bản sao trong cùng một kho lưu trữ. Tuy nhiên, kho lưu trữ cá nhân phổ biến nhất từ đó một Jupyter notebook chứa các bản sao là kho lưu trữ trong đó chính nó được lưu trữ.

Chi tiết bài báo >

Posted in , , , ,