56
LOGO “ Add your company slogan ” Chuẩn mã nguồn Eric Lee TOPIC:

Coding Standard (Chuẩn Mã Nguồn)

Embed Size (px)

Citation preview

Page 1: Coding Standard (Chuẩn Mã Nguồn)

LOGO

“ Add your company slogan ”

Chuẩn mã nguồn

Eric Lee

TOPIC:

Page 2: Coding Standard (Chuẩn Mã Nguồn)

Nội dung trình bày

3. Chuẩn hình thức và chuẩn ngữ nghĩa

2. Tầm quan trọng của chuẩn mã nguồn

1.Chuẩn mã nguồn là gì?

5. Phương pháp áp dụng chuẩn mã nguồn

4. Một số chuẩn mã nguồn thông dụng

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

Page 3: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

1. Chuẩn mã nguồn là gì?

Là một bộ luật quy định cách viết code của một chương trình mà các lập trình viên bắt buộc phải tuân theo khi tham gia phát triển chương trình đó.

Đặt tên lớp, thuộc tính, phương thức,… Khoảng trắng. Khai báo và sử dụng biến. Comment trong mã nguồn. …

Page 4: Coding Standard (Chuẩn Mã Nguồn)

Nội dung trình bày

3. Chuẩn hình thức và chuẩn ngữ nghĩa

2. Tầm quan trọng của chuẩn mã nguồn

1.Chuẩn mã nguồn là gì?

5. Phương pháp áp dụng chuẩn mã nguồn

4. Một số chuẩn mã nguồn thông dụng

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

Page 5: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

2. Tầm quan trọng của chuẩn mã nguồn

Dễ bảo trì, sửa lỗi.

public void InsertionSort( int[] data, int firstElement, int lastElement ) {int lowerBoundary = data[ firstElement-1 ]; data[ firstElement-1 ] = SORT_MIN for ( int sortBoundary = firstElement+1; sortBoundary <= lastElement; sortBoundary++ ) { int insertVal = data[ sortBoundary ]; int insertPos = sortBoundary; while ( insertVal < data[ insertPos-1 ] ) { data[ insertPos ] = data[ insertPos-1 ]; insertPos = insertPos-1; } data[ insertPos ] = insertVal; } data[ firstElement-1 ] = lowerBoundary; }

Bạn là một debugger xuất sắcCó người nhờ bạn sửa lỗi chương trình giúp họ

Page 6: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

2. Tầm quan trọng của chuẩn mã nguồn

Dễ bảo trì, sửa lỗi.public void InsertionSort( int[] data, int firstElement, int lastElement ) {

int lowerBoundary = data[ firstElement-1 ];data[ firstElement-1 ] = SORT_MIN;

for ( int sortBoundary = firstElement + 1; sortBoundary <= lastElement; sortBoundary++ ) {

int insertVal = data[ sortBoundary ];int insertPos = sortBoundary;

while ( insertVal < data[ insertPos - 1 ] ) {data[ insertPos ] = data[ insertPos - 1 ];insertPos = insertPos - 1;

} data[ insertPos ] = insertVal;

}

data[ firstElement - 1 ] = lowerBoundary;}

Page 7: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

2. Tầm quan trọng của chuẩn mã nguồn

Để người khác hiểu được mã nguồn của mìnhpublic int F( int n) {

if (n == 0) {return 0;

}

if (n == 1) {return 1;

}

int x = 0;int y = 1;int z;

for (int i = 2; i <= n; i++) {z = x + y;x = y;y = z;

}

return z;}

Page 8: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

2. Tầm quan trọng của chuẩn mã nguồn

Để người khác hiểu được mã nguồn của mìnhpublic int TinhSoFibonacy (int n) {

if (n == 0) {return 0; //n = 0 thì f(n) = 0

} if (n == 1) {

return 1; //n = 1 thì f(n) = 1

}//n >= 2 thì f(n) = f(n – 1) + f(n – 2)int fBeforeBefore = 0;int fBefore = 1;int f;

for (int i = 2; i <= n; i++) {f = fBefore + fBeforeBefore;fBeforeBefore = fBefore;fBefore = f;

}

return f;}

