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

Post on 19-Feb-2017

173 views 3 download

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

LOGO

“ Add your company slogan ”

Chuẩn mã nguồn

Eric Lee

TOPIC:

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

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. …

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

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ọ

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;}

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;}

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;}

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

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

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

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

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

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,…

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

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#

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.

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?

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.

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();}

}}

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

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

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

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++)

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)

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 } } }

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 } } }

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.

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

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

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

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

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.

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

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

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

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

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

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)

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

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

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

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)

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 “=”?

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

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

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

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

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

1/6. Chọn một bộ chuẩ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

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

3/6. Chuẩn bị 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

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

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

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

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

Demo