Code Của Bạn Thì Có Nhiều Cái Dở Hơn Là Cái Hay

Ngoc Huynh

Một nghiên cứu mới đây chỉ ra rằng nhiệm vụ cốt lõi của một chương trình thì được tóm lược chỉ với một phần nhỏ của lập trình.

Nếu bạn là một nhà lập trình phần mềm và ai đó hỏi bạn rằng: tỷ lệ code mà bạn viết tiêu biểu cho nhiệm vụ thực tế đối lập với bao nhiêu ký tự đệm hay code phải có bằng ngôn ngữ để hoạt động thực tế là bao nhiêu? 95%? 75%? hay 50%? Dù cho bạn đoán như thế nào, thì có lẽ bạn sẽ nhầm lẫn vì nghiên cứu mới đã phát hiện ra rằng chỉ có khoảng 5% code đã viết nắm bắt được nhiệm vụ cốt lõi mà nó cung cấp trên thực tế.

Trong một bài viết gần đây có tựa đề là A Study of “Wheat” and “Chaff” in Source Code (tạm dịch: Nghiên cứu về “cái hay” và “cái dở” của mã nguồn chương trình), thì các nhà nghiên cứu đến từ đại học California, Davis, Nam Kinh ở Trung Quốc và Luân Đôn đã nói một cách lý thuyết rằng cũng giống như các ngôn ngữ tự nhiên, thì có một vài và có thể hầu hết các code đã viết thì không cần thiết để truyền đạt những gì mà nó thực hiện. So sánh các phương pháp lập trình những cái hay, thì các tác giả đã chỉ rõ một số phần của code có cái hay, tiêu biểu cho điều cốt lõi về mặt ngữ nghĩa của một nhiệm vụ, trong khi mà các thứ khác là cái dở.

Các tác giả quả quyết rằng cái hay của một nhiệm vụ có thể được tóm lược bằng các tập hợp nhỏ các keyword, mà được gọi là “tập hợp con phân biệt tối thiểu” hay là MINSET. MINSET có thể được suy ra bằng cách phá vỡ một phương pháp thành các từ vị (ví dụ như: code bị định giới bởi khoảng cách hay dấu chấm câu), loại bỏ những gì không quan trọng với hành vi của trách nhiệm và sự sắp xếp các MINSET còn lại với các keyword. Sau đó các keyword đó lắp ghép MINSET.

Để kiểm tra lý thuyết của họ mà các MINSET là các nhiệm vụ, nhưng trên thực tế code được viết chiếm tỷ lệ nhỏ, vào mùa hè năm 2012, các nhà nghiên cứu đã tải về 1000 các dự án Java nổi tiếng từ Apache, Eclipse, GitHub, và SourceForge. Từ đó các nhà nghiên cứu đã có 100 triệu dòng code Java và ném ra khỏi các phương pháp đơn giản (các phương pháp này có ít hơn 50 token). Việc đó chỉ bỏ đi dưới 1.9 triệu phương pháp riêng biệt, nơi mà sau đó chúng được thử 10,000 dòng code ngẫu nhiên và quyết định các MINSET. Bạn có thể tải về code và dữ liệu được sử dụng trong nghiên cứu từ Bitbucket.

Dưới đây là những khám phá chính trong nghiên cứu:

. Các MINSET thì nhỏ một cách đáng ngạc nhiên. Giá trị kích thước trung bình của MINSET là 1.55 keyword và kích thước lớn nhất là 6 keyword

. Kích thước MINSET không tăng cùng với quy mô phương pháp. Khi chỉ quan sát 1000 phương pháp lớn nhất, thì kích thước trung bình và cực đại của MINSET trên thực tế đã giảm xuống lần lượt là 1.12 và 4. Điều này chứng tỏ rằng: “các MINSET nhỏ và các chỉ số có hiệu quả tiềm năng của các thông tin đơn nhất ngay cả đối với các phương pháp lớn khác thường.”

. Hầu hết code gần như là những cái dở. Trung bình chỉ có 4.6% các từ vị đơn nhất trong một phương pháp có thể lắp ghép MINSET. Còn lại hơn 95% code không có cái hay.

Có hai điểm quan trọng để ghi nhớ ở đây. Thứ nhất là bản thân MINSET không thể thực thi được; nó chỉ là tập hợp con nhỏ nhất của code mà định rõ đặc điểm nhiệm vụ cốt lõi. Một vài trong 95% code (cái dở) là cần thiết để làm cho MINSET thực thi, vì vậy nó không hẳn là vô ích. Thứ hai là trong lúc nghiên cứu này chỉ quan sát code JAVA, thì các tác giả kỳ vọng nghiên cứu này sẽ vẫn đúng với các ngôn ngữ khác, đặc biệt là C và C++, vì sự đồng dạng của các ngôn ngữ.

Các vấn đề kéo theo của nghiên cứu này là gì? Các nhà nghiên cứu đề cập đến số lượng các ứng dụng tiềm năng của MINSET:

. Tìm kiếm code được cải tiến – các MINSET có thể được sử dụng để sắp xếp kết quả tìm kiếm code dựa trên sự đồng dạng với một truy vấn

. Môi trường phát triển tích hợp (IDE) thông minh hơn – các môi trường phát triển tích hợp có cơ sở dữ liệu được chỉ mục của các MINSET có thể đưa ra code tương tự, hỗ trợ sự bổ sung code tự động và tăng tốc gỡ rối.

. Các dạng thay thế của lập trình – các MINSET có thể được sử dụng để hỗ trợ keyword dựa vào lập trình, ví dụ như: tạo ra code khả dụng từ một tập hợp nhỏ hơn của các keyword

Chia sẻ bài viết ngay

Nguồn bài viết : http://www.itworld.com/