Page 9: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

2. Tầm quan trọng của chuẩn mã nguồn

Thống nhất code giữa các thành viên trong nhómClass NhanVien {

string _maNhanVien;string _hoTen;Date _ngaySinh;

doule luong;double phuCap;

string P_tinhTrangHonNhan;

public int TinhTuoi(){…}pubic double tinhLuongCuoiThang(){…}

}

Bạn được yêu cầu phát triển tiếp class này

Page 10: Coding Standard (Chuẩn Mã Nguồn)

Nội dung trình bày

3. Chuẩn hình thức và chuẩn ngữ nghĩa

2. Tầm quan trọng của chuẩn mã nguồn

1.Chuẩn mã nguồn là gì?

5. Phương pháp áp dụng chuẩn mã nguồn

4. Một số chuẩn mã nguồn thông dụng

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

Page 11: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

3. Chuẩn hình thức và chuẩn ngữ nghĩa

Chuẩn hình thức

Là những quy định liên quan đến sự định dạng của mã nguồn

Thụt đầu dòng

Sử dụng khoảng trắng

Đóng ngoặc, mở ngoặc

Đặt tên lớp, thuộc tính, phương thức

Page 12: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

3. Chuẩn hình thức và chuẩn ngữ nghĩa

Chuẩn ngữ nghĩa

Là những quy định liên quan đến sự thực thi của mã nguồn

Biểu thức so sánh

Cấu trúc điều khiển : if, for, while

Khai báo và sử dụng biến

Cài đặt phương thức

Page 13: Coding Standard (Chuẩn Mã Nguồn)

Nội dung trình bày

3. Chuẩn hình thức và chuẩn ngữ nghĩa

2. Tầm quan trọng của chuẩn mã nguồn

1.Chuẩn mã nguồn là gì?

5. Phương pháp áp dụng chuẩn mã nguồn

4. Một số chuẩn mã nguồn thông dụng

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

Page 14: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

GNU coding standards

Tác giả: Richard Stallman

Phiên bản đầu tiên phát hành vào năm 1987 bởi Free Software Foundation, Inc.

Lần cập nhật gần nhất 12/1/2012.

Ngôn ngữ hỗ trợ : C(chủ yếu), C++, Pascal

Sử dụng nhiều khi phát triển các thống triển khai trên các hệ điều hành Linux, Unix,…

Page 15: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

Code Conventions for the Java Programming Language

Tác giả: Sun Microsystems

Phiên bản đầu tiên phát hành vào năm 1991.

Lần cập nhật gần nhất vào 20/4/1999

Ngôn ngữ hỗ trợ chính: Java

Page 16: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

Philips Healthcare - C# Coding Standard

Tác giả: Philips Healthcare

Phiên bản mới nhất 2.0 phát hành năm 1999.

Ngôn ngữ hỗ trợ chính: C#

Page 17: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

White Space

Nhữngquyđịnhvềsửdụngkhoảngtrắng(space),thụtđầudòng,xuốngdòng,dòngtrống.Giúpchonộidungvănbảnđượctổchứcmộtcáchcóhệthốngđểdễngườiđọcdễdàngtiếpthu.

Page 18: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

White Space

Những quy định về sử dụng khoảng trắng (space), thụt đầu dòng, xuống dòng, dòng trống.

Giúp cho nội dung văn bản được tổ chức một cách có hệ thống để người đọc dễ dàng tiếp thu.

dùng white space khi viết mã nguồn?

Page 19: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

White Space – thụt đầu dòngXác định một chuẩn thụt đầu dòng cho toàn bộ mã nguồn của chương trình.

