CODING STANDARD - xaydungphanmem

Download Report

Transcript CODING STANDARD - xaydungphanmem

0812543 – TrầnVăn Tri 0812546 – Nguyễn Anh Trí 0812548 – Nguyễn Minh Trí 0812602 – Tăng Kiên Tường 0812609 – Nguyễn Văn Việt

Nhóm 10

1

Chuẩn mã nguồn

 Tầm quan trọng của các chuẩn mã nguồn  Chuẩn cú pháp  Chuẩn ngữ nghĩa  Phương pháp áp dụng chuẩn mã nguồn  Các chuẩn mã nguồn thông dụng  Các công cụ hỗ trợ chuẩn mã nguồn 2

Coding standards là gì?

 Coding standard là 1 bộ luật ràng buộc các quy tắc viết code mà lập trình viên phải tuân theo nhằm tạo sự thống nhất các đoạn code của 1 chương trình.

 Việc tuân thủ các quy tắc này sẽ giúp duy trì khả năng làm việc nhóm, khả năng phát hiện lỗi, khả năng bảo trì và kế thừa của chương trình

Tầm quan trọng của coding standards?

 Một chuẩn code tốt rất quan trọng cho bất kỳ dự án phần mềm nào, nhất là những dự án nhiều người  Góp một phần lớn trong việc đảm bảo chất lượng mã nguồn, ít lỗi và dễ bảo trì  Có ý nghĩa đối với lập trình viên hiểu các dòng code mới nhanh hơn và sâu sắc hơn  Một mã nguồn đưa ra thị trường như là 1 sản phẩm cần phải được đảm bảo là nó đóng gói theo chuẩn nhất định

Chuẩn cú pháp

1.

2.

3.

4.

File Names and Organization (tên file và tổ chức) Indentation (thụt đầu dòng) Formatting (định dạng code) Naming Conventions (qui ước đặt tên)

5

  

Chuẩn cú pháp (tt)

1. File Names and Organization

Sourcefiles: Đặt tên file và phần mở rộng theo 1 chuẩn có thể giúp tối ưu hóa tìm kiếm.

VD: tên file trùng với tên class.

