Week9_ToiUuHoa - xaydungphanmem

Download Report

Transcript Week9_ToiUuHoa - xaydungphanmem

1
TỐI ƯU HÓA MÃ NGUỒN
Nhóm 10
Các nội dung chính
2







Tối ưu hóa mã nguồn là gì?
Lý do cần tối ưu hóa mã nguồn.
Tối ưu hóa giao diện
Tối ưu hóa xử lý (thuật toán, dữ liệu)
Tối ưu hóa kiến trúc
Các công cụ hỗ trợ
Demo
Tối ưu hóa mã nguồn là gì?
3

Tối ưu hóa mã nguồn là quá trình sửa đổi mã
nguồn để cho nó làm việc hiệu quả hơn hoặc sử
dụng ít tài nguyên hơn. Nói chung, một chương
trình có thể được tối ưu hóa để nó thực thi nhanh
hơn, hoặc có khả năng ít tốn bộ nhớ lưu trữ hoặc
các nguồn lực khác như ít hao điện năng hơn…
Lý do cần tối ưu hóa mã nguồn.
4






Tối ưu hóa mã nguồn rất quan trọng
Giúp chương trình thực thi tốt hơn.
Ít tồn tài nguyên.
Nâng chất lượng của mã nguồn.
Dễ tìm ra lỗi hơn.
Dễ sử dụng hơn
Tối ưu hóa giao diện
5


Tối ưu hoá giao diện là gì?
Tối ưu hoá giao diện như thế nào?
Tối ưu hoá giao diện là gì?
6
Một giao diện khó sử dụng???
 người dùng cảm thấy không thoải mái khi
sử dụng, số lượng người dùng sẽ ít
 Một giao diện dễ sử dụng, không mất thời gian
hướng dẫn nhiều???
 người dùng sẽ cảm thấy thoải mái sử
dụng hơn, số lượng người sử dụng sẽ nhiều

Tối ưu hoá giao diện là gì?
7


Tối ưu hoá giao diện là công việc thiết kế, phát
triển giao diện của chương trình để nâng cao
tính tiện dụng của chương trình.
Giao diện đã tối ưu hoá:
 Trực
quan với người dùng
 Ít phải hướng dẫn cho người sử dụng
 Đúng chuẩn giao diện???
Tối ưu hoá giao diện như thế nào?
8






Tưởng tượng ra 1 số người dùng
Hình dung ra các hoạt động quan trọng
Tìm 1 mô hình sử dụng mà người dùng mong
đợi nhất
Phát thảo bản thiết kế đầu tiên
Thay đổi bản thiết kế sao cho phù hợp với người
sử dụng mà bạn tưởng tượng ra
Đưa người thật sự sử dụng rồi tiếp thu ý kiến
Tối ưu hóa xử lý
9


Tó i ưu hó a xử lý : là mọ t công việ c yêu cà u tư duy
thuạ t toá n rá t cao, cù ng với khả năng sử dụ ng
thuà n thụ c cá c cá u trú c dữ liệ u.
Tó i ưu hó a thuạ t toá n có 2 gó c đọ :
 Tó i
ưu không gian: tó i ưu lưu trữ bộ nhớ, dữ liệu.
 Tó i ưu thêo thời gian: là m giả m đọ phức tạ p thuạ t
toá n.

2 điề u trên không phả i lú c nà o cũ ng xả y ra cù ng
1 lú c. Trong nhiề u trường hợp tó i ưu về thời gian
sễ là m tăng không gian lưu trữ và ngược lạ i.
Tối ưu hóa xử lý
10



Tối ưu dữ liệu: Thay đổi trong các kiểu dữ liệu có
thể là một hỗ trợ mạnh mẽ trong việc giảm kích
thước chương trình và cải thiện tốc độ thực thi.
Sử dụ ng intêrgêrs nhanh hơn só float. Phế p cọ ng
và phế p nhân trên só nguyên nhanh hơn só với
float.
Sử dụ ng array ít nhá t có thể . Nế u bạ n có thể cá u
trú c dữ liệ u trên mả ng 1 chiề u thay vì 2,3 chiề u
thì bạ n có thể tiế t kiệ m thời gian.
Tối ưu hóa xử lý
11
VD:
for ( row = 0; row < numRows; row++ )
for ( column = 0; column < numColumns;
column++ )
matrix[ row ][ column ] = 0;
 Tó i ưu:
