1 / 44

TỐI ƯU HÓA MÃ NGUỒN

TỐI ƯU HÓA MÃ NGUỒN. Nhóm 10. Các nội dung chính. 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ì?.

zudora
Download Presentation

TỐI ƯU HÓA MÃ NGUỒN

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TỐI ƯU HÓA MÃ NGUỒN Nhóm 10

  2. Các nội dung chính • 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

  3. Tối ưu hóa mã nguồn là gì? • 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ênhơn. Nói chung, một chương trình có thể được tối ưu hóa để nó thực thinhanh 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…

  4. Lý do cần tối ưu hóa mã nguồn. • 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

  5. Tối ưu hóa giao diện • Tốiưuhoágiaodiệnlàgì? • Tốiưuhoágiaodiệnnhưthếnào?

  6. Tốiưuhoágiaodiệnlàgì? • Mộtgiaodiệnkhósửdụng???  ngườidùngcảmthấykhôngthoảimáikhisửdụng, sốlượngngườidùngsẽít • Mộtgiaodiệndễsửdụng, khôngmấtthờigianhướngdẫnnhiều???  ngườidùngsẽcảmthấythoảimáisửdụnghơn, sốlượngngườisửdụngsẽnhiều

  7. Tốiưuhoágiaodiệnlàgì? • Tốiưuhoágiaodiệnlàcôngviệcthiếtkế, pháttriểngiaodiệncủachươngtrìnhđểnângcaotínhtiệndụngcủachươngtrình. • Giaodiệnđãtốiưuhoá: • Trựcquanvớingườidùng • Ítphảihướngdẫnchongườisửdụng • Đúngchuẩngiaodiện???

  8. Tốiưuhoágiaodiệnnhưthếnào? • Tưởngtượngra 1 sốngườidùng • Hình dung racáchoạtđộngquantrọng • Tìm 1 môhìnhsửdụngmàngườidùngmongđợinhất • Phátthảobảnthiếtkếđầutiên • Thayđổibảnthiếtkếsaochophùhợpvớingườisửdụngmàbạntưởngtượngra • Đưangườithậtsựsửdụngrồitiếpthu ý kiến

  9. Tối ưu hóa xử lý • 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 theo 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.

  10. Tối ưu hóa xử lý • 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 intergers 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.

  11. Tối ưu hóa xử lý • 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;

  12. Tối ưu hóa xử lý • 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.

  13. Tối ưu hóa xử lý • 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,

  14. Tối ưu hóa xử lý • 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) then… (C++, Java hỗ trợ) If(5<x) then If(x<10) then … 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.

  15. Tối ưu hóa xử lý • 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)

  16. Tối ưu hóa xử lý Tốiưu : if ( sumType == SUMTYPE_NET ) { for ( i = 0; i < count; i++ ) { netSum = netSum + amount[ i ]; } } else { for ( i = 0; i < count; i++ ) { grossSum = grossSum + amount[ i ]; } } 2. Loop: Vònglặpđượcthựcthinhiềulầntrongchươngtrình, và nó là điểmnóngtrongchươngtrình, và chúngtaphảilàmchúngnhanhhơn. • Unswitching: là đặtbiểuthứcđiềukiệnbênngoàivònglặpthay vì đặtbêntrongvònglặp( switching). for ( i = 0; i < count; i++ ) { if ( sumType == SUMTYPE_NET ) { netSum = netSum + amount[ i ]; } else { grossSum = grossSum + amount[ i ]; } }

  17. Tối ưu hóa xử lý • Jamming: là kết quả củasự kếthợp 2 vònglặpcùngthựchiệntrên 1 tậphợpcácgiá trị. for (inti=0;i< employeeCount;i++) employeeName[i]=””; for (inti=0;i< employeeCount;i++) employeeEarnings[i]=0; Tốiưu: for (inti=0;i< employeeCount;i++) { employeeName[i]=””; employeeRarnings[i]=0; }

  18. Tối ưu hóa xử lý • Unrolling : giảmsố lầnlặp. Nhưngtrongtrườnghợpnàythì tăngkíchthướcvònglặp( số dòng code). Phươngphápnàythì chi phí lặpgiảmkhôngđángkể. • Minimizing the Work Inside Loops: giảmcôngviệclàmtrongvònglặp, thựchiệnbênngoàivònglặpvà trongvònglặpápdụngkết quả có được ở ngoàivònglặp. • Sentinel Values: giá trị línhgác , ápdụngtrongtrườnghợptrongvònglặp có điềukiệnkép, và chuyểnthành 1 điềukiệnđơngiản.

  19. Tối ưu hóa xử lý • Putting the Busiest Loop on the Inside: đặtvònglặp có số lẩnlặpnhiềunhấtđặtbêntrong. VD: for ( column = 0; column < 100; column++ ) for ( row = 0; row < 5; row++ ) sum = sum + table[ row ][ column ]; • Strength Reduction: đốivớibêntrongvònglặp có nhânvà hànhđộngphứctạpta có thể thaybằng 1 hoatđộngđơngiảnhơnvà tínhtoán 1 con số thaynhân, và con số nàytăngsaumỗilầnlặp.

  20. Tối ưu hóa kiến trúc • 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

  21. Tối ưu hóa kiến trúc • Tạisaophảicókiếntrúc • Chấtlượngcủakiếntrúcquyếtđịnhtínhthốngnhấtcủahệthống • Xácđịnhchấtlượngcuốicùngcủahệthống • Tạocấutrúcđểduytrìtínhthốngnhấttừcấpcaoxuốngcấpthấp • Cungcấphướngdẫncholậptrìnhviên ( ở 1 mứcđộphùhợpvớikĩnăngcủahọvàvớicôngviệcđanglàm) • Nóphầnvùnglàmviệcđểnhiềunhàpháttriển hay cácnhómpháttriểncóthểlàmviệc 1 cáchđộclập

  22. Tối ưu hóa kiến trúc Good architecture makes construction easy Bad architecture makes construction almost imposible

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

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

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

  26. Tối ưu hóa kiến trúc • Data Design • Mô tả những file và bảng chính được sử dụng • Mô tả các phương án thay thế được xem 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

  27. Tối ưu hóa kiến trúc • Business Rules • Xác định các business rule(qui luật kinh doanh) và mô tả các qui tắc có ảnh hưởng đến hệ thống

  28. 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 Web page, GUIs, Command line, interfaces,…. • Mô hình hóa

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

  30. Tối ưu hóa kiến trúc • Security • Mô tả cách tiếp cận design-level và code-level security. • Phát triển Coding Guiddlines với Security

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

  32. 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ủ, network nodes, database records 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.

  33. Tối ưu hóa kiếntrú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

  34. Tối ưu hóa kiếntrúc • Input/Output • Chỉ rõ a look – ahead, look – behind, 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

  35. Tối ưu hóa kiếntrú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 project không làm việc

  36. Tối ưu hóa kiếntrúc • Overengineering • Chỉ ra các sai lầm trên khía cạnh thiết kế

  37. Tối ưu hóa kiếntrú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

  38. Tối ưu hóa kiếntrú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

  39. Tối ưu hóa kiếntrú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 xem 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ễ.

  40. Tối ưu hóa kiếntrú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

  41. Các công cụ hỗ trợ • Thôngthườ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

  42. Các công cụ hỗ trợ 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

  43. Demo • Sử dụng công cụ ANTS performance profiler 6.2.3

  44. Tài liệu tham khảo • Clean Code A Handbook of Agile Software Craftsmanship, Robert C.Martin • Microsoft Press Code Complete Second Edition eBook

More Related