1 đơn vị thụt đầu dòng = 1 tab(*)

Hoặc, 1 đơn vị thụt đầu dòng = 5 khoảng trắng

Dòng code thứ 20 dùng 2 đơn vị thụt đầu dòng nghĩa là bấm tab 2 lần(*)

Nên dùng tab thay cho khoảng trắng Đỡ tốn công nhập quá nhiều lần khoảng trắng

Có thể tùy chỉnh một đơn vị tab ứng với bao nhiêu khoảng trắng tùy ý

Hai dòng code cách nhau một bậc thì sẽ cách nhau một đơn vị thụt đầu dòng.

Page 20: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

White Space – thụt đầu dòng

int Main(int argc, char *argv[]) {

while(x == y){

DoSomeThing();DoSomeThingElse();if (hasError) {

FixError();}

}}

int Main(int argc, char *argv[]) {while(x == y){

DoSomeThing();DoSomeThingElse();

if (hasError) {

FixError();}

}}

Page 21: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

White Space – Dòng trống

Những dòng code có quan hệ với nhau (cùng thực hiện một công việc) thì gom lại thành một block

Nghĩa là không có dòng trống giữa các đoạn code như trên

Hai block code thì cách nhau ít nhất một dòng trống

Page 22: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

White Space – dòng trống

//do somethingstring connectionString = ReadConnectionString();SqlConnection conn = new SqlConnection(connectionString);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = "SELECT * FROM Customer;";conn.Open();//so something else

Page 23: Coding Standard (Chuẩn Mã Nguồn)

www.themegallery.com

4. Một số chuẩn mã nguồn thông dụng

White Space – dòng trống

//do somethingstring connectionString = ReadConnectionString();SqlConnection conn = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = "SELECT * FROM Customer;";

conn.Open();//so something else

Page 24: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

White Space – inter-term spacingĐặt khoảng trắng sau dấu phẩy và dấu chấm phẩy

TestMethod(a, b, c)

TestMethod(a,b,c)

Đặt khoảng trắng xung quanh các toán tử

a=b;for(int i=0;i<10;i++)

a = b;for(int i = 0 ; i < 10; i++)

Page 25: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Ngoặc tròn

12 + ((100 % 3) * 7) / 8)

C++ version: 12 + 100 % 3 * 7 / 8 = ?

Dùng dấu ngoặc tròn để Người đọc hiểu rõ mục đích của bạn Chắc chắn là trình biên dịch sẽ thực hiện đúng theo ý của bạn

Hãy quyết định dùng dấu ngoặc tròn khi bạn đang phân vân là có nên dùng dấu ngoặc tròn hay không.

12 + ((100 % (3 * 7)) / 8)