for ( entry = 0; entry < numRows * numColumns;
entry++ )
matrix[ entry ] = 0;

Tối ưu hóa xử lý
12



Minimize Array References: giả m só lần tham
chiế u đế n phà n tử mả ng:
Use Supplementary Indexes: chỉ só bỏ sung.
Thêm dữ liệ u liên quan là m cho việ c truy cạ p dữ
liệ u hiệ u quả hơn.
String-Length Index: chỉ só đọ dà i chuõ i
Bạn có thể áp dụng các ý tưởng về việc lập chỉ mục
cho chiều dài đến bất kỳ loại dữ liệu có độ dài biến.
Nó thường hiệu quả hơn để theo dõi độ dài của cấu
trúc hơn là tính toán chiều dài mỗi khi bạn cần.
Tối ưu hóa xử lý
13


Independent, Parallel Index Structure: đọ c lạ p,
cá u trú c chỉ mụ c song song. Tạ o cá c chỉ mụ c cho
dữ liệ u để tăng hiệ u quả khi truy xuá t và tìm
kiế m, hay là tạ o cá u trú c dữ liệ u lưu trữ cá c
thông tin quan trọ ng và con trỏ trỏ đế n thông tin
chi tiế t.
Use caching: lưu những giá trị thường dù ng,
Tối ưu hóa xử lý
14
Tối ưu thuật toán:
1. Logic ( cá c biể u thức toá n họ c)
 Ngừng kiể m tra khi bạ n biế t câu trả lời:
VD: If(5<x) and (x<10) thên… (C++, Java hỗ trợ)
If(5<x) then
If(x<10) thên …
Ngừng kiể m tra khi biế t kế t quả thì tó t cho nhiề u
trường hợp. Như tìm kiế m là 1 trường hợp
thường gạ p.

Tối ưu hóa xử lý
15


Sá p xế p cá c điề u kiệ n bà ng tà n só : sá p xế p cá c
điề u kiệ n có khả năng được thực hiệ n trước
trong trường hợp if-then-else.
Substitute table lookup for complicated
expressions( thay thế bả ng tìm kiế m cho biể u
hiệ n phức tạ p)
ưulý
:
Tối ưu hóa Tối
xử
if ( sumType == SUMTYPE_NET ) {
for ( i = 0; i < count; i++ ) {
netSum = netSum + amount[ i ];
}
16
2. Loop: Vò ng lạ p được thực thi nhiề u là n trong
}
chương trình, vàelse
nó là
{ điể m nó ng trong chương
for i(làim
= chú
0; ing
< count;
i++
) {
trình, và chú ng ta phả
nhanh
hơn.
grossSum = grossSum + amount[ i
 Unswitching: là ];
đạ t} biể u thức điề u kiệ n bên
ngoà i vò ng lạ p thay
vì đạ t bên trong vò ng lạ p(
}
switching).
for ( i = 0; i < count; i++ ) {
if ( sumType == SUMTYPE_NET ) {
netSum = netSum + amount[ i ];
}
else {
grossSum = grossSum + amount[ i ];
}
}
Tối ưu hóa xử lý
17

Jamming: là kế t quả củ a sự kế t hợp 2 vò ng lạ p
cù ng thực hiệ n trên 1 tạ p hợp cá c giá trị.
for (int i=0;i< employeeCount;i++)
employeeName[i]=””;
for (int i=0;i< employeeCount;i++)
employeeEarnings[i]=0;
Tó i ưu:
for (int i=0;i< employeeCount;i++)
{
employeeName[i]=””;
employeeRarnings[i]=0;
}
Tối ưu hóa xử lý
18



Unrolling : giả m số là n lạ p. Nhưng trong trường
hợp nà y thì tăng kích thước vò ng lạ p( số dò ng
code). Phương phá p nà y thì chi phí lạ p giả m
không đá ng kể.
Minimizing the Work Inside Loops: giả m công
việ c là m trong vò ng lạ p, thực hiệ n bên ngoà i
vò ng lạ p và trong vò ng lạ p á p dụ ng kế t quả có
được ở ngoà i vò ng lạ p.
Sentinel Values: giá trị lính gá c , á p dụ ng trong
trường hợp trong vò ng lạ p có điề u kiệ n kế p, và
chuyể n thà nh 1 điề u kiệ n đơn giả n.
Tối ưu hóa xử lý
19
Putting the Busiest Loop on the Inside: đạ t vò ng
lạ p có số lả n lạ p nhiề u nhá t đạ t bên trong.
VD:

