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