Page 26: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Dấu {} ( theo chuẩn C# )Dấu “{” phải được đặt ở dòng mới, không được đặt cùng dòng với các câu if, for, while,…

public class MyClass {

TTheTestEnum FTestVar;

void DoSomething() { if (FTestVar == 10) { //...do something } else { //...do something else } } }

Page 27: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Dấu {} ( theo chuẩn C# )Dấu “{” phải được đặt ở dòng mới, không được đặt cùng dòng với các câu if, for, while,…

public class TTestMeClass { TTheTestEnum FTestVar;

void DoSomething() { if (FTestVar == 10) { //...do something } else { //...do something else } } }

Page 28: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

CommentKhông viết các comment chỉ lặp codeint sum = 0;//Lặp từ 0 đến 100for (int i = 0; i < 100; i++){

//Mỗi lần lặp cộng giá trị sum cho 2 sum = sum + 2;

}

Các comment trên đơn giản chỉ lặp code, chứ không cung cấp thêm thông tin gì cho người đọc.

Làm code dài hơn. Người đọc tốn thời gian đọc nhiều hơn.

Page 29: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

CommentViết các comment không cầu kì; càng đơn giản càng tốt

Page 30: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

CommentViết các comment không cầu kì; càng đơn giản càng tốt

Page 31: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

CommentKhi dùng nhiều endline comment trên các dòng code liên tiếp nhau thì các comment này phải được canh lề như nhau

Page 32: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

CommentKhi dùng nhiều endline comment trên các dòng code liên tiếp nhau thì các comment này phải được canh lề như nhau

Page 33: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Comment

Một số lưu ý khác về comment

Nên vừa code vừa viết comment. Tránh trường hợp viết code xong rồi mới viết comment

Không nên đụng chỗ nào cũng comment, chỉ viết comment khi bạn cảm nhận là đoạn code của mình quá phức tạp.

Page 34: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Quy ước đặt tênQuy tắc viết hoa

Pascal case• Các chữ cái đầu mỗi từ được viết hoa.

• Các chữ còn lại được viết thường.

MyName, PathSource

Camel case• Giống với Pascal case nhưng chữ cái đầu của từ đầu tiên viết

thường

myName, pathSource

Page 35: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Quy ước đặt tênClass Sử dụng danh từ hay cụm danh từ : NhanVien, FormDangNhap,… Dùng Pascal case : NhanVien, FormDangNhap,… Hạn chế viết tắt gây khó hiểu :

Sai: MyRect Đúng: MyRectangle

Không dùng tiền tố khi đặt tên lớp

Sai : CFileStream Đúng : FileStream

Page 36: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Quy ước đặt tênInterface

Giống như đặt tên class nhưng có thêm tiền tố I

IComponent

ICustomAttributeProvider

Page 37: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Quy ước đặt tênPhương thức Pascal Case

TinhLuong

Tên phương thức thể hiện được chức năng của phương thức đóTimSoNguyenToLonNhat, DemSoChan

Tránh đặt tên gây cảm giác mơ hồ, không rõ nghĩaXuatKetQua, SapXep

Không phân biệt tên các phương thức bằng sốTinhLuongNhanVien1, TinhLuongNhanVien2, TinhLuongNhanVien3

Page 38: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Quy ước đặt tênBiến Camel Case

ngaySinh, ngayGiaoHang,…

Không dùng tiền tố

string strHoTen, bool bFlag,…

Tên biến gợi nhớ, tránh viết tắt gây khó hiểu• Đúng

String address

• Sai

String addr

Page 39: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Quy ước đặt tênBiến(tt) Không đặt tên biến chỉ bằng 1 chữ cái như x, y , z,… trừ trường hợp các

biến đếm i, j, k

Không nên đặt tên biến quá dài, hay quá ngắn vì có thể làm rối chương trình hoặc cũng dẫn đến ý nghĩa biến mơ hồ(quá ngắn)

Page 40: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Quy ước đặt tênBiến(tt)

Nếu biến làm thuộc tính của một class thì thêm tiền tố “_” nhằm phân biệt với các biến cục bộ

_maSoSinhVien, _chieuDai, _chieuRong

Page 41: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Viết một phương thức hiệu quả Khi một đoạn code xuất hiện ở nhiều nơi trong chương trình ta gom các

đoạn code đó thành một phương thức

Tiết kiệm thời gian bảo trì, sửa lỗi

Khi trong một phương thức có các đoạn code xử lý phức tạp thì ta nên tách đoạn code phức tạp đó ra thành một phương thức riêng biệt

Dễ dàng theo dõi, debug

Khai báo tham số truyền vào vừa đủ, tránh tình trạng khai báo tham số truyền vào nhưng không sử dụng

Page 42: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Viết một phương thức hiệu quả(tt)Mỗi phương thức chỉ thực hiện một chức năngvoid SapXepVaXuatRaConsole(int a[], int n){

//code sap xep mang//code xuat ra console

}

Yêu cầu mới :Cho một mảng hãy sắp xếp và xuất kết quả ra fileGiải pháp: Viết thêm một phương thức mới SapXepVaXuatRaFile

Lặp lại code sắp xếp mảng

Page 43: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Viết một phương thức hiệu quả(tt)

Kích thước của một phương thức?

Nhiều thí nghiệm cho thấy một phương thức có khoảng từ 50 đến 150 dòng code là hợp lý

(Trích Steve McConnell, Chapter 7.4 - Code Complete, Second Edition. 2004)

Page 44: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Left-hand comparsionC++ : Thực hiện phép so sánh

if (a == 42) { ... } // A right-hand comparison, kiểm tra a có bằng 42. if (42 == a) { ... } // dùng kiểu the left-hand comparison, kiểm tra 42 có

bằng a .

if (a = 42) { ... } // biên dịch không lỗi, kết quả sai khó debug

if (42 = a) { ... } // biên dịch lỗi vì ta thực hiện gán 42 = a

Đối với các ngôn ngữ lập trình sử dụng “=” thực hiện phép gán và “==“ thực hiện so sánh.

Điều gì xảy ra nếu sơ ý viết “==” thành “=”?

Page 45: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Sử dụng biến (variables)Khai báo biến

Tránh tình trạng khai báo biến mà không sử dụng.

Nhiều trình biên dịch warning khi complie

Khai báo tất cả các biến mặc dù trình biên dịch không bắt buộc làm vậy

Visual Basic cho ta sử dụng biến mà không cần khai báo

Không kiểm soát được kiểu dữ liệu và giá trị khởi tạo

Page 46: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Các lệnh if, while, for không nên lồng nhau hơn 3 bậc

Page 47: Coding Standard (Chuẩn Mã Nguồn)

4. Một số chuẩn mã nguồn thông dụng

Các lệnh if, while, for không nên lồng nhau hơn 3 bậc

Page 48: Coding Standard (Chuẩn Mã Nguồn)

Nội dung trình bày

3. Chuẩn hình thức và chuẩn ngữ nghĩa

2. Tầm quan trọng của chuẩn mã nguồn

1.Chuẩn mã nguồn là gì?

5. Phương pháp áp dụng chuẩn mã nguồn

4. Một số chuẩn mã nguồn thông dụng

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

Page 49: Coding Standard (Chuẩn Mã Nguồn)

5. Phương pháp áp dụng chuẩn mã nguồn

1/6. Chọn một bộ chuẩn

Page 50: Coding Standard (Chuẩn Mã Nguồn)

5. Phương pháp áp dụng chuẩn mã nguồn

2/6. Lập checklist các luật muốn áp dụng

Page 51: Coding Standard (Chuẩn Mã Nguồn)

5. Phương pháp áp dụng chuẩn mã nguồn

3/6. Chuẩn bị mã nguồn

Page 52: Coding Standard (Chuẩn Mã Nguồn)

5. Phương pháp áp dụng chuẩn mã nguồn

4/6. Chọn một công cụ hỗ trợ chuẩn mã nguồn

Personal License : $199 Personal License : $99

Personal License : $99

Page 53: Coding Standard (Chuẩn Mã Nguồn)

5. Phương pháp áp dụng chuẩn mã nguồn

5/6. Dùng tool chỉ định các luật trong checklist

Page 54: Coding Standard (Chuẩn Mã Nguồn)

5. Phương pháp áp dụng chuẩn mã nguồn

6/6. Dùng tool áp đặt các luật đã chọn lên mã nguồn

Page 55: Coding Standard (Chuẩn Mã Nguồn)

Nội dung trình bày

3. Chuẩn hình thức và chuẩn ngữ nghĩa

2. Tầm quan trọng của chuẩn mã nguồn

1.Chuẩn mã nguồn là gì?

5. Phương pháp áp dụng chuẩn mã nguồn

4. Một số chuẩn mã nguồn thông dụng

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

Page 56: Coding Standard (Chuẩn Mã Nguồn)

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

Demo