for ( column = 0; column < 100; column++ )
for ( row = 0; row < 5; row++ )
sum = sum + table[ row ][ column ];

Strength Reduction: đó i với bên trong vò ng lạ p
có nhân và hà nh đọ ng phức tạ p ta có thể thay
bà ng 1 hoat đọ ng đơn giả n hơn và tính toá n 1
con số thay nhân, và con số nà y tăng sau mõ i là n
lạ p.
Tối ưu hóa kiến trúc
20

Kiến trúc phần mềm là gì:

1 phân đoạn cao cấp của thiết kế phần mềm
Được biết như: system architecture, high-level design
và top-level design


Giữ nhiều chi tiết của hệ thống
Tối ưu hóa kiến trúc

Tại sao phải có kiến trúc





Chất lượng của kiến trúc quyết định tính thống nhất của hệ
thống
Xác định chất lượng cuối cùng của hệ thống
Tạo cấu trúc để duy trì tính thống nhất từ cấp cao xuống cấp
thấp
Cung cấp hướng dẫn cho lập trình viên ( ở 1 mức độ phù hợp
với kĩ năng của họ và với công việc đang làm)
Nó phần vùng làm việc để nhiều nhà phát triển hay các nhóm
phát triển có thể làm việc 1 cách độc lập
Tối ưu hóa kiến trúc
Good architecture makes construction easy
Bad architecture makes construction almost imposible
Tối ưu hóa kiến trúc

Typical Architectural Components
Program Organization
 Major Classes
 Data Design
 Business Rules
 User Interface Design
 resource Management
 Security
 Performance
 Scalability
 Interoperability

Internationalization/Localization
 Input / Output
 Error Processing
 Fualt Tolerance
 Architectural Feasibility
 Overengineering
 Buy-vs.-Build Decisions
 Reuse Decisions
 Change Strategy
 General Architectureal Quality

Tối ưu hóa kiến trúc
Program
Organization
Định nghĩa building
block(khối xây dựng) chính
trong chương trình.

Che phủ tất cả các tính năng
bởi ít nhất 1 block.

Kết hợp các yêu cầu chức
năng của 2 hay nhiều block khi
cùng thực hiện 1 chức năng để
tránh xung đột

Tối ưu hóa kiến trúc

Major Classes

Chỉ rõ các class chính được sử dụng.

Xác định chức năng và tương tác của mỗi class

Mô tả phân cấp class
Mô tả cách các class được tổ chức thành hệ thống
phụ

Mô tả sự thiết của những class khácmà được xem
xét

Tối ưu hóa kiến trúc

Data Design
 Mô
tả những filê và bảng chính được sử dụng
 Mô tả các phương án thay thế được xêm xét
 Data nên được truy xuất trực tiếp bởi chỉ 1
subsystem hay class
 Chỉ rõ tổ chức cấp cao và nội dung của bất kì cơ sở
dữ liệu đã sử dụng
 Lựa chọn mô hình lưu trữ dữ liệu
 Xác định các tương tác có thể với các program khác
khi cùng truy xuất cùng 1 dữ liệu
Tối ưu hóa kiến trúc

Business Rules
 Xác
định các businêss rulê(qui luật kinh doanh) và
mô tả các qui tắc có ảnh hưởng đến hệ thống
Tối ưu hóa kiến trúc

User Interface Design
 Cần
được qui định trong kiến trúc phần mềm
 Xác định các yếu tố chính của các địng dạng Wêb
pagê, GUIs, Command linê, intêrfacês,….
 Mô hình hóa
Tối ưu hóa kiến trúc

Resource Management
 Kế
hoạch để quản lý các nguồn tài nguyên như:
database connections, threads, handles.
 Ước tính các nguồn tài nguyên
Tối ưu hóa kiến trúc

Security
 Mô
