Bài viết

10 quy tắc để code như lập trình viên hàng đầu tại NASA

By Lap Nguyen on Tháng Tư 16, 2021

Bạn có biết về 10 quy tắc để code?. Lập trình viên tại NASA là một trong những công việc thử thách nhất trong thế giới lập trình. Họ viết code và lập trình các ứng dụng mang nhiệm vụ cực kỳ quan trọng với sự an toàn là mối quan tâm chính của họ.

Trong các tình huống nhất định, điều quan trọng là phải luôn làm theo 10 quy tắc để code một cách nghiêm ngặt. Các quy tắc này bao gồm các khía cạnh khác nhau của việc lập trình phần mềm như việc một phần mềm được viết ra như thế nào, các tính năng ngôn ngữ nào nên được sử dụng...

10 quy tắc để code như những lập trình viên hàng đầu tại NASA

Cho dù rất khó để thiết lập sự đồng nhất về tiêu chuẩn cho code tốt là như thế nào, Phòng thí nghiệm Sức Đẩy Phản Lực - Jet Propulsion Laboratory (gọi tắt là JPL) làm theo một bộ quy tắc hướng dẫn code được gọi là "Sức mạnh của 10 quy tắc cho lập trình code tới hạn an toàn" (The Power of Ten-Rules for Developing Safety Critical Code).

Bảng hướng dẫn tập trung phổ biến với code được viết bằng ngôn ngữ lập trình C nhờ sự kết hợp có thâm niên với ngôn ngữ này của JPL. Nhưng, những hướng dẫn này có thể dễ dàng áp dụng trên các ngôn ngữ lập trình khác nữa. Nhà khoa học đứng đầu của JPL, Gerald J. Holzmann, cho biết: những quy tắc code nghiêm ngặt này tập trung vào sự bảo mật.

Quy tắc 1 (quy tắt quan trong nhất trong 10 quy tắc để code)

Hạn chế tất cả code thành những cấu trúc dòng điều khiển tối giản, không được dùng các statement goto, cấu trúc setjmp hay longjmp, và đệ quy trực tiếp hay gián tiếp.

Quy tắc 2

Tất cả vòng lặp phải có giới hạn trên mức cố định. Công cụ kiểm tra phải có khả năng chứng minh một cách static rằng một preset trên mức cố định trên số lần iteration của vòng lặp không thể bị vượt quá. Nếu giới hạn vòng lặp không thể được chứng minh static, quy tắc được xem là đã vi phạm.

Quy tắc 3

Không sử dụng sự phân bổ bộ nhớ dynamic sau khi khởi tạo phải nhớ trong 10 quy tắc để code.

Quy tắc 4

Không có function nào được dài hơn những gì được in trên một tờ giấy ở định dạng tham chiếu tiêu chuẩn với một line trên mỗi statement và một line trên mỗi declaration. Thông thường, điều này có nghĩa là không quá 60 line code cho mỗi function.

Quy tắc 5

Mật độ xác nhận của code phải trung bình tối thiểu là hai assertion cho mỗi function. Assertion được dùng để kiểm tra các điều kiện bất thường vốn không nên xảy ra trong việc thực thi ngoài đời thực. Assertion phải luôn không kèm theo các tác dụng phụ và nên được xác định như là Boolean test. Khi assertion thất bại, một hành động phục hồi rõ ràng phải được thực hiện, ví dụ: bằng cách trả về một điều kiện error cho caller của function mà thực thi assertion thất bại. Bất kỳ assertion cho cái mà tool kiểm tra static có thể chứng minh rằng nó có thể không bao giờ thất bại hay không bao giờ quy phạm quy tắc này (tức là, không thể thỏa mãn quy tắc này bằng cách thêm các statement “assert(true)” vô ích).

Quy tắc 6

Các đối tượng dữ liệu phải được khai báo ở phạm vi có mức độ nhỏ nhất có thể.

Quy tắc 7

Giá trị trả về của các non-void function phải được kiểm tra bởi mỗi calling function, và tính hợp lệ của các tham số phải được kiểm tra bên trong mỗi function.

Quy tắc 8

Việc sử dụng preprocessor phải được giới hạn dựa theo việc bao gồm các tệp tiêu đề và các định nghĩa macro đơn giản. Việc dán Token hay variable argument list (dấu chấm lửng) hoặc các call macro đệ quy không được cho phép. Tất cả các macro phải mở rộng thành các đơn vị cú pháp hoàn chỉnh. Việc sử dụng các chỉ thị compile có điều kiện cũng thường không rõ ràng, nhưng không thể luôn tránh được. Điều này có nghĩa là sự chứng minh cho nhiều hơn một hay 2 chỉ thị compile có điều kiện nên hiếm khi xảy ra trong effort lập trình phần mềm lớn, vượt ra ngoài boilerplate tiêu chuẩn để tránh đưa vào cùng một tệp tiêu đề. Mỗi lần sử dụng như vậy phải được đánh dấu cờ bởi trình kiểm tra dựa trên bộ công cụ và được chứng minh trong code đó. (10 quy tắc để code)

Quy tắc 9

Việc sử dụng pointer nên bị hạn chế. Đặc biệt, chỉ được cho phép không quá một level của dereferencing. Pointer dereference operations không thể được ẩn trong macro definitions hay bên trong typedef declarations. Các pointer function cũng không được cho phép.

Quy tắc 10 (quy tắc cuối trong 10 quy tắc để code)

Tất cả code phải được compile, từ ngày đầu lập trình, với tất cả compiler warning được kích hoạt tại cài đặt mô phạm nhất của compiler. Tất cả code phải compile với những cài đặt này mà không được dính bất kỳ warning nào. Tất cả code phải được kiểm tra hàng ngày ít nhất một lần, nhưng tốt hơn là nên nhiều hơn một, static source code analyzer tiên tiến nhất và nên vượt qua được phần phân tích với 0 warning.

Đây là những gì NASA nên nói về 10 quy tắc để code: Những quy tắc này cũng giống như cài seatbelt trong chiếc xe hơi của bạn vậy. Ban đầu chúng có thể hơi khó chịu, nhưng sau một thời gian sử dụng chúng trở thành bản chất thứ hai và sẽ khó mà tưởng tượng ra điều gì sẽ xảy ra nếu bạn không sử dụng chúng.

Nguồn:
How To Code Like The Top Programmers At NASA — 10 Critical Rules. Bài viết của AB Staff trên altbulletin.com.
10 quy tắc để code như những lập trình viên hàng đầu tại NASA. Bản dịch tiếng Việt của KASE Edutech.

phone-handsetphonecrossmenu