Organization: Sắp xếp các item khác nhau theo thứ tự trong source code. VD: chuẩn Java: Class variables > Instance variables > Constructors > Methods Directory Layout: Tạo thư mục cho mỗi cái namespace. VD: MyProject.TestSuite.TestTier (C#) MyProject/TestSuite/TestTier 6

Chuẩn cú pháp (tt)

2. Indentation

Wrapping Lines: Khi một biểu thức không phù hợp trên một dòng đơn

 Break after a comma.

 Break after an operator.

 Prefer higher-level breaks to lower-level breaks.

 Align the new line with the beginning of the expression at the same level on the previous line longMethodCall(expr1, expr2, expr3, expr4, expr5); BAD STYLE – AVOID: var = a * b / (c - g + f) + 4 * z; PREFER: var = a * b / (c - g + f) + 4 * z; 7

Chuẩn cú pháp (tt)

2. Indentation

White Spaces:

 Chuẩn thụt đầu dòng chưa có đồng nhất về số lượng đơn vị không gian(spaces)  Tốt nhất là dùng Tab vì các lí do sau:    Có thể tùy chọn số lượng đơn vị space Giảm số lượng nhập khoảng trắng.

Tăng giảm Block dễ dàng  Nhiều chuẩn code xác định số lượng khoảng trắng cho chổ thụt vào(indenting).  Các comment trong cùng block phải canh theo cùng 1 lề trái 8

Chuẩn cú pháp (tt)

3. Formatting

Inter-term spacing: khoảng cách  Nên đặt khoảng cách sau dấu phẩy hoặc chấm phẩy VD: TestMethod(a, b, c); don't use : TestMethod(a,b,c) or: TestMethod( a, b, c );  Xung quanh các toán tử VD: a = b; // don't use a=b; for (int i = 0; i < 10; ++i) don't use: or for (int i=0; i<10; ++i) for(int i=0;i<10;++i) 9

Chuẩn cú pháp (tt)

3. Formatting

Put braces: Đặt dấu ngoặc { … }  Tùy theo các chuẩn qui định  GNU, Linux , và các chương trình Windows if (ia->ia_maddr != MADDRUNK) { sc->pPacketPagePhys = ia->ia_maddr; }  BSD và Java if ((cp = strchr(*argv, ':')) != NULL) { *cp++ = '\0'; a_gid(cp); } 10

Chuẩn cú pháp (tt)

3. Formatting

Comment: chú thích cho nội dung dòng code  Chú thích cho các thuật toán case 10: /* yy */ lt->tm_year = ATOI2(p); if (lt->tm_year < 69) /* hack for 2000 ;-}*/ lt->tm_year += 100; /* FALLTHROUGH */ case 8: /* mm */ lt->tm_mon= ATOI2(p);  Chú thích cho những phần chưa biết chính xác  Hay những vị trí cần chỉnh sửa trong tương tai.

/* * TODO - sort output */ 11

Chuẩn cú pháp (tt)

4. Naming Conventions

Use of capitalization:

dùng cho Java và Window VD: RandomAccessFile 

Separation of words by underscores:

dùng cho UNIX và GNU VD: exponent_is_negative 

Initials:

dùng cho BSD VD: strcmp //string compare

Ngoài ra, tùy theo chuẩn còn có các qui tắc đặt tên biến, tên class, tên hàm khác nhau để chỉ rõ ý nghĩa, chức năng của biến, hàm đó.

VD:

int iCount; bool isString; public void CheckSum(); Có nên đặt tên biến vòng lặp i,j,k ???

12

Chuẩn ngữ nghĩa

1.

2.

3.

4.

5.

Object Lifeycle (vòng đời đối tượng) Control Flow (luồng điều khiển) Various data types (kiểu dữ liệu) Exception Handling (xử lí ngoại lệ) Coding Style (phong cách code)

13

Chuẩn ngữ nghĩa(tt)

1. Object Lifeycle

Khai báo và khởi tạo đối tượng (object) gần nơi chúng được sử dụng:

dễ dàng theo dõi 

Khởi tạo biến tĩnh (static) trước khi gọi hàm:

để hiểu được giá trị của biến tĩnh, nếu không khởi tạo thường thì trình biên dịch sẽ gắn giá trị là 0 

Gán object = null để báo rằng object đó không còn cần thiết

 cải thiện bộ nhớ 14

Chuẩn ngữ nghĩa(tt)

2. Control Flow

Không nên thay đổi biến lặp bên trong vòng lặp:

đều này gây khó hiểu. Cập nhật biến lặp gần nơi điều kiện vòng lặp được xác định 

Các lệnh (if, else, while, for, do, which) theo sau là block

if (b1) if (b2) Foo(); else Bar();    // which 'if' goes with the 'else'?

Lệnh switch Lệnh phải có default sau case if…else phải lồng hết các trường hợp Đừng so sánh rõ ràng với true, false .

VD: if (conditison == false) //bad if(!condition) //good 15

Chuẩn ngữ nghĩa(tt)

2. Control Flow

Không truy cập hay thay đổi đối tượng nhiều lần trong một biểu thức.

VD: v[i] = ++i; // wrong i = ++i + 1; // wrong 

Không sử dụng câu lệnh lựa chọn (if, switch) thay vì một nhiệm vụ đơn giản hoặc khởi tạo.

{ VD: if (val > 0) bool pos = (val > 0) ? true : false; Hoặc bool pos = (val > 0); pos = true; } else { pos = false; }

16

Chuẩn ngữ nghĩa(tt)

3. Various data types

 Tùy theo ngôn ngữ sử dụng mà có các kiển dữ liệu khác nhau  Nên cân nhắc sử dụng kiểu dữ liệu cho hợp lí VD: khi nào dùng int (Int32,Int64) ? Khi nào dùng double? String? char*?

 Nên dùng hằng số thay cho những giá trị cố định VD: const PI= 3.14

17

Chuẩn ngữ nghĩa(tt)

4. Exception Handling

 Chỉ ném ngoại lệ (thorw exception) trong những tình huống đặc biệt  Bắt trường hợp Exception bằng cách cung cấp một phương thức để trả về trạng thái của đối tượng  Bắt Exception nếu muốn bổ sung thông tin và trả về Messages cho người dùng biết  Không ném một ngoại lệ từ bên trong một hàm ngoại lệ  Các code khác nhau sẽ có chuẩn Exception khác nhau 18

Chuẩn ngữ nghĩa(tt)

5. Coding Style

 Không pha trộn phong cách lập trình trong một nhóm liên quan chặt chẽ như class hoặc trong một module  Mỗi dòng code không nên quá dài. Gây dài dòng khó đọc.

VD: C# không quá 80 kí tự. 19

Phương pháp áp dụng chuẩn

 Làm sao quyết định loại chuẩn nào sẽ được áp dụng và xác định trong chương trình của chúng ta như thế nào?

 Xem tài liệu hướng dẫn áp dụng chuẩn gắn liền với ứng dụng đó  Xác định công cụ hỗ trợ chuẩn mã nguồn  Chúng ta nên hình thành phong cách áp dụng các mã nguồn bằng cách trả lời các câu hỏi sau:  Khoảng trắng giữa các chữ có làm mã nguồn dễ đọc hơn?

 Tên biến này có thể hiện nội dung chưa?

 Tên hàm này có đặt theo đúng chức năng gọi hay ko?

 Chú thích mã nguồn thế nào?

 Thời gian sau quay lại chúng ta có thể dễ đọc, dễ hiểu ko?

20

Các chuẫn mã nguồn thông dụng

Có rất nhiều chuẩn mã nguồn như : GNU, BSD, Java, UNIX, Window...

GNU (GNU compiler collection) : hay còn được gọi là GCC, phát hành năm 1987. o o Là trình biên dịch tiêu chuẩn của các HĐH Unix, Linux, BSD, Mac, nền tảng nhúng như Symbian, AMCC,… Hỗ trợ các ngôn ngữ: Pascal, C, C++, java,… JAVA : ra đời năm 1991 ở Sun Microsystems , phát hành 1994 o Chạy trên mọi nền tảng khác nhau thông qua môi trường thực (hỗ trợ Sun solaris, Linux, Mac OS, FreeBSD, Windows, BEA, IBM,HP,…) o Hỗ trợ trên hầu hết các trình duyệt: Internet Explorer, Firefox, Safari 21

Các chuẫn mã nguồn thông dụng(tt)

Unix: dựa trên PDP-7 (1969-1970), viết bằng ngôn ngữ C.

o AT&T Bell Labs tiếp tục phát triển Unix lần lượt dưới tên gọi hệ thống III, V o Bắt đầu kết hợp với BSD từ hệ thống V BSD(Berkeley Software Distribution ): được phát triển từ Unix, sử dụng rộng rãi trong việc nghiên cứu cho các phần cứng PC o o o FreeBSD: tập trung vào sự cài đặt dễ dàng của dòng máy PC NetBSD: tập trung vào nhiều kiến trúc CPU khác nhau OpenBSD: tập trung vào bảo mật

Các công cụ hỗ trợ chuẩn mã nguồn

 Java: checkstyle, jcsc  C#: stylecop  C++: cppcheck 23

Thank you!

24