tả cách tiếp cận dêsign-level và code-level
security.
 Phát triển Coding Guiddlinês với Sêcurity
Tối ưu hóa kiến trúc

Performance
 Ước
tính và giải thích tại sao tin vào kết quả sẽ đạt
được
 Chỉ ra những khu vực có khả năng không đáp ứng
các mục tiêu
 Chỉ rõ yêu cầu sử dụng thuật toán hoặc các loại dữ
liệu cụ thể để đáp ứng mục tiêu hiệu suất.
Tối ưu hóa kiến trúc

Scalability
 Mô
tả cách hệ thống phát triển về số người sử dụng,
số máy chủ, nêtwork nodês, databasê rêcords và
kích thước

Interoperability
 Mô
tả cách chia sẻ dữ liệu hoặc tài nguyên với các
phần mềm, hoặc phần cứng khác như thế nào.
Tối ưu hóa kiến trúc

Internationalization/Localization
 Ước
tính tài nguyên được sử dụng với các chuỗi
 Chỉ ra chuỗi tượng trưng và những vấn đề đã được
xem xét.
 Mô tả những chọn lựa nào được chọn và tại sao
Tối ưu hóa kiến trúc

Input/Output





Chỉ rõ a look – ahead, look – bêhind, hoặc just – in – time
reading scheme
Mô tả cấp độ ở mỗi lỗi nhập xuất nào được phát hiện
 At the field
 Record
 Stream
 File
Đưa ra một chiến lược xử lý các lỗi 1 cách nhất quán
Thiết lập các qui ước thông báo lỗi
Chỉ rõ khi nào gặp ngoại lệ, cách lưu giữ, và được tài liệu hóa
Tối ưu hóa kiến trúc

Fault Tolerance
 Chỉ
ra các kĩ thuật làm tăng khả năng chịu lỗi được
dự kiến

Architectural Feasibility
 Chứng
minh được hệ thống khả thi về mặt kĩ thuật
 Chỉ ra cách mà các vấn đề được kiểm tra khi projêct
không làm việc
Tối ưu hóa kiến trúc

Overengineering
 Chỉ
ra các sai lầm trên khía cạnh thiết kế
Tối ưu hóa kiến trúc

Buy-vs.-Build Decisions
 Mô
tả cách mà các thành phần được xây dựng thông
qua các thư viện có sẵn
Tối ưu hóa kiến trúc

Reuse Decisions
 Mô
tả cách mà phần mềm tái sử dụng sẽ được thực
hiện để phù hợp với các mục tiêu kiến trúc khác
Tối ưu hóa kiến trúc

Change Strategy
 Mô
tả rõ 1 chiến lược để xử lý những thay đổi.
 Chỉ ra những cái tiến có thể được xêm xét và những
cải tiến trông dễ dàng để thực hiện
 Chỉ ra các chiến lược cam kết trong việc chậm trễ.
Tối ưu hóa kiến trúc

General Architectural Quality
 Mục
tiêu của kiến trúc cần được rõ ràng.
 Trình bày tất cả các quyết định quan trọng.
 Xác định rõ ràng các khu vực có rủi ro
 Chứa nhiều quan điểm
Các công cụ hỗ trợ
41

Thông thường việc tối ưu hóa 1 chương trình
thường phức tạp và chỉ dành cho các nhà
chuyên môn hay phụ thuộc vào trình biên
dịch, Tuy nhiên chúng ta có thể sử dụng 1 số
công cụ để phân tích hiệu năng chương trình
từ đó giúp lập trình viên có biết nơi cần tối ưu
mã nguồn trong chương trình
Các công cụ hỗ trợ
42
Một số công cụ phục vụ cho việc tối ưu hóa mã nguồn:
 Acumem slowpotter
 Aqtime: Dùng cho .Net
 DevPartner: Dùng cho .Net và Java
 ANTS Performance Profiler
 CLR profiler: profile liên quan đến memmory trong .Net
 Netbeans frofiler
 Slim tune
Demo
43

Sử dụng công cụ ANTS performance profiler 6.2.3
Tài liệu tham khảo
o
o
Clean Code A Handbook of Agile Software
Craftsmanship, Robert C.Martin
Microsoft Press Code Complete Second Edition
eBook