Bài giảng Phân tích và thiết kế hệ thống - Chương 4: Phân tích và thiết kế hướng đối tượng - Trần Thị Kim Chi

1. Tổng quan về phân tích và thiết kế 2. Mục đích của phân tích 3. Qui trình phân tích yêu cầu 4. Các bước phân tích theo hướng đối tượng 5. Mục đích của thiết kế 6. Qui trình thiết kế 7. Phương pháp phân tích và thiết kế hướng đối tượng 8. Phân tích Use case 9. Đặc tả Use Case 10. Phân tích Use case nghiệp vụ

pdf179 trang | Chia sẻ: candy98 | Lượt xem: 857 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Phân tích và thiết kế hệ thống - Chương 4: Phân tích và thiết kế hướng đối tượng - Trần Thị Kim Chi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM KHOA CÔNG NGHỆ THÔNG TIN Chương IV Trần Thị Kim Chi 1 NỘI DUNG 1. Tổng quan về phân tích và thiết kế 2. Mục đích của phân tích 3. Qui trình phân tích yêu cầu 4. Các bước phân tích theo hướng đối tượng 5. Mục đích của thiết kế 6. Qui trình thiết kế 7. Phương pháp phân tích và thiết kế hướng đối tượng 8. Phân tích Use case 9. Đặc tả Use Case 10. Phân tích Use case nghiệp vụ Trần Thị Kim Chi 2 MỤC ĐÍCH CỦA PHÂN TÍCH VÀ THIẾT KẾ The purposes of Analysis and Design are to:  Transform the requirements into a design of the system-to-be.  Evolve a robust architecture for the system.  Adapt the design to match the implementation environment, designing it for performance. Trần Thị Kim Chi 3 TỔNG QUAN VỀ PHÂN TÍCH VÀ THIẾT KẾ Supplementary Specification Use-Case Model Data Model Architecture Document Analysis and Design Glossary Design Model Trần Thị Kim Chi 4 ANALYSIS VERSUS DESIGN Analysis Design  Focus on understanding the problem  Idealized design  Behavior  System structure  Functional requirements  A small model  Focus on understanding the solution  Operations and attributes  Performance  Close to real code  Object lifecycles  Nonfunctional requirements  A large model Trần Thị Kim Chi 5 Analysis and Design Are Not Top-Down or Bottom-Up Design Classes Subsystems Use Cases Bottom Up Top Down (Define a middle level) Analysis and Design Analysis Classes Trần Thị Kim Chi 6 • Mục đích của hoạt động phân tích yêu cầu là xây dựng mô hình phân tích với các đặc điểm sau :  dùng ngôn ngữ của nhà phát triển để miêu tả mô hình.  thể hiện góc nhìn từ bên trong của hệ thống.  được cấu trúc từ các class phân tích và các package phân tích.  được dùng chủ yếu bởi nhà phát triển để hiểu cách thức tạo hình dạng hệ thống.  loại trừ mọi chi tiết dư thừa, không nhất quán.  phát họa các hiện thực cho các chức năng bên trong hệ thống.  định nghĩa các dẫn xuất use-case, mỗi dẫn xuất use-case cấp phân tích miêu tả sự phân tích 1 use-case. Mục đích của phân tích yêu cầu Trần Thị Kim Chi 7 CÁC BƯỚC CHÍNH CỦA PHÂN TÍCH • Phân tích yêu cầu – Phân tích nghiệp vụ – Phân tích các yêu cầu theo quy trình xử lý – Bổ sung các quy trình cho phù hợp với máy tính – Yêu cầu bổ sung các thông tin • Xác lập tính năng hệ thống – Xác lập các chức năng mà hệ thống sẽ bao gồm – Xác lập các điều kiện và môi trường hoạt động • Xác thực tính năng hệ thống – Xác thực với người dùng về tính hợp lý và đầy đủ của các tính năng – Xác thực các quy trình nghiệp vụ – Xác thực các ràng buộc Trần Thị Kim Chi 8 PHÂN TÍCH NGHIỆP VỤ Mô hình nghiệp vụ mô tả: • các chức năng nghiệp vụ của một tổ chức • mối quan hệ bên trong giữa các chức năng đó cũng như các mối quan hệ của chúng với môi trường bên ngoài Mô hình phân rã chức năng • Là mô hình nghiệp vụ của hệ thống • Mô tả sự phân chia các chức năng nghiệp vụ của tổ chức thành các chức năng nhỏ hơn theo một thứ bậc xác định. Chức năng nghiệp vụ: • Tập hợp các công việc mà tổ chức cần thực hiện trong hoạt động của nó. Trần Thị Kim Chi 9 PHÂN TÍCH NGHIỆP VỤ • Chức năng được xem xét ở các mức độ từ tổng hợp đến chi tiết: – Một lĩnh vực hoạt động (area of activites) – Một hoạt động (activity) – Một nhiệm vụ (task) – Một hành động (action) Trần Thị Kim Chi 10 PHÂN TÍCH NGHIỆP VỤ Quy tắc phân rã • Mỗi chức năng được phân rã phải là một bộ phận thực sự tham gia thực hiện chức năng đã phân rã ra nó • Việc thực hiện tất cả các chức năng ở mức dưới phải đảm bảo thực hiện chức năng ở mức trên đã phân rã ra chúng Bố trí mô hình • Ở mỗi mức, các chức năng cùng mức sắp xếp trên cùng một hàng. Riêng mức cuối cùng có thể sắp xếp theo hàng dọc. • Bố trí cân đối, rõ ràng để dễ kiểm tra, theo dõi Trần Thị Kim Chi 11 PHÂN TÍCH NGHIỆP VỤ Đặt tên chức năng • Mỗi chức năng có một tên duy nhất • Công thức Mô tả chi tiết chức năng ở mức cuối • Tên chức năng • Các sự kiện kích hoạt • Quy trình thực hiện • Dữ liệu vào, ra • Công thức tính toán sử dụng (nếu có) • Quy tắc nghiệp vụ cần tuân thủ Trần Thị Kim Chi 12 PHÂN TÍCH NGHIỆP VỤ Ma trận thực thể - chức năng • Nhằm xác định mối liên hệ giữa các chức năng và thực thể trong hệ thống • Bao gồm các dòng là các chức năng ở mức tương đối chi tiết, các cột là thực thể • Mỗi ô giao giữa dòng và cột có thể là – C (Create - chức năng tạo ra dữ liệu mới trong thực thể) – R (Read - chức năng đọc dữ liệu trong thực thể) – U (Update - chức năng cập nhật dữ liệu trong thực thể) • Cho phép xem xét, phát hiện ra những khiếm khuyết trong khảo sát, loại bỏ những chức năng và thực thể thừa Trần Thị Kim Chi 13 PHÂN TÍCH NGHIỆP VỤ Ma trận thực thể - chức năng Trần Thị Kim Chi 14 PHÂN TÍCH NGHIỆP VỤ Các bước xây dựng mô hình nghiệp vụ • Mô tả bài toán • Lập bảng phân tích: – Lập danh sách các danh từ và các nhóm động từ+bổ ngữ – Cột nhận xét: • Bỏ qua danh từ chỉ khái niệm hay vật thể • Đánh dấu các danh từ là tác nhân và vật mang tin (thực thể dữ liệu) Trần Thị Kim Chi 15 PHÂN TÍCH NGHIỆP VỤ Các bước xây dựng mô hình nghiệp vụ • Lập danh sách các công việc và các hồ sơ dữ liệu sử dụng • Lập biểu đồ phân rã chức năng • Lập ma trận thực thể dữ liệu - chức năng • Trần Thị Kim Chi 16 PHÂN TÍCH NGHIỆP VỤ Ví dụ : Xây dựng mô hình nghiệp vụ cho bài toán • Một bãi gửi xe có 2 cổng: một cổng xe vào, một cổng xe ra. Người ta chia bãi thành 4 khu dành cho 4 loại xe khác nhau: xe máy, xe buýt, xe tải và công-ten-nơ. • Khi khách đến gửi xe, người coi xe nhận dạng xe theo bảng phân loại, sau đó kiểm tra chỗ trống trong bãi. Nếu chỗ dành cho loại xe đó đã hết thì thông báo cho khách. Ngược lại thì ghi vé đưa cho khách và hướng dẫn xe vào bãi, đồng thời ghi những thông tin trên vé vào sổ xe vào. Trần Thị Kim Chi 17 PHÂN TÍCH NGHIỆP VỤ Ví dụ : Xây dựng mô hình nghiệp vụ cho bài toán • Khi khách lấy xe, người coi xe kiểm tra vé xem vé là thật hay giả, đối chiếu vé với xe. Nếu vé giả hay không đúng xe thì không cho nhận xe. Ngược lại thì viết phiếu thanh toán và thu tiền của khách, đồng thời ghi các thông tin cần thiết vào sổ xe ra. • Khi khách đến báo cáo có sự cố thì kiểm tra xe trong sổ xe vào và sổ xe ra để xác minh xe có gửi hay không và đã lấy ra chưa. Nếu không đúng như vậy thì không giải quyết. Trong trường hợp ngược lại tiến hành kiểm tra xe ở hiện trường. Nếu đúng như sự việc xảy ra thì tiến hành lập biên bản giải quyết và trong trường hợp cần thiết thì viết phiếu chi bồi thường cho khách. Trần Thị Kim Chi 18 PHÂN TÍCH NGHIỆP VỤ Ví dụ : Mô tả bài toán Trần Thị Kim Chi 19 PHÂN TÍCH NGHIỆP VỤ Ví dụ : Lập bảng phân tích Trần Thị Kim Chi 20 PHÂN TÍCH NGHIỆP VỤ Ví dụ : Lập bảng phân tích Trần Thị Kim Chi 21 PHÂN TÍCH NGHIỆP VỤ Cách nhóm các chức năng theo phuơng pháp từ dưới lên Trần Thị Kim Chi 22 PHÂN TÍCH NGHIỆP VỤ Cách nhóm các chức năng theo phuơng pháp từ dưới lên Mô hình phân rã chức năng quản lý trông gửi xe Trần Thị Kim Chi 23 PHÂN TÍCH NGHIỆP VỤ • Danh sách hồ sơ dữ liệu Trần Thị Kim Chi 24 PHÂN TÍCH NGHIỆP VỤ Ma trận thực thể - chức năng Trần Thị Kim Chi 25 PHÂN TÍCH NGHIỆP VỤ Ma trận thực thể - chức năng Trần Thị Kim Chi 26 PHÂN TÍCH NGHIỆP VỤ Ma trận thực thể - chức năng Trần Thị Kim Chi 27 PHÂN TÍCH NGHIỆP VỤ Ma trận thực thể - chức năng Trần Thị Kim Chi 28 CÁC ARTIFACTS CẦN TẠO RA TRONG PHÂN TÍCH YÊU CẦU Mô hình phân tích = hệ thống phân tích :  các class phân tích – boundary class – entity class. – control class  các dẫn xuất use-case cấp phân tích : – các lược đồ class phân tích – các lược đồ tương tác (cộng tác,...). – 'flow of events' ở cấp phân tích – các yêu cầu đặc biệt của use-case  các package phân tích  đặc tả kiến trúc (view of analysis model) Trần Thị Kim Chi 29 CÁC WORKERS TRONG PHÂN TÍCH YÊU CẦU Component Engineer Analysis Model Use-Case Engineer Architect Architecture Description Use-Case Realization - Analysis Analysis class Analysis package chịu trách nhiệm về chịu trách nhiệm về chịu trách nhiệm về Trần Thị Kim Chi 30 QUI TRÌNH PHÂN TÍCH YÊU CẦU Architect Use-Case Engineer Architectural Analysis Analyze a Use-Case Analyze a Class Analyze a Package Component Engineer Trần Thị Kim Chi 31 Phân tích kiến trúc : nhận dạng các package phân tích Supplementary Specification Glossary Use-Case Model Architectural Analysis Design Model Reference Architecture Deployment Model Vision Document Software Architecture Doc Project-Specific Guidelines Trần Thị Kim Chi 32 Phân tích kiến trúc : nhận dạng các package phân tích • Mục đích của phân tích kiến trúc là phát họa mô hình phân tích và kiến trúc hệ thống bằng cách nhận dạng các package phân tích, các class phân tích dễ thấy và các yêu cầu đặc biệt chung cho hệ thống. • Các package phân tích giúp tổ chức hệ thống thành những đơn vị nhỏ dễ quản lý. Mỗi package chứa 1 số use-case với tính chất sau :  các use-case hỗ trợ cho cùng 1 qui trình nghiệp vụ.  các use-case hỗ trợ cho cùng 1 actor.  các use-case có quan hệ lẫn nhau : tổng quát hóa, include và extend. • Theo thời gian, khi việc phân tích tiến triển, sự tinh chế cấu trúc các package sẽ tiến triển theo. Trần Thị Kim Chi 33 Phân tích kiến trúc : nhận dạng các class thực thể dễ thấy • Từ các class lĩnh vực hay các class nghiệp vụ nắm bắt yêu cầu, đề nghị 1 số class thực thể quan trọng nhất (từ 10-20). • Các class phân tích còn lại sẽ được nhận dạng trong hoạt động phân tích use-case. • Các yêu cầu đặc biệt cũng được nhận dạng để được xử lý trong các bước sau, chúng gồm :  tính bền vững.  sự phân tán & đồng thời.  các tính chất an toàn dữ liệu.  đề kháng với lỗi.  quản lý giao tác. • Tính chất của mỗi yêu cầu đặc biệt sẽ được cân nhắc sau trong từng class và từng dẫn xuất use-case. Architecture Design Implementation Code Trần Thị Kim Chi 34 Phân tích use-case Process View Deployment View Logical View Use-Case View Implementation View End-user Functionality Programmers Software management Performance, scalability, throughput System integrators System topology, delivery, installation, communication System engineering Analysts/Designers Structure Trần Thị Kim Chi 35 Phân tích use-case Phân tích use-case là để :  nhận dạng các class phân tích có đối tượng của chúng tham gia vào việc thực hiện 'flow of events' của use-case.  phân phối hành vi của use- case bằng cách cho các đối tượng phân tích tương tác nhau.  nắm bắt 1 số yêu cầu đặc biệt cho dẫn xuất use-case. Trần Thị Kim Chi 36 Phân tích use-case : nhận dạng các class phân tích • Trong bước này ta nhận dạng các class điều khiển, biên, thực thể cần thiết để hiện thực use-case và phát họa tên, trách nhiệm, thuộc tính và các mối quan hệ giữa chúng. • Cách nhận dạng các thành phần :  nhận dạng các class thực thể bằng cách chú ý các thông tin trong đặc tả use-case và trong mô hình lĩnh vực.  nhận dạng class biên cơ sở cho mỗi class thực thể vừa tìm được.  nhận dạng class biên trung tâm cho mỗi actor là con người.  nhận dạng class biên trung tâm cho mỗi actor là hệ thống ngoại hay thiết bị I/O.  nhận dạng class điều khiển có trách nhiệm xử lý trong dẫn xuất use-case. • Tập hợp các class phân tích tham gia vào dẫn xuất use-case thành 1 (hay nhiều) lược đồ class. Trần Thị Kim Chi 37 Phân tích use-case : nhận dạng các class phân tích Trần Thị Kim Chi 38 Phân tích use-case : Hiện thực hóa use case (Use-Case Realization) Trần Thị Kim Chi 39 Thí dụ về lược đồ class phân tích cho use-case Pay Invoice Payment Request UI Order Configmation Order Handler Payment Request Payment Scheduler Invoice Buyer (f rom Use-Case Model) Trần Thị Kim Chi 40 Phân tích use-case : miêu tả sự tương tác giữa các đối tượng phân tích Các bước phân tích Use Case: 1. Bổ sung vào đặc tả use case 2. Hiện thực hóa use case (UC realization) – Tìm các lớp từ hành vi của use case – Phân phối hành vi của use case vào các lớp 3. Phân tích lớp (analysis class) – Mô tả thuộc tính và sự kết hợp – Mô tả nhiệm vụ – Gán cơ chế phân tích 4. Hợp nhất các lớp phân tích Trần Thị Kim Chi 41 Phân tích class • Mục đích của việc phân tích class là :  nhận dạng và duy trì các nghĩa vụ, trách nhiệm của class phân tích dựa vào vai trò của nó trong dẫn xuất use-case.  nhận dạng và duy trì các thuộc tính và các mối quan hệ của class phân tích.  nắm bắt các yêu cầu đặc biệt liên quan đến việc hiện thực class phân tích  Tổ hợp các vai trò mà class đóng trong các dẫn xuất use-case khác nhau sẽ cho ta 1 số nghĩa vụ của class.  Nghiên cứu các lược đồ class và lược đồ tương tác trong các dẫn xuất use-case có class tham gia.  Đôi khi cần nghiên cứu 'flow of events cấp phân tích' của dẫn xuất use-case để tìm thêm các nghĩa vụ các class Trần Thị Kim Chi 42 Phân tích class Trần Thị Kim Chi 43 Phân tích class : nhận dạng mối quan hệ giữa các class • Các đối tượng tương tác nhau thông qua các lược đồ cộng tác. • Mối quan hệ gộp nên được dùng khi các đối tượng miêu tả :  các khái niệm chứa vật lý khái niệm khác (xe chứa tài xế và khách)  các khái niệm được xây dựng từ các khái niệm khác (xe gồm các bánh xe và động cơ).  các khái niệm tạo thành tập hợp ý niệm nhiều đối tượng (gia đình gồm cha, mẹ và con). • Để rút trích các hành vi chung của nhiều class phân tích, ta có thể dùng class tổng quát hóa, nhưng chỉ nên ở cấp ý niệm. Trần Thị Kim Chi 44 Phân tích class : nhận dạng mối quan hệ giữa các class System boundary Use-case behavior coordination System information > > > System information > System boundary > System boundary Use-case behavior coordination System information System information System boundary Trần Thị Kim Chi 45 LỚP GIAO DIỆN -BOUNDARY CLASS • Thực hiện chức năng giao tiếp với actor • Thường chứa các phần tử giao diện hoặc điều khiển giao diện người dùng( button, listbox, option group, menu) • Trong UML được gán stereotype là > • Khó nhận biết các thuộc tính và tác vụ trong mô hình phân tích • Ví dụ: đối với hệ thống quản lý thư viện, các đối tượng biên như: TheMuonForm, BanDocForm, Form_DangNhap Trần Thị Kim Chi 46 LỚP GIAO DIỆN -BOUNDARY CLASS • Là lớp trung gian giữa giao diện và hệ thống bên ngoài • Phân loại – User interface classes – System interface classes – Device interface classes • Cách xác định lớp boundary: • One boundary class per actor/use-case pair Trần Thị Kim Chi 47 LỚP THỰC THỂ • Biểu diễn cho các thực thể xuất hiện một cách tự nhiên trong hệ thống • Thông tin về các đối tượng thực thể có thể phải được lưu trữ lâu dài (database,file) • Trong UML được gán stereotype là > • Dễ nhận diện các thuộc tính của chúng • Ví dụ: đối với hệ thống quản lý thư viện đã mô tả ở phần trước, nhận diện các đối tượng thực thể như: – Sách, Bạn đọc, Thẻ mượn, Thủ thư. Trần Thị Kim Chi 48 LỚP THỰC THỂ Glossary Business-Domain Model Environment independent. Analysis class stereotype Use Case Architectural Analysis Abstractions Trần Thị Kim Chi 49 LỚP ĐIỀU KHIỂN • Có nhiệm vụ điều khiển các lớp khác hoặc những lớp không phải lớp thực thể và lớp biên • Trong UML, được gán stereotype là > • Lớp biên thường có quan hệ liên kết hoặc phụ thuộc với các lớp khác • Dùng điều phối hành vi use case • Use case phức tạp sẽ yêu cầu nhiều hơn một lớp điều khiển Use Case Analysis class stereotype Trần Thị Kim Chi 50 Phân tích package • Một gói (Package) là một cơ chế có mục đích tổ chức các yếu tố thành các nhóm. Một gói chứa các phần tử mô hình khác. • Một gói có thể được sử dụng: – Để tổ chức các mô hình phát triển. – Là một đơn vị quản lý cấu hình. University Artifacts Client Package Supplier Package Dependency relationship Trần Thị Kim Chi 51 Phân tích package • Mục đích của phân tích package là :  đảm bảo từng package độc lập với các package khác  đảm bảo package hoàn thành mục đích của nó là hiện thực 1 số class lĩnh vực hoặc 1 số use-case.  miêu tả các phụ thuộc sao cho có thể ước lượng ảnh hưởng của các thay đổi trong tương lai. • Cách phân tích:  đảm bảo package chứa các class đúng, cố gắng cho tính kết dính cao bằng cách gộp các class có mối quan hệ chức năng.  hạn chế tối đa sự phụ thuộc giữa các package, phân phối lại các class quá phụ thuộc vào package khác. Trần Thị Kim Chi 52 Phân tích package C A B Hierarchy should be acyclic A B C A' Circular dependencies make it impossible to reuse one package without the other. A B Trần Thị Kim Chi 53 MỤC ĐÍCH CỦA THIẾT KẾ • Giai đoạn thiết kế quan tâm đến HOW: – Thứ tự các thông điệp trao đổi, thông số của thông điệp – Thuật giải của tác vụ đáp ứng – Cấu trúc dữ liệu cho các thuộc tính – Framework(console, document/view) • Thiết kế cũng chịu ảnh hưởng từ: – Ngôn ngữ lập trình và thư viện lập trình(Vector, List, Map) – Kiến trúc hệ thống (COM,CORBA, EJB)  thiết lập mô hình động và chi tiết hóa mô hình tĩnh Trần Thị Kim Chi 54 QUI TRÌNH THIẾT KẾ • THIẾT KẾ HÀNH VI – Khái niệm mô hình động – Tương tác giữa các đối tượng – Sự cộng tác – Miêu tả trình tự – Lược đồ trạng thái – Lược đồ hoạt động • HOÀN CHỈNH ĐẶC TẢ TĨNH – Nhận diện thêm một số lớp thiết kế – Đặc tả chi tiết các thuộc tính – Nhận diện chính xác các tác vụ – Hoàn chỉnh lược đồ lớpTrần Thị Kim Chi 55 Summary:Analysis and Design Workflow Analysis Design Trần Thị Kim Chi 56 Analysis and Design Activity Overview Architect Designer Trần Thị Kim Chi 57 Software Architect’s Responsibilities Architect Software Architecture Document • The Software Architect leads and coordinates technical activities and artifacts. Reference Architecture Analysis Model Design Model Deployment ModelImplementation Model Trần Thị Kim Chi 58 Designer’s Responsibilities Designer Use-Case Realization Package Class/Subsystems • The designer must know use-case modeling techniques, system requirements, and software design techniques. Trần Thị Kim Chi 59 Analysis and Design in an Iterative Process Iteration n Iteration n + 1 Use Case A Scenarios 1 & 2 Use-Case Realization A Start of iteration End of iteration Use Case B Scenario 1 Use-Case Realization A Use Case A Scenario 3 Use-Case Realization B Trần Thị Kim Chi 60 Review: Analysis and Design Overview • What is the purpose of the Analysis and Design Discipline? • What are the input and output artifacts? • Name and briefly describe the 4+1 Views of Architecture. • What is the difference between Analysis and Design? • What is architecture? Trần Thị Kim Chi 61 PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ THEO HƯỚNG ĐỐI TƯỢNG Trần Thị Kim Chi 62 CÁC BƯỚC PHÂN TÍCH VÀ THIẾT KẾ THEO HƯỚNG ĐỐI TƯỢNG Problem statement Create Use case model Draw Activity Diagram (If reqd.) Draw the interaction(sequence) diagrams Draw the class diagram Draw the state chart,object diagram(If required) Draw component &Deployment Diagram Design Document Trần Thị Kim Chi 63 MÔ HÌNH USE CASE • Use case diagram chỉ sự tương tác giữa phần mềm với người dùng hay môi trường bên ngoài • Use case diagram cho biết hệ thống có những chức năng nào, actor nào và chúng liên quan với nhau như thế nào Trần Thị Kim Chi 64 Use Case và yêu cầu chức năng • Use case chính là yêu cầu chức năng, chỉ ra những gì mà hệ thống sẽ làm. • Nên tập trung vào use case ở mức xử lý nghiệp vụ cơ bản (elementary business processes -EBP) • Nhiệm vụ do 1 người thực hiện để đáp ứng 1 sự kiện nghiệp vụ, tạo ra 1 giá trị nghiệp vụ và dữ liệu xác thực Trần Thị Kim Chi 65 Use Cases và mục tiêu người dùng • Use case ở mức EBP được xem là mục tiêu của người dùng • Mục tiêu ở
Tài liệu liên quan