Cài đặt luật phân tích và thay đổi mã nguồn

Một phần của tài liệu NGHIÊN CỨU PHÁT TRIỂN KỸ THUẬT VÀ GIẢI PHÁP KIỂM THỬ ỨNG DỤNG DI ĐỘNG (Trang 55 - 57)

DI ĐỘNG VÀ PHƯƠNG PHÁP PHÁT TRIỂN LINH HOẠT

2.2. Kỹ thuật phân tích và tái cấu trúc mã nguồn để nâng cao hiệu năng của ứng dụng d

2.2.4.5. Cài đặt luật phân tích và thay đổi mã nguồn

Cơ sở để xây dựng các luật dựa trên [11, 100,86], các luật trong nghiên cứu của

luận án này được xây dựng có chứa thêm những thơng tin hữu ích để sử dụng sau này.

Thơng tin này có thể cung cấp cho người sử dụng một cái nhìn sâu hơn về luật để họ có thể tránh vi phạm luật mà không phải nhờ sự hỗ trợ của ứng dụng về sau.

Các bộ luật được xây dựng dựa trên các nhóm luật (xem Bảng 2.2):

o Giảm tiêu thụ năng lượng: giảm hoạt động CPU, giảm màu sắc độ sáng, giảm các hoạt động mạng.

o Các luật tổng quát, luật chung (có thể áp dụng cho các ngơn ngữ lập trình khác nhau).

o Các luật đặc tả dành riêng cho ngôn ngữ lập trình Java sau đó là các file XML để hiển thị bố cục của giao diện ứng dụng (layout).

o Các luật giúp cải tiến cho mã nguồn sáng sủa hơn, dễ dàng bảo trì hơn. o Các luật giúp giảm các chi phí khác.

Bảng 2.2: Danh sách các luật đã thực hiện trong phạm vi của luận án

STT Tên luật Mô tả

1 FinalVariable Gán cho các biến thuộc tính “final” nếu giá trị của nó khơng thay đổi

2 FieldShouldBeStatic Các thuộc tính “final” nên là “static”

3 AlwaysReuseImmutable- Nên sử dụng các đối tượng bất biến(constant) nếu ConstantObjectsForBetter- có thể

MemoryUtilization

4 UnusedVariable Các biến khơng được sử dụng nên bị loại bỏ 5 UncalledPrivateMethod Các phương thức “private” không được sử dụng

nên được loại bỏ

6 ShouldBeStaticInnerClass Các lớp trong nên sử dụng là tĩnh nếu có thể 7 AvoidUsingMathClass- Tránh sử dụng các phương thức của lớp “Math”

MethodsOnConstant trên các hằng số

8 ConstantExpression Các biểu thức mà giá trị của nó là hằng số nên được tính tốn ln

9 UseShiftOperators Nên sử dụng các phép toán dịch bit thay cho các phép toán nhân chia cho lũy thừa của 2

10 UseShortCircuit- Sử dụng “||”, “&&” thay cho “|”, “&” BooleanOperators

STT Tên luật Mô tả

11 UseStringLength- Sử dụng “String.length()” thay cho CompareEmptyString “String.equal()” khi kiểm tra xâu rỗng

12 UseStringEqualsIgnoreCase Sử dụng “String.equalsIgnoreCase()” thay cho “String.equals()” khi so sánh xâu chuỗi nếu có thể 13 AvoidUnnecessarySubstring Tránh sử dụng “String.substring()” nếu không cần

thiết

14 AvoidUsingStringCharAt Tránh sử dụng “String.charAt()” nếu có thể 15 AvoidConcatenatingString- Tránh sử dụng toán tử “+” của lớp “String” để nối

UsingPlusOperatorInLoop chuỗi trong vòng lặp

16 UseSingleQuotesWhen- Khi nối một ký tự vào một chuỗi, sử dụng dấu nháy ConcatenatingCharacter- đơn (kiểu “char”) thay vì dấu nháy kép (kiểu

ToString “String”)

17 AvoidUsingStringTokenizer Tránh sử dụng “StringTokenizer”

18 Nếu chỉ khởi tạo các đối tuợng từ lớp bao của các BoxedPrimitiveJust- kiểu dữ liệu nguyên thủy để sử dụng phương thức

CallToString “toString()” thì có thể sử dụng phương thức tính “toString()” của những lớp bao đó thay thế 19 AvoidConstructing- Tránh khởi tạo các đối tuợng của lớp bao của các

PrimitiveType kiểu dữ liệu nguyên thủy qua toán tử “new” 20 AvoidInstantiation-ForGetCla Tránh khởi tạo đối tuợng chỉ để gọi phương thức

“getClass()”

21 AvoidBooleanArray Tránh sử dụng mảng các phần tử kiểu “bool” 22 AvoidEmptyLoops Tránh sử dụng các vòng lặp rỗng

23 AvoidEmptyStaticInitializer Tránh sử dụng khối khởi tạo tĩnh rỗng 24 AvoidEmptyTryBlocks Tránh sử dụng khối “try” rỗng

25 AvoidEmptyFinallyBlock Tránh sử dụng khối “finally” rỗng 26 AvoidEmptyCatchBlocks Tránh sử dụng khối “catch” rỗng

27 AvoidEmptySynchronized- Tránh sử dụng khối “synchronized” rỗng Block

28 AvoidEmptyIf Tránh sử dụng câu điều kiện rỗng

29 AvoidUnnecessaryIf Câu điều kiện luôn hoặc không bao giờ xảy ra nên bị loại bỏ

30 AvoidWriteByteMethod- Tránh sử dụng “DataOutputStream.writeByte()”

InLoop trong vòng lặp

31 AvoidReadByteMethod-InLoo Tránh sử dụng “DataInputStream.readByte()” trong vòng lặp

32 AvoidMethodCallsInLoop Tránh gọi các phương thức trong vịng lặp nếu có thể

33 AvoidObjectInstantiation- Tránh khởi tạo các đối tuợng trong vòng lặp InLoops

34 PlaceTryCatchOutOfLoop Nên đặt “try/catch” ra bên ngồi vịng lặp nếu có thể

35 AvoidVectorElementAt- Tránh sử dụng “Vector.elementAt()” trong vịng

InsideLoop lặp

36 EnsureEfficientRemoval- Xóa các phần tử của “Collection” trong vịng lặp OfElementsInCollection một cách hiệu quả

37 EnsureEfficientRemoval- Xóa các phần tử của “Map” trong vịng lặp một OfMapEntries cách hiệu quả

STT Tên luật Mô tả

38 EnsureEfficientIteration- Duyệt qua các phần tử của “Map” một cách hiệu

OverMapEntries quả

39 UseEntrySetInsteadOf-KeySe Nên sử dụng “Map.entrySet()” thay cho “Map.keySet()”

40 AvoidPollingLoops Tránh sử dụng “Thread.sleep()” trong vòng lặp 41 AvoidUsingThreadYield Tránh sử dụng “Thread.yield()”

42 AvoidCreatingThread- Tránh khởi tạo “Thread” nếu khơng có đối tuợng WithoutRunMethod “implement” phương thức “run”

43 AvoidSynchronized- Tránh sử dụng các khối “synchronized” trong

BlocksInLoop vòng lặp

44 AvoidSynchronized- Tránh sử dụng các phương thức “synchronized” MethodsInLoop trong vòng lặp

45 AvoidSynchronized- Tránh sử dụng “synchronized” đối với một phương ModifierInMethod thức nếu có thể

46 AvoidLinkedList Tránh sử dụng “LinkedList” nếu có thể

47 DefineInitialCapacities Nên định truớc kích thuớc ban đầu của một “AbstractList”

48 UseToArrayWithArray- Sử dụng “Collection.toArray(Object[])” thay cho AsParameter “Collection.toArray()”

49 UseDataSourceInstead- Nên sử dụng “DataSource” thay cho OfDriverManager “DriverManager” để lấy đối tuợng “Connection”

Một phần của tài liệu NGHIÊN CỨU PHÁT TRIỂN KỸ THUẬT VÀ GIẢI PHÁP KIỂM THỬ ỨNG DỤNG DI ĐỘNG (Trang 55 - 57)

Tải bản đầy đủ (DOC)

(143 trang)
w