CODING STANDARD - xaydungphanmem

Report
Nhóm 10
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
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. File Names and Organization (tên file và tổ chức)
2. Indentation (thụt đầu dòng)
3. Formatting (định dạng code)
4. 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:
PREFER:
var = a * b / (c - g +
var = a * b / (c - g + f) +
f) + 4 * z;
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:
for (int i=0; i<10; ++i)
or
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. Object Lifeycle (vòng đời đối tượng)
2. Control Flow (luồng điều khiển)
3. Various data types (kiểu dữ liệu)
4. Exception Handling (xử lí ngoại lệ)
5. 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 phải có default sau case
 Lệnh 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: pos;
bool pos = (val > 0) ? true : false;
bool
if (val > 0) 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 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,…
o 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 FreeBSD: tập trung vào sự cài đặt dễ dàng của dòng máy PC
o NetBSD: tập trung vào nhiều kiến trúc CPU khác nhau
o 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

similar documents