Hê lô anh em. Ở kỳ trước mình đã nói về BPMN – một đồ nghề khá hữu dụng của BA. Hôm nay mình sẽ tiếp tục nói về 1 trong những đồ nghề khác cũng cực kỳ quan trọng không kém, đó chính là Use Case.
Bản thân mình thời gian đầu dùng Use Case cũng gặp rất nhiều khó khăn. Một mớ bồng bông câu hỏi cứ lởn quởn trong đầu: bản chất của Use Case là gì, dùng cho mục đích nào, vẽ vậy đúng hay chưa, có chi tiết quá không, hoặc thậm chí vẽ Use Case xong cũng chẳng biết để làm gì???
Do đó bài này mình sẽ note về những thứ mình học được, làm được và dĩ nhiên quan trọng nhất là những sai lầm mà mình từng mắc phải khi làm Use Case.
1. Use Case là gì?
Đầu tiên Use Case là một technique của công việc Business Analyst.
Use Case là kỹ thuật dùng để mô tả sự tương tác giữa người dùng và hệ thống với nhau, trong một môi trường cụ thể và vì một mục đích cụ thể.
Sự tương tác ở đây có thể là:
- Người dùng tương tác với hệ thống như thế nào?
- Hoặc, hệ thống tương tác với các hệ thống khác như thế nào?
Và dĩ nhiên, sự tương tác này phải nằm trong một môi trường cụ thể, tức là nằm trong một bối cảnh, phạm vi chức năng cụ thể, hoặc rộng hơn là trong một hệ thống/ phần mềm cụ thể.
Sau cùng, việc mô tả sự tương tác này phải nhằm diễn đạt một mục đích cụ thể nào đó. Use Case phải diễn rả được Requirement theo góc nhìn cụ thể từ phía người dùng.
Ví dụ sơ đồ Use Case diễn tả sự tương tác giữa người dùng là độc giả với trang blog Thinhnotes chẳng hạn.
- Tương tác ở đây là gì?
- Độc giả đọc bài notes
- Độc giả yêu thích bài notes
- Độc giả chia sẻ bài notes
- Độc giả nhận xét bài notes
- Độc giả gửi bài notes cho độc giả khác qua email
- Môi trường cụ thể?
Quá đơn giản, đó là trang blog Thinhnotes.com (không phải trang Admin). - Mục đích cụ thể?
- Người dùng có thể đọc được bài notes trên blog (đơn giản bỏ qua)
- Người dùng có thể bày tỏ được sự yêu thích bài notes
- Người dùng có thể chia sẻ bài notes này trên các nền tảng khác để nhiều người khác có thể đọc được
- Người dùng có thể viết nhận xét khen chê gạch đá các kiểu cho tác giả
- Người dùng có thể gửi bài notes này qua email cho một người bất kỳ.
Đó là tất tần tật những nội dung mà một Use Case sẽ thể hiện.
Về hình thức thì Use Case tồn tại ở 2 dạng:
- Hình vẽ Use Case (Use Case Diagram)
- Đặc tả Use Case (Use Case Specification).
Ở bài sau mình sẽ nói Use Case Specification sau nhé anh em. Bài này mình sẽ tập trung nói về Use Case Diagram.
Use Case Diagram là một thành viên trong họ UML (Unified Modeling Language).
Mỗi Diagram trong bộ UML này đều có những mục đích khác nhau. Tùy trường hợp, tùy dự án mà anh em sẽ “rút hàng” ra chiến như thế nào cho hợp lý.
Hiểu sơ bộ Use Case là gì và mục đích của nó, chúng ta cùng tìm hiểu chi tiết Use Case Diagram và cách vẽ nhé anh em 😎
2. Các thành phần của Use Case Diagram
2.1. Actor, Use Case, Communication Link và Boundary
Cũng không có gì quá phức tạp, Use Case Diagram gồm 5 thành phần chính:
- Actor
- Use Case
- Communication Link
- Boundary of System
- Và, Relationships.
Actor thì có thể là Người dùng, hoặc một System nào đó. Vì UML quy định Actor là hình thằng người nên có thể anh em sẽ nhầm lẫn chỗ đó phải là người dùng nhưng hổng phải.
Một số câu hỏi anh em có thể tự lẩm bẩm trong đầu để xác định Actor như sau:
- Ai là người sử dụng hệ thống?
- Ai sẽ là người Admin của hệ thống (tức người cài đặt, quản lý, bảo trì… hệ thống)?
- Hệ thống này có được sử dụng bởi bất kỳ một hệ thống nào khác không? (*)
- Hệ thống lưu trữ dữ liệu, vậy ai là người input dữ liệu vào hệ thống?
- Hệ thống lưu trữ dữ liệu, vậy ai là người cần những dữ liệu output?
Ở mục (*), mình muốn highlight cho anh em chỗ này. Không phải giải pháp/ phần mềm nào làm ra đều được sử dụng bởi con người. Có những phần mềm làm ra, để cho… phần mềm khác sử dụng.
Chẳng hạn như làm các services. Mình có một anh bạn làm BA, giải pháp mà ảnh cùng đồng bọn làm ra là 1 services không được dùng bởi con người, mà được dùng bởi một hệ thống khác để xác thực người dùng.
Ký hiệu của Actor chủ yếu là hình thằng người, nhưng để Diagram thêm phong phú, đa dạng thì anh em có thể sử dụng các hình dưới đây, miễn có ghi chú rõ ràng là được.
Còn Use Case là anh em sẽ thể hiện dưới dạng hình Oval, thể hiện sự tương tác giữa các Actor và hệ thống.
Communication Link thể hiện sự tương tác giữa Actor nào với System. Nối giữa Actor với Use Case.
Boundary of System là phạm vi mà Use Case xảy ra. Ví dụ trong hệ thống CRM, phạm vi có thể là từng cụm tính năng lớn như Quản lý khách hàng, Quản lý đơn hàng, hoặc cả một module lớn như Quản lý bán hàng.
…
Ô kê nãy giờ dễ ẹc, mấy cái này nhìn sơ qua là anh em biết ngay cái một.
Cái cuối cùng mới chính là cái mà mình tin là nhiều anh em vẫn còn rất dễ lộn, đó là Relationship.
2.2. Relationship
Relationship gồm 3 loại: Include, Extend, và Generalization.
a) Include
Include nghĩa là mối quan hệ bắt buộc phải có giữa các Use Case với nhau.
Xét về nghĩa, Include nghĩa là bao gồm, tức nếu Use Case A có mối quan hệ include Use Case B, thì nghĩa là: Use Case A bao gồm Use Case B. Để Use Case A xảy ra, thì Use Case B phải đạt được.
Xét ví dụ trên, chúng ta có Use Case: Nhận xét bài notes. Use Case này include 2 Use Case khác là: Đăng nhập WordPress và Soạn thảo nhận xét.
Rõ ràng anh em thấy: để nhận xét được một bài viết, anh em cần phải đăng nhập vào 1 tài khoản nào đó, để blog nhận diện anh em là ai, tên gì, quê quán, giai gái ra sao.
Ví dụ ở blog mình là anh em sẽ cần đăng nhập vào tài khoản WordPress. Sau khi đăng nhập xong, anh em phải soạn thảo nhận xét, tức là gõ nhận xét, chỉnh sửa, xóa tới xóa lui. Sau khi viết xong nhận xét, anh em sẽ bấm nút Submit để hoàn thành chẳng hạn.
Chỉ khi nào xong 2 bước trên (đăng nhập và soạn thảo nhận xét), thì anh em mới có thể xong bước Nhận xét bài notes được.
Hay nói cách khác để Use Case: Nhận xét bài notes xảy ra, thì Use Case: Đăng nhập WordPress và Use Case: Soạn thảo nhận xét phải bắt buộc hoàn thành trước tiên.
Đó chính là mối quan hệ Include. Anh em xem tiếp 1 số ví dụ dưới cho dễ hình dung nhé.
Một số điểm cần chú ý khi vẽ Include cho Use Case
Thực sự không có quy tắc nào rõ ràng cho việc khi nào cần tách Use Case ra thành các Use Case nhỏ và cho nó một mối quan hệ Include cả.
Việc tách hay không tách phụ thuộc duy nhất vào người vẽ. Và lý do lớn nhất để mối quan hệ Include ra đời là giúp cho các Use Case của chúng ta DỄ QUẢN LÝ hơn; làm cho Use Case Diagram trông có vẻ nguy hiểm hơn mà thôi 😎
Và anh em chỉ nên tách Use Case khi nó có độ phức tạp lớn và những thứ tách ra được có thể được tận dụng ở các Use Case sau này.
Độ phức tạp lớn thì khi tách ra mình mới có được những Use Case vừa phải, đủ để diễn đạt dễ hiểu cho các stakeholders. Còn tận dụng được ở các Use Case sau là sao?
Ví dụ Use Case A gồm 2 Use Case nhỏ bên trong là X và Y. Do đó Use Case A được tách thành Use Case X và Use Case Y.
Tương tự, Use Case B gồm Use Case Y bên trong, nên được tách thành Use Case Y.
Nhưng, Use Case C gồm Use Case X và Use Case Z bên trong, nhưng chỉ có Use Case X là được tách ra cho mối quan hệ Include. Vì có thể Use Case Z “không đáng” để tách ra thành một Use Case nhỏ hơn.
Chúng ta tách Use Case X từ Use Case A để Use Case C có thể tận dụng được mà không cần vẽ lại. Tương tự, tách Use Cas Y từ Use Case B để Use Case A có thể tận dụng mà cũng không cần vẽ lại.
Điều này giúp Use Case Diagram của chúng ta trở nên chặt chẽ, logic và gọn nhẹ hơn rất nhiều.
Còn Use Case Z, vì nó không được “dùng lại” ở một Use Case bất kỳ nào sau đó, nên người vẽ có thể cân nhắc có tách nó ra hay không!
Nếu Use Case đó đủ lớn và khá là high-level, thì có lẽ chúng ta nên tách. Còn nếu ngược lại, Use Case đã rõ ràng, là một requirement từ phía User cụ thể thì không đáng để anh em tách nó ra thành một Use Case nhỏ, chỉ làm hình thêm thêm rối mà thôi.
Còn cách vẽ thì anh em cứ nhớ là include tới thằng nào thì dấu mũi tên hướng tới thằng đó nhé anh em. Nhớ để qua phần Extend cho khỏi lộn.
b) Extend
Extend là mối quan hệ mở rộng giữa các Use Case với nhau.
Nếu Include là mối quan hệ bắt buộc, thì Extend là một mối quan hệ không bắt buộc. Nó thể hiện mối quan hệ có thể có hoặc có thể không giữa các Use Case với nhau.
Một Use Case B là extend của Use Case A thì có nghĩa Use Case B chỉ là một thứ optional, và chỉ xảy ra trong một hoàn cảnh cụ thể nào đó.
Lấy ví dụ Grab phía trên, anh em sẽ dễ dàng có được một mối quan hệ Extend như sau.
Trong trường hợp này, Use Case: Gửi tiền tip cho lái xe là một Use Case có mối quan hệ Extend với Use Case: Đánh giá chuyến đi. Tức, Use Case: Gửi tiền tip cho lái xe chỉ là một Use Case có thể xảy ra, hoặc không; và nó liên quan đến Use Case: Đánh giá chuyến đi, chứ không phải bất kỳ một Use Case nào khác.
À…à…Nhắc tới lúc có lúc không, tức là nhắc tới điều kiện xảy ra.
Anh em có thể thể hiện rõ ý chỗ này bằng một thứ luôn đi kèm với Extend, đó là Extension Point 😎
Extension Point nôm na là điều kiện mà Use Case có mối quan hệ Extend sẽ xảy ra. Còn để sát nghĩa thì anh em có thể hiểu chữ Point ở đây nghĩa là điểm dữ liệu thể hiện sự khác biệt.
Tức nếu dữ liệu này là A thì Use Case không xảy ra, nhưng nếu dữ liệu này là B thì Use Case sẽ xảy ra.
//Theo mình nhớ là hình như anh em chỉ có thể gửi tiền tip cho tài xế, nếu cuốc xe đó anh em chấm họ maximum là 5 sao.//
Vậy thì anh em sẽ vẽ Use Case Diagram chỗ đó như sau.
Extension Point ở đây là dữ liệu Driver Rating. Nếu Driver Rating đạt giá trị 5 sao, thì Use Case: Gửi tiền tip cho lái xe sẽ xảy ra, và hoàn toàn optional, tùy thuộc vào khách hàng.
Và nó liên quan mật thiết đến Use Case: Đánh giá chuyến đi, là một phần mở rộng của Use Case: Đánh giá chuyến đi.
Extension Point không nhất thiết phải là một dữ liệu nào đó trên hệ thống, mà có thể là một “điều kiện” bất kỳ, miễn là nó thể hiện được trường hợp cụ thể mà Use Case sẽ xảy ra.
Ở một ví dụ khác.
Còn nếu Use Case có quá nhiều mối quan hệ Extend, làm cho Diagram nhìn rối bời quá, anh em có thể bỏ luôn phần comment của Extension Point luôn cũng được.
c) Generalization
Generalization đơn giản là quan hệ cha con giữa các Use Case với nhau. Nhưng khác biệt với Include và Extend là nó còn được dùng để thể hiện mối quan hệ giữa các… Actor với nhau.
Đầu tiên là mối quan hệ cha-con giữa các Use Case. Ví dụ:
- Đăng nhập thì có thể đăng nhập qua số điện thoại, hoặc đăng nhập qua email.
- Đặt hàng thì có đặt hàng qua điện thoại, hoặc đặt hàng qua website.
- Thanh toán thì thanh toán qua thẻ ATM, qua thẻ thanh toán quốc tế, hoặc qua ví điện tử.
- Hoặc tìm kiếm thì có thể tìm kiếm bằng từ khóa, hoặc tìm kiếm theo nhóm sản phẩm.
Hoặc mối quan hệ cha-con giữa các Actor. Ví dụ:
- Khách hàng gồm khách hàng cũ và khách hàng mới
- Hoặc Vendor thì có thể gồm Retailers và Wholesalers.
Nhìn chung, Generalization giúp anh em thể hiện rõ hơn các yêu cầu bằng việc gom nhóm các Use Case lại theo quan hệ cha-con. Cá nhân mình thì rất ít khi vẽ relationship này, chủ yếu chỉ dùng Include và Extend là chính.
Còn một điểm nữa là Generalization có tính kế thừa. Tức thằng cha có gì thì thằng con có cái đó, kể cả Use Case hay Actor.
Ví dụ Use Case A có include đến Use Case B và C. Thì Use Case A’ là con của Use Case A cũng sẽ có mối quan hệ Include đến Use Case B và C, mặc dù không được thể hiện trên hình.
…
Ô kê, vậy là xong phần Relationship – một trong những phần chuối nhất, dễ lộn nhất trong Use Case. Hi vọng những ví dụ trên giúp anh em hiểu được cụ thể như thế nào là Include, Extend và Generalization trong một Use Case Diagram 😎
3. Một số sai lầm phổ biến khi vẽ Use Case
Use Case Diagram là thứ để anh thể hiện được requirement của khách hàng.
Vẽ sao mà khách hàng nhìn vô một phát là thấy khoái liền. Khách hàng mà chân nhịp nhịp, miệng lẩm bẩm: “Đúng rồi…đúng rồi…, tính năng này có,… tính năng kia có luôn, à… tích hợp lấy dữ liệu này có, ô kê ô kê,… vầy là đủ rồi!”, thì coi như anh em đã vẽ khá good 🙂
Chém nãy giờ mạnh vậy chứ mình vẽ chẳng bao giờ là ổn cả. PM cứ phải duyệt đi duyệt lại cả chục lần. Nhờ đó mới có những sai lầm phổ biến mà mình hay gặp khi vẽ Use Case Diagram cho anh em tham khảo dưới đây, hehe.
3.1. Chuyện đặt tên
Trong mô hình hóa, chuyện đặt tên là rất-rất-rất quan trọng.
Vì đã nói “mô-hình-hóa” tức là chúng ta dùng hình ảnh để nói chuyện, thì khi đó hàm lượng chữ chiếm rất ít. Và chính vì nó ít, nên những gì chúng ta ghi trên diagram phải rất súc tích, cô đọng và có giá trị ngay tức thì.
Chỉ cần người đọc họ nhìn vô diagram mà thấy ngay 1 dòng chữ khó hiểu, thì ngay lập tức tụt bà nó hết mood, hết muốn xem tiếp rồi.
Nói về Use Case thì có 1 vài lưu ý sau cho anh em:
- Actor thì phải đặt tên bằng danh từ, không dùng động từ, và cũng không mệnh đề quan hệ gì hết.
- Tên Use Case thì phải ghi rõ ràng, rành mạch, đẹp nhất là dưới format: Verb + Noun.
Ví dụ: Đổi điểm thành viên, Chuyển tiền nội địa, Chuyển tiền quốc tế, Duyệt nhận xét bài viết.
BA chúng ta vẽ Use Case nhằm mục đích diễn tả yêu cầu cho stakeholders hiểu, do đó anh em không được dùng những từ kỹ thuật trong đây, không thể hiện sự nguy hiểm ở đây, người ta đọc zô hông hiểu gì hết là trớt quớt.
Và đặc biệt là tránh đặt tên quá dài và không nên dùng kiểu bị động.
3.2. Vẽ Use Case mà thành phân rã chức năng
Đây chính xác là lỗi mà mình hay gặp nhất, rất thường xuyên gặp khi vẽ Use Case.
Dấu hiệu nhận biết rõ ràng nhất là khi Use Case Diagram của anh em đầy rẫy chữ “manage”, manage cái này, manage cái kia…
Đầu tiên là chữ Manage rất rộng nghĩa. Yêu cầu quản lý A gồm 5 việc, thì không có nghĩa yêu cầu quản lý B cũng gồm 5 việc. Use Case là diagram thể hiện yêu cầu của End-Users, nhằm đạt được một mục đích nào đó.
Ở ví dụ trên, nếu nói Manage Gears, Manage Brakes, hay Manage Air Conditioner thì quá tối nghĩa, chả ai hiểu nhằm mục đích sau cùng là để làm gì.
Thứ hai, hình minh họa trên vẽ Use Case nhưng lại chưa mang được góc nhìn của End-Users, tức chưa cho thấy được End-Users muốn đạt được gì sau ngần ấy Use Case được liệt kê ra.
Nguyên nhân có thể do người vẽ chưa nắm đủ thông tin về yêu cầu của End-Users, ảnh chưa hiểu rõ rốt cuộc thì người dùng họ muốn làm gì trên hệ thống, hay hệ thống phải tương tác những gì với hệ thống khác.
Từ đó mới có chuyện anh em nhìn vô Use Case Diagram ở trên mà cảm thấy mông lung như một trò đùa. Do đó, chúng ta chỉ vẽ Use Case khi đã có đủ thông tin cần thiết:
- End-users muốn làm gì? Nhằm mục đích gì? ==> tương tác giữa end-users và hệ thống
- Hệ thống phải nhận/ lấy data từ những nguồn nào? ==> tương tác giữa hệ thống với những hệ thống bên ngoài khác.
Ngoài ra, khi đã có đủ thông tin nhưng Use Case mình vẽ vẫn bị confuse. Lý do có thể do các Use Case mình vẽ bị lệch các cấp độ Requirement với nhau.
Ví dụ Use Case A thì thể hiện Business Requirement, tức là rất high level. Nhưng sang Use Case B và C thì lại nói rất detail tới mức Solution Requirement như.
Để sửa lại Use Case trên, đơn giản mình chỉ cần bỏ Use Case A: Quản lý học viên ra, vì nó là thứ rất chung chung, không thể hiện được mục đích cụ thể, so với 2 Use Case còn lại.
Tuy nhiên, chữ “Manage” trong Use Case lại rất công dụng, công dụng đến mức không thể không dùng trong các document mình làm, nó sẽ giúp mình giải quyết vấn đề ở mục số 3.4 phía dưới, đọc tiếp nhé anh em.
3.3. Rối nùi Use Case
Anh em tham khảo một số hình sau sẽ rõ.
Vấn đề của hình này là ôm đồm quá nhiều. Dẫn đến quá nhiều Use Case xuất hiện trong cùng một Diagram, đã vậy cũng không có Boundary of System rõ ràng.
Như anh em thấy, Use Case này vẽ rất sai ở những điểm như sau:
- Xác định sai Use Case (nên mới nhiều UC như vậy): những thứ như single, double, num of guest… rõ ràng đâu phải là một Use Case, đâu phải là một sự tương tác.
- Đặt tên Use Case sai: quá nhiều cụm danh từ cho Use Case.
- Không có Boundary of System.
- Những Use Case có extend không ghi chú cụ thể điều kiện khi nào thì UC extend xảy ra.
Một note nhỏ quan trọng cho anh em, Use Case Diagram sạch đẹp là chỉ nên có trên dưới 10 Use Case trong đó. Các Use Case còn lại anh em hãy dùng Boundary of System để phân chia theo phân hệ một cách hợp lý nhất có thể.
Hình này rõ ràng là quá thứ dữ. Thật ra trường hợp này cũng khá phổ biến, mình trước kia bị hoài. Mấu chốt đến từ một số điều sau:
- Một số Use Case đặt tên sai
- Chưa tận dụng các Relationship để thể hiện, khiến cho các Use Case quá rời rạc nhau, và trông rất không hợp logic.
- Người vẽ không dùng Boundary of System để phân nhóm, giới hạn các Use Case.
- Và đặc biệt, người vẽ quá chú trọng đến các chức năng cơ bản nhất, đó là: CRUD – Create/Read/Update/Delete.
3.4. Quá chi tiết các chức năng CRUD
Như ví dụ trên, mỗi thực thể là một lần CRUD. Như vậy quá tốn effort, trong khi 96,69% là ở phân hệ nào, hay dữ liệu nào, anh em cũng đều cần phải CRUD dữ liệu hết.
Điều này tạo ra một sự lặp đi lặp lại ở các Use Case Diagram, nhưng không thể hiện được gì nhiều cho người xem. Để giải quyết vấn đề này, anh em có thể có làm 1 trong 2 cách sau.
Cách 1
Thêm một dòng note trước đoạn mô tả Use Case trong tài liệu: “Toàn bộ dữ liệu đều có chức năng Thêm/ Đọc/ Sửa/ Xóa và chịu tác động bởi sự phân quyền từ phía Quản trị hệ thống” hoặc đại loại vậy. Để cho các stakeholder biết được rằng hệ thống có chức năng CRUD các dữ liệu này.
Nhưng nên nhớ CRUD ở đây là đứng từ góc nhìn End-Users: hệ thống có cho phép End-Users CRUD dữ liệu hay không?
Ví dụ hệ thống CRM lấy dữ liệu khuyến mãi từ hệ thống ERP. Thì về bản chất CRM phải có khả năng Create dữ liệu khuyến mãi, thì mới lấy dữ liệu khuyến mãi từ ERP về được.
Nhưng theo góc nhìn của End-Users, thì không một người dùng nào (kể cả System Admin) có thể tạo thủ công dữ liệu khuyến mãi trên CRM, mà End-Users họ chỉ Đọc/ Sửa/ Xóa dữ liệu được lấy về này thôi.
Do đó ở đây anh em cần mô tả rõ là có phải tất cả dữ liệu đều cho phép End-Users CRUD được hay không (không tính phân quyền).
Cách 2
Tạo hẳn một Use Case với tên là: Manage “X”, với X là một đối tượng bất kỳ.
Nếu không đầy đủ 4 tính năng CRUD, thì anh em có thể làm 1 cái note nhỏ bên trên, nói rõ Manage là có những tính năng gì, không có những tính năng gì.
3.5. Thẩm mỹ
Cuối cùng vẫn quay về vấn đề thẩm mỹ. Nguyên nhân việc Use Case mất thẩm mỹ đến từ 2 lý do:
- Mắt thẩm mỹ kém: chiếm 0,00000000000069%
- Ẩu, cẩu thả: chiếm 99,00000000000000069%
Làm gì cũng vậy, đặc biệt là mô hình hóa để làm document. Ẩu là thứ mình nên cố gắng hạn chế nó nhất. Vì làm đúng 1 lần, đẹp 1 lần, sau này đỡ mắc công làm lại chứ hông có gì hết.
Một số điểm anh em cần chú ý sau:
- Kích cỡ các Use Case trong Diagram là phải như nhau, kể cả cha-con, lẫn các mối quan hệ Include. Tuy nhiên, Use Case có Extend sẽ được vẽ to hơn một chút.
- Nhớ phải đánh dấu Use Case ID trong hình vẽ.
- Các mối quan hệ không được chồng chéo lẫn nhau. Anh em có thể vẽ 1 Actor ở 2 vị trí khác nhau để tránh các đường nối bắt chéo lên nhau.
- Khi vẽ Use Case Diagram, tập trung vào câu hỏi What để tìm ra Use Case, tránh câu hỏi How, vì khi đó anh em rất dễ đi vào detail.
- Và nếu được, hãy tô màu lên Use Case để nhìn Diagram được rõ ràng, sáng sủa và mạch lạc 🙂
.
.
.
Hi vọng qua bài này anh em đã hiểu rõ bản chất của Use Case, và biết cách vẽ Use Case Diagram. À mà không những biết cách vẽ, mà còn vẽ đúng, vẽ đẹp và tránh được những lỗi sai thường gặp nữa.
Tham khảo thêm:
- medium.com/@warren2lynch/all-you-need-to-know-about-use-case-modeling-828756da3215
- uml-diagrams.org/use-case-diagrams
Bài sau mình sẽ note lại cách viết Use Case Specification sau cho nhanh gọn và đơn giản nhất. Nếu có gì thắc mắc cứ thả còm men bên dưới hoặc email cho mình nhé.
Bái bai và hẹn gặp lại anh em!!!
24/06/2019 at 9:20 chiều
Cám ơn Thịnh, bài viết rất bổ ích.
Nhân tiện trong tương lai gần hy vọng sẽ có bài viết về burndown chart 🙂
24/06/2019 at 9:32 chiều
Noted Quang nhé 🙂
25/06/2019 at 3:43 sáng
Hi Thịnh,
mình nên đánh dấu Use Case ID ở chỗ nào cho thích hợp nhỉ
25/06/2019 at 7:25 sáng
Mình cứ note ngay trên Use Case luôn nhé Quang, kiểu như vầy:
25/06/2019 at 11:54 chiều
Hi Thịnh,
Mình có vấn đề với CRUD. Ví dụ có use case là quản lý người dùng, admin sẽ tạo ra một người dùng và để đó. Sau này họ không nhất thiết phải cập nhật hay xóa người dùng đó. Vậy mình sẽ vẽ use case trong trường hợp này như thế nào nhỉ? Cám ơn Thịnh nhiều 🙂
26/06/2019 at 7:33 sáng
Mình chỉ thể hiện: hệ thống cho phép người dùng làm gì đó trên hệ thống thôi Quang. Còn việc họ có muốn làm hay không, có nhất thiết phải làm hay không, hay trong tương lai có thể không làm thì cái đó thuộc về HÀNH VI NGƯỜI DÙNG nên mình cũng không cần thiết thể hiện trong Use Case. Vì Use Case là thứ để Development Team nhìn vô để build các tính năng của hệ thống, và họ nhìn toàn bộ Use Case để hiểu một bối cảnh cụ thể; để thêm chi tiết hơn mà thôi 🙂
Còn nếu đây là requirement từ KH thì nó còn khá mơ hồ, cần phải elicit thêm. Nếu đã rõ thì Quang có thể bổ sung ở mục Business Rules trong phần đặc tả Use Case Viết đặc tả Use Case sao đơn giản nhưng hiệu quả?, và note vào người dùng có thể CRUD theo phân quyền/ theo thời gian như thế nào đó cho hợp lý.
15/09/2019 at 1:28 chiều
Hi Thịnh,
Bạn hay dùng tool gì để vẽ UC?
15/09/2019 at 11:42 chiều
Mình dùng draw.io nhé Khánh
10/11/2019 at 11:50 chiều
Hi Thịnh, bạn có thể viết một bài về transaction của usecase không. Vì mình thấy hiện nay nhiều người nhầm giữa transaction và usecase. Tuy nhiên các tài liệu định nghĩa về transaction của usecase mình tìm được hầu như rất ít. Rất mong bạn chia sẻ về vấn đề này.
12/11/2019 at 7:53 sáng
Hi Long, ý Long transaction ở đây là gì nhỉ?
13/11/2019 at 3:43 chiều
Transaction là các giao dịch ấy. Một usecase là tập hợp của nhiều transaction (theo định nghĩa). (Trường hợp sử dụng (use case) là một tập hợp các giao dịch giữa hệ thống phần mềm với các tác nhân bên ngoài hệ thống nhằm đạt được một mục tiêu sử dụng nào đó của tác nhân. Một trường hợp sử dụng mô tả một hoặc nhiều tình huống sử dụng xảy ra khi tác nhân tương tác với hệ thống phần mềm.
14/12/2019 at 5:00 chiều
Anh ơi cho em hỏi là khi mình làm theo cách 2 là tạo Use Case Manage customers và note lại là có 3 chức năng thêm/sửa/xóa. Vậy đến khi mô tả Basic FLow của Use Case Manage customers thì sẽ phải mô tả như nào ạ? Anh có thể ví dụ để rõ hơn không ạ?
18/12/2019 at 7:39 chiều
Hi Nghĩa, a thường mô tả basic flow cũng theo trình tự: tạo >> sửa >> xoá luôn.
Nghĩa là em cứ mô tả các bước tương tác giữa user với system ntn đó, để TẠO record thành công >> rồi tiếp theo mô tả tương tác ntn để SỬA record đó thành công >> rồi tương tự là XOÁ record đó, là kết thúc Flow Manage Customer của mình (gồm tạo/ sửa/ xoá).
E tham khảo thêm các nguồn khác nữa nhé.
19/12/2019 at 8:11 chiều
Em cảm ơn ạ!
03/01/2020 at 3:39 chiều
Mình có một tình huống như này mong được giải đáp:
– Mình có một ứng dụng mà cho phép người dùng quản lý các sự kiện mà họ có thể quan tâm. Người dùng có thể CRUD một sự kiện. Trong giao diện chính sẽ có 2 tab: một thể hiện các sự kiện sắp hoặc đang diễn ra, và một để thể hiện các sự kiện đã kết thúc.
– Khi vẽ use case diagram, mình tạo một UC (A) là “Xem sự kiện”, và có 2 UC khác là (B) “Xem đang/sắp diễn ra” và (C) “Xem đã diễn ra“.
– Mình có thể sử dụng quan hệ generalization để mô tả mối quan hệ giữa B, C với A không nhỉ?
03/01/2020 at 4:18 chiều
Chào bạn, mình có thể để UC B và UC C trỏ đến UC A dưới dạng quan hệ Generalization nhé, thể hiện yếu tố kế thừa: dù xem event đang diễn ra hay sắp diễn ra thì cũng là xem event với những bước đó, thông tin đó.
Nhưng nếu mình làm, và ko có sự khác biệt nhiều từ viê của người dùng về 3 UC này, thì mình gom thẳng nó vào 1 UC luôn: Xem sự kiện đang, sắp và đã diễn ra.
Bạn tham khảo thêm nhé!
03/01/2020 at 4:25 chiều
Cảm ơn bạn nhé!
24/03/2020 at 5:29 chiều
Cảm ơn bạn nhé
04/04/2020 at 10:52 sáng
Cảm ơn Bằng 🙂
06/05/2020 at 5:25 sáng
Bài viết rất thú vị
06/05/2020 at 10:54 chiều
Cảm ơn bạn nhé
06/05/2020 at 2:46 chiều
Anh ơi làm sao để comment hình ảnh ạ
07/05/2020 at 6:39 chiều
gửi email cho anh nhé
07/05/2020 at 10:41 chiều
e xin mail a với ạ
07/05/2020 at 4:53 chiều
Chào Thịnh,
Thịnh có thể cho mình biết dùng tool gì để thực hiện sơ đồ vậy?
Cám ơn, chúc bạn gặt hái nhiều thành công hơn nữa
13/05/2020 at 8:07 chiều
Mình dùng draw.io nhé Khôi
12/06/2020 at 11:34 sáng
Anh Thịnh ơi, nhờ anh giải đáp cho em câu hỏi này ạ. Em rất cảm ơn anh
12/06/2020 at 11:35 sáng
Anh Thịnh ơi, bài viết của anh rất hay và dễ hiểu. Em có 1 câu hỏi nhờ anh giải đáp ạ. Em cảm ơn nhìu.
Bài toán là: Giả sử có 1 hệ thống thư viện, ở chức năng giới thiệu sách, khi view detail 1 cuốn sách, có 1 hyperlink mà khi click vào nó sẽ mở ra page tiki ứng với cuốn sách đó. Câu hỏi là website của tiki có được gọi là actor ko ạ?
14/06/2020 at 5:39 chiều
Hi Quyên, trường hợp của em thì Tiki không phải actor nhé.
Vì mình hiểu: Actor là một đối tượng người dùng hoặc một hệ thống nào khác, mà nó CÓ TƯƠNG TÁC với hệ thống/ bài toán của mình đang làm thôi.
Tương tác là sao? Là mình có sử dụng data qua lại/ hoặc signal qua lại giữa hệ thống của mình với actor đó hay ko?
Chứ hyperlink trỏ đến trang nào mà actor là trang đó thì sao e cover hết được 🙂 hyperlink chỗ này của em admin edit được mà. Nếu chỗ đó anh ko để tiki.vn mà anh để fahasa.vn thì sao :v
Trường hợp này nếu muốn mô tả rõ thì em cứ vẽ một use case: “Xem mô tả Sách” do actor là một end-user nào đó thực hiện. Rồi vẽ thêm 1 use case: “Mở hyperlink từ mô tả Sách”, extend đến use case bên trên là được.
Rồi khi làm đặc tả cho Use Cáe “mở hyperlink” thì nhớ mô tả chi tiết các steps để mở hyperlink là được. Làm FS thì chèn thêm Mockup hoặc GUI Element vào là rõ nhất.
Thử xem sao em nhé!
18/06/2020 at 7:15 chiều
Em cảm ơn anh nhiều ạ!
04/09/2020 at 11:53 sáng
Chào anh. Đầu tiên rất cảm ơn anh về bài viết vô cùng hữu ích ạ.
Em không biết khi xây dựng hệ thống mình thường sẽ làm bao nhiêu UCD. Số lượng UCD tùy theo độ phức tạp của hệ thống hay có một quy chuẩn nào để xác định không ạ?
Ví dụ em trong System Request của em có nhiều functional requirements thì em có cần vẽ riêng cho mỗi funtional đó 1 use case diagram không anh?
Mong anh giải đáp thắc mắc của em. Em cảm ơn ạ
05/09/2020 at 12:51 chiều
Hi Thảo, số lượng UCD thì tùy vào độ lớn và phức tạp của các function có trong system nhé em. Nếu docs em viết chia nhỏ theo các module thì e có thể vẽ UCD theo từng module, hoặc cũng có thể vẽ UCD theo từng functions có trong module đó, tùy vào độ phức tạp của nó.
Miễn sao người đọc nhìn vào UC Diagram >> họ nắm được 1 cách rất logic về luồng mà UC mô tả là được. Docs hướng tới người đọc >> nên đừng rập khuôn mà cứ linh hoạt theo tùy tình huống em nhé 🙂
05/09/2020 at 10:38 sáng
anh ơi em muốn hỏi anh 1 vấn đề mà không comment được hình ảnh ấy ạ
05/09/2020 at 12:44 chiều
Hi Đạt, em gửi email cho anh nhé: nghphuthinh at gmail dot com
14/09/2020 at 1:09 sáng
Cảm ơn anh Thịnh. Bài viết cực dễ hiểu.
14/09/2020 at 6:14 chiều
Cảm ơn Thảo nhé 🙂
14/09/2020 at 1:12 sáng
Em rất thích các bài anh chia sẻ và cả những câu chuyện review sách của anh nữa, ấn tượng cách hành văn. Anh có thể acc lời mời kết bạn của em được ko ạ.
25/12/2021 at 3:32 chiều
Cảm ơn em nhé
14/09/2020 at 1:15 sáng
cảm ơn anh, bài viết rất hay và dễ hiểu
14/09/2020 at 10:19 sáng
Cảm ơn Vinh
14/09/2020 at 1:24 sáng
Cảm ơn anh, bài viết đã chia sẻ nhiều kinh nghiệm rất hay
14/09/2020 at 5:12 chiều
Thanks Hạnh
14/09/2020 at 8:17 sáng
Hi anh
Em đang học bộ môn Software Requirement Specification ở trường, xong cũng phải viết 1 SRS docs về hệ thống mình sẽ làm, sau khi viết docs xong thì mới code hệ thống. Nhưng do thời gian chỉ vỏn vẹn 3 tuần, nên là trong quá trình làm em có code hệ thống trước, xong sau đó mới viết SRS docs. Nên dẫn đến tình trạng nhìn vào hệ thống để viết docs.
Em có 1 câu hỏi về mối quan hệ giữa các tes cases.
Về hệ thống của em sẽ có rất nhiều tab, ví dụ cụ thể như là tab student. User clicks vào tab student, nó page sẽ hiện thị 1 bảng danh sách students, mỗi row hiển thị student sẽ có đính kèm edit, activate, deactivate button, ngoài table ra thì ở phía trên sẽ có một vài trường để người dùng có thể filter students. Và có thêm 1 button import student bằng file excel trong trường hợp giáo viên muốn add nhiều students cùng lúc. Khi giáo viên import thành công em sẽ hiển thị message báo import thành công và sẽ update lại danh sách students đang hiển thị ở table .Nhìn vào hệ thống thì sẽ có các test cases như sau: Display students, filter students, edit/activate/deactivate student, import students.
Câu hỏi: Sau khi đọc bài viết xong em hiểu là các test cases filter students, edit/activate/deactivate student sẽ include test case display students. Nhưng mối quan hệ giữa test case display students và import students có mối liên hệ gì ạ?
14/09/2020 at 2:03 chiều
Hi em, em cần phân biệt rõ display student là show lưới danh sách học sinh, hay show màn hình thông tin chi tiết của 1 học sinh.
Nếu là show lưới danh sách học sinh, thì như em mô tả là trên màn hình này có nút “Import Student
=> Vậy thì Display Student” và “Import Student” như em nói sẽ có quan hệ với nhau. Vì phải vô màn hình danh sách lưới học sinh thì mới bấm nút import được.
NHưng thực tế mình ko mô tả quan hệ Use Case chi tiết đến vậy em à 🙂 Cứ đơn thuần là 1 Use Case: Import Student.
Thậm chi UC Display Student cũng ko cần thể hiện nữa, vì nó là cái cơ bản.
Trừ khi nó có tính năng nào lạ, hoặc quan trọng, hoặc cần mô tả cực chi tiết, thì lúc đó hẳn mới làm UC riêng rồi mô tả trong UC Specification. Em tham khảo thêm nhé!
14/09/2020 at 2:03 chiều
Cảm ơn anh vì bài viết đọc rất rõ ràng và dễ hiểu.
14/09/2020 at 10:54 chiều
Cảm ơn Linh nhé
14/09/2020 at 6:43 chiều
Đang khá rối, đọc xong bài này của Anh thì thông não được khá nhiều :D, rất bổ ích
14/09/2020 at 6:03 chiều
Cảm ơn em 🙂
14/09/2020 at 7:02 chiều
rất là hay
14/09/2020 at 6:01 chiều
Cảm ơn Hoàng Minh nhé!
14/09/2020 at 7:24 chiều
Cảm ơn tác giả bài viết rất có tâm giúp đỡ mình rất nhiều. Tuy là mình chưa hiểu cặn kẽ tất cả vì chưa quen các khái niệm.
25/12/2021 at 3:33 chiều
Cảm ơn bạn, cứ từ từ tìm hiểu thêm nhiều nguồn nhé
14/09/2020 at 10:16 chiều
cảm ơn bác, cực kì dễ hiểu và thông não được nhiều
14/09/2020 at 5:15 chiều
Cảm ơn bác nhé
14/09/2020 at 10:56 chiều
Cảm ơn anh, dù chưa hiểu hết nhưng bài viết rất rõ ràng, sẽ suy ngẫm thêm
14/09/2020 at 1:48 chiều
Cảm ơn em nhé 😀
14/09/2020 at 11:39 chiều
Cám ơn anh vì các bài viết rất hữu ích. Em đã thử vẽ lại Use Case của ví dụ đặt phòng khách sạn bên trên, có thể nhờ anh xem thử được ko ạ?
07/03/2021 at 9:03 chiều
Bài viết bổ ích lắm ạ<3
13/03/2021 at 11:48 sáng
Cảm ơn Quyên nhé 🙂
20/03/2021 at 10:55 chiều
Nếu em có UC là thanh toán thì em có cần ghi rõ ra các phương thức trong đó không ạ. Em cám ơn a
03/04/2021 at 6:02 chiều
Hi Duy, anh nghĩ nên ghi rõ ra nhé em, vì mỗi phương thức thanh toán khác nhau sẽ có các luồng thao tác của user khác nhau, detail ra cho rõ nhé 🙂
12/04/2021 at 11:59 chiều
Cảm thấy rất ngưỡng mộ và cảm ơn ông, bình luận từ 2019 tới giờ đều repsond không sót cái lào :]
28/04/2021 at 9:09 chiều
Xém nữa miss cái comment này :)) cảm ơn “Haizz” nhé 🙂
13/07/2021 at 4:23 sáng
Bạn ơi, cho mình hỏi với. Nếu có một vài UC mà cần người dùng đăng nhập thì mới thao tác được thì mình sẽ vẽ UC như nào ạ? Mong bạn trả lời. Cảm ơn bạn!
31/08/2021 at 4:53 chiều
Bạn dùng quan hệ INCLUDE như mình note ở trên đó, để usecase XYZ diễn thì mình cần include đến usecase Đăng nhập, bạn xem ví dụ bên trên mình có đề cập nhé
09/06/2023 at 12:46 sáng
nếu vậy thì có khi nào toàn bộ hệ thống nó phải vẽ cái mũi tên include vào use case “login” không Thịnh ơi?
13/07/2021 at 4:52 sáng
Cảm ơn anh rất nhiều.
13/07/2021 at 9:23 sáng
Cảm ơn em
13/07/2021 at 2:06 chiều
Anh ơi cho em hỏi Em đang học môn PTTKHT em mô tả 1 use case như này:
Mẫu: mô tả chi tiết Use Case
1. Tên Use Case
Xem tranh theo chủ đề
2. Mô tả vắn tắt
Use case này cho phép Khách hàng xem tranh theo các chủ đề có sẵn.
3. Luồng các sự kiện
3.1 Luồng cơ bản
1) Use case này bắt đầu khi Khách hàng click vào đề mục “Chủ Đề” trên thanh menu ở trang chủ từ đó hệ thống chuyển Khách hàng từ trang chủ qua trang “Tìm kiếm tranh theo chủ đề”.
2) Khách hàng lựa chọn bất kỳ một chủ đề được lấy từ bảng Chủ đề của cơ sở dữ liệu ví dụ: Trẻ em, Giáo dục, Âm nhạc, Trừ tượng,….Khi click vào một chủ đề bất ký hệ thống sẽ dẫn khách hàng đến trang của chủ đề đó.
3) Khi chuyển tới một trang chủ đề bất kỳ Khách hàng sẽ thấy danh mục sản phẩm theo chủ đề mình lựa chọn được hệ thống lấy từ bảng Sản phẩm, mỗi sản phẩm trong danh mục sẽ hiện thị các thong tin cơ bản như: Tên sản phẩm, kích thước, chất liệu, tác giả, số lượt xem, số lượt yêu thích,giá thành.
4) Khách hàng sẽ được lựa chọn các yều cầu về tìm kiếm vì dụ: sắp xếp lại danh mục, chọn chất liệu, chọn trường phái, mức giá, màu sắc, tìm kiếm khác hoặc chuyển sang một chủ đề khác. Khi Khách hàng chọn 1 trong các yêu cầu trên hệ thống sẽ truy vấn lại theo yêu cầu, từ đó đưa ra một danh mục sản phẩm mới được lấy từ bảng Sản phẩm.
3.2 Các luồng rẽ nhánh
1) Tại bước 4 trong luồng cơ bản khi không có sản phẩm phù hợp với yêu cầu tìm kiếm hệ thống sẽ trả lại không có sản phẩm phù hợp với yêu cầu.
2) Tại bất kỳ thời điểm nào trong quá trình thực hiên use case nếu không kết nốt được với cơ sở dữ liệu thì hệ thống sẽ hiển thị một thông báo lỗi và use case kết thúc.
3. Các yêu cầu đặc biệt
Không có
4. Tiền điều kiện
Không có
5. Hậu điều kiện
Không có
6. Điểm mở rộng
Không có
Nếu được anh có thể xem cho em em làm như này thì bị sai ở chỗ nào ạ ?
20/07/2021 at 5:58 chiều
bài rất tuyệt, cảm ơn bạn.
31/08/2021 at 10:18 sáng
Cảm ơn Long
03/08/2021 at 6:32 sáng
Anh có thể ra phân tích một bài về Class Diagram được không ạ, em rất mong có một bài hướng dẫn giúp cải thiện khi xây dựng sơ đồ lớp ạ
31/08/2021 at 11:12 sáng
Hi Tiến, anh có viết serie bài về ERD, cũng tương tự Class Diagram, em xem thêm ở đây nhé: https://thinhnotes.com/chuyen-nghe-ba/erd-la-gi/
10/08/2021 at 1:33 sáng
hay lắm man
17/08/2021 at 6:02 sáng
Bài rất hay, cảm ơn bạn nhiều
31/08/2021 at 11:48 sáng
Cảm ơn bạn nhé
17/08/2021 at 1:37 chiều
Bài rất dễ hiểu, hữu ích và thú vị cho một người nhập môn như em. Cảm ơn anh nhiều nhé!
31/08/2021 at 4:51 chiều
Thanks em, xem nhiều nhiều để a tăng view nha e :)))
31/08/2021 at 9:16 chiều
anh ơi có gửi mail cho anh nhờ a nhận xét hộ use case của e , a có thể rep email của e có được ạ: [email protected] ạ
14/09/2021 at 11:28 sáng
bài viết dễ hiểu, ngắn gọn quá bạn. Đỉnh!!!
31/08/2021 at 4:08 chiều
Cảm ơn Phương nhé
14/09/2021 at 1:09 chiều
Em chào anh, đầu tiên cảm ơn anh vì bài viết rất hữu ích ạ!> “Quản lý các món ăn”, rồi actor “Khách hàng” nối với usecase “Đọc” ạ?
Em có một vấn đề thế này: khi làm “Hệ thống quản lý nhà hàng”, Actor “Quản lý nhà hàng” có use-case “Quản lý các món ăn”, theo như bài viết của a thì có cách viết cho ngắn gọn là thêm 1 cái note “Đọc/ Thêm/ Sửa/ Xóa dữ liệu”. Một actor khác là “Khách hàng” cũng có 1 usecase là “Đọc danh sách các món ăn”. Vẽ tách biệt chúng có được không ạ? Hay em có thể vẽ theo kiểu, các usecase “Đọc/ Thêm/ Sửa/ Xóa” tách thành các usecase <
Mong anh giải đáp thắc mắc của em. Em cảm ơn ạ!
13/07/2021 at 5:00 sáng
Hi Trường, anh nghĩ nên tách ra cho dễ phân biệt. Vì view của Manager quản lý list món ăn khác với view của Customer xem và chọn món ăn
28/01/2022 at 12:09 chiều
bạn ơi, bạn có file use case quản lý nhà hàng như này kh ạ, cho mình xem để tham khảo với ạ, mình cảm ơn.
[email protected]
14/09/2021 at 4:58 chiều
Hay quá luôn á.
25/12/2021 at 3:34 chiều
Thanks Quý
30/09/2021 at 2:54 sáng
Cho em hỏi mình có nhiều UC như quản lí nhân viên, quản lí khách hàng…mỗi UC sẽ extends thêm,sửa,xóa. Vì thế nhìn sẽ hơi rối, nên em dùng theo cách như anh hướng dẫn là mình sẽ tạo một Note: thêm/sửa/xóa. Là em sẽ tạo ở mỗi UC một cái ghi chú thôi hay chỉ cần tạo một cái rồi Note Link lại với nhau ạ. Và em sẽ include đăng nhập từ cái ghi chú hay là từ UC ạ? Mong anh rep.
30/09/2021 at 11:12 chiều
Hi Huy, em chỉ việc làm một Use Case thể hiện tính năng Thêm/ Sửa/ Xóa record như em nói. Use Case này em có thể vẽ UC Diagram, làm UC Specification và đánh dấu ID cho nó (giả dụ A).
Các Use Case khác nếu muốn thể hiện tính năng Thêm/ Sửa/ Xóa thì trong UC Diagram đó, vẽ lại cái Use Case A bên trên rồi cho Actor link tới nó. Vầy là đủ rồi không cần đặc tả gì lại Use Case A này nhé em.
17/10/2021 at 10:13 sáng
bài viết tâm huyết quá, cám ơn anh
17/10/2021 at 4:15 chiều
Cảm ơn em
31/10/2021 at 12:23 chiều
Cám ơn bài viết của bạn. Note rất có tâm 😀
05/12/2021 at 11:07 sáng
Cảm ơn bạn
28/11/2021 at 5:19 chiều
Cám ơn bạn Thịnh nhiều nhá, trước giờ cũng từng thấy qua nhưng chưa thật sự đi vào chi tiết như này. <3
05/12/2021 at 7:31 sáng
Cảm ơn Trang nhé
28/11/2021 at 10:58 chiều
cảm ơn anh, em đang học môn cnpm, vẽ use case sắp mặt luôn :)))
25/12/2021 at 3:34 chiều
Giờ đỡ sấp mặt chưa em :v
03/12/2021 at 12:14 sáng
Hi anh. Bài viết của anh rất hay và dễ hiểu.
Em có gặp một số thắc mắc trong quá trình vẽ use case anh có thể trả lời giúp em k ạ.
Hiện tại e đang nhóm các function req theo module
Thì e có vẽ 1 overview usecase diagram. Ở đó có các Actor nối với các module đấy (ví dụ module manage store (view,update, sort,…))
Thì e có nên vẽ các usecase diagram ứng với mỗi module đấy để chi tiết giúp stakeholder dễ hiệu hơn từ tổng quan đến sơ đồ chi tiết hơn không ạ? ( view,update,sort…)
Thanks!
25/12/2021 at 3:35 chiều
Nên tách riêng ra để dễ quản lý & làm đặc tả UC nhé em. Riêng cái view thì có thể gom chung với update.
09/12/2021 at 8:41 chiều
a cho e hỏi, hệ thống quản lý trường học có nhiều chức năng như manage classroom, manage course, manage student, teacher… mỗi chức năng đều có CRUD thì mình vẽ như nào ạ
25/12/2021 at 3:38 chiều
Hi em, thường trong những Use Case, mà thể hiện: ở OBJECT đó, users có thể CRUD, thì mình sẽ cho Use Case đó kế thừa từ một Use Case khác được định nghĩa từ trước.
Ví dụ Use Case đó có thể là: Manage data by Role “X” (CRUD hoặc chỉ CRU…, và sẽ đi theo từng role khác nhau).
Hoặc đơn giản và súc tích hơn thì cho link tới 1 Use Case Phân quyền. BA cần định nghĩa phân quyền đó được CRUD những object nào theo roles nào => mình sẽ define một bảng ROLE MATRIX riêng cho Use Case này.
Một cách detail nhất thì Role Matrix có thể được define như sau:
– Cột: thể hiện các quyền có thể làm ví dụ: C, R, U, D, Append, Append To, Attachment…
– Dòng: thể hiện các Object có trong system, ví dụ: Lead, Customer, Bank, Opportunity, Product…
Mỗi bảng như vậy sẽ ứng với 1 ROLE.
Với mỗi điểm giao giữa QUYỀN và OBJECT => Mình sẽ quy định ROLE đó có thể thực hiện “QUYỀN” đó ở mức độ như thế nào đối với “OBJECT” đó theo từng cấp độ Business Unit.
Ví dụ: đối với role Salesperson: Quyền Update object Customer. Nếu thêm 1 layer về Business Unit nữa thì mình phải note rõ: anh Sales ở BU nào thì chỉ có thể update customer của BU đó, hay được update customer của BU ngang cấp hay cao hơn?
Hoặc simple hơn: Cột thể hiện các action có thể làm, Dòng thể hiện các process của Modules đó. Nhưng vẫn cần layer Business Unit để đảm bảo security cho các roles.
Em tham khảo nhé!
12/04/2024 at 1:48 sáng
“Use Case đó kế thừa từ một Use Case khác được định nghĩa từ trước”. Vậy quan hệ KẾ THỪA ở đây a nói là mình vẽ Generalization đúng k ạ?
11/12/2021 at 8:19 chiều
Chào anh ạ, em rất cảm ơn vì bài viết bổ ích của anh.
Em muốn hỏi là nếu một use case từ một actor phân ra 2 trường hợp thì sẽ dùng Generalization đúng không ạ? Nếu đúng thì sau đó use case trường hợp 1 (hoặc 2) đó có thể là use case trực tiếp từ một actor khác không ạ?
25/12/2021 at 3:46 chiều
Được em nhé, như bài note a có giải thích: Generalization giúp mình thể hiện rõ hơn các yêu cầu bằng việc gom nhóm các Use Case lại theo quan hệ cha-con. Ví dụ:
Nhưng thông thường khi làm thực tế thì anh ko tách nhỏ đến mức vậy. Anh cũng ko dùng generalization nhiều. Anh chỉ đơn thuần là có 1 use case (ví dụ: “Search sản phẩm” chẳng hạn). Khi đặc tả UC này anh sẽ mô tả rõ user có thể search bằng gì. Mỗi cách search rule thế nào, hay cần chú ý điểm gì.
Cách làm này áp dụng cho các trường hợp nhỏ. Dễ maintain & quản lý hơn.
E tham khảo thêm nhé!
12/12/2021 at 3:27 chiều
e đang hx MIS thấy khó hiểu quá may đọc được bài viết của a. mà e k bik chọn hx MIS có đúng k,thấy mông lung ghê. k bik có bị bất lợi hơn so với ng hx chuyên nghành khác về cntt không…hazz
p/s: anh có thể thay đổi cách xưng ho trong bài viết đc k, đâu phải chỉ có man mới đọc đâu ạ (đi đâu lq đến CN đều xưng ae -_-)
25/12/2021 at 3:41 chiều
Thường trong trường dạy lý thuyết sẽ ko tránh khỏi việc chán & khó hiểu. Nhưng ráng nhé em, sau này ít nhiều cũng tận dụng được đó.
Còn việc xưng hô thì “anh em” cũng dành cho chị em cũng được mà. Ít nhất là anh nghĩ vậy 🙂 Với lại kiểu của anh xưa giờ nó vậy, nếu nhiều bạn ý kiến thì anh cân nhắc đổi nhé em. Merry christmas em!
19/12/2021 at 3:23 chiều
Hê lô anh Thịnh, cảm ơn bài viết của anh rất nhiều ! Bài viết rất có tâm, ví dụ rất hài hước ạ
25/12/2021 at 3:38 chiều
Cảm ơn Vy nhé
22/12/2021 at 10:50 chiều
Cảm ơn anh đã chia sẻ. Chưa có cái web nào em tìm thấy chia sẻ rõ ràng cụ thể và chi tiết như anh luôn á.
nên phải cmt cảm ơn anh mới được.
25/12/2021 at 3:39 chiều
Cảm ơn em, nhờ em chia sẻ blog đến bạn bè nếu có cơ hội nhé 🙂
22/01/2022 at 12:53 chiều
Anh ơi, ví dụ chức năng quản lý báo cáo gồm có các loại báo cáo như báo cáo theo doanh thu, mặt hàng, kho hàng, tài chính. Thì các loại báo cáo đó có quan hệ kế thừa với chức năng quản lý báo cáo hả anh, hay quan hệ nào ạ. Em cảm ơn anh
14/02/2022 at 6:50 chiều
Em cần định nghĩa rõ “chức năng” ở đây là gì nhé em. Mỗi chức năng là 1 Use Case, gãi được chỗ ngứa nào đó cho user.
Như ví dụ của em thì có: Chức năng xem báo cáo doanh thu, chức năng xem báo cáo mặt hàng….
Còn khái niệm “quản lý báo cáo” của em nên detail hơn nữa khi làm use case. Quản lý cụ thể là? (Xem, export, modify column trong report,….) thì lúc đó mới consider được là có nên tách từng chức năng này ra thành 1 use case hay k, rồi sau đó mới tính xem là tổ chức các Use case này quan hệ với nhau ntn cho tinh gọn & chặt chẽ nhất.
Em tham khảo thêm nhé!
15/03/2022 at 9:49 chiều
bài viết tuyệt vời dành cho những người học bộ môn Phân tích và quản lý hệ thống thông tin
19/03/2022 at 12:21 chiều
Thanks Dũng nhé
19/03/2022 at 11:35 sáng
Bài viết của bạn thật là chất như nước cất dzậy á, mình đang học khoá BA cơ bản, học trên lớp chẳng bao nhiêu kiến thức, học youtube thì mớ tùm lum, gặp các bài viết của bạn phải thốt lên ” à nó đây rồi!, tìm đúng chỗ rồi”. Cảm ơn chia sẻ chân thành của bạn, làm ơn đừng xoá web vì bất kỳ lý do nào nhé, để đó để làm phước cho mấy tay a-ma-tơ như tui. Nếu rảnh thì post thêm bài bạn nhé, hóng bài của bạn
19/03/2022 at 12:32 chiều
Thanks bạn nhé
22/03/2022 at 11:40 sáng
Anh cho em hỏi sơ đồ hệ thống (system use case diagram) là như thế nào a?
22/03/2022 at 10:04 chiều
Hi Minh, khái niệm này a chưa nghe tới nên chắc e google thêm nhé
22/04/2022 at 10:17 sáng
Đây là công việc của actor Nhân viên văn thư trong bài toán hệ thống ảo quản lý văn bản đến, văn bản đi. Mình nhờ bạn vẽ sơ đồ use case mà không bị trường hợp use case phân rã chức năng. Mình vẽ nhiều lần mà vẫn cảm thấy sai. Cảm ơn bạn trước nhé!
Nhân viên văn thư có quyền đăng nhập(ID, password), đăng xuất hệ thống và sửa đổi thông tin tài khoản cá nhân (họ tên, giới tính, ngày sinh, chức vụ, e-mail, số điện thoại và password tài khoản). Ngoài ra họ có thể thực hiện các chức năng sau:
a) Quản lý văn bản đến hiển thị danh sách các văn bản đến gồm các thông tin (số ký hiệu, ngày đến, ngày vào sổ, trích yếu, cơ quan ban hành, lĩnh vực, … ) bao gồm các chức năng: tìm kiếm văn bản đến (số ký hiệu, ngày đến, trích yếu, từ ngày, đến ngày, loại văn bản, lĩnh vực, cơ quan ban hành, người xử lý, người thụ lý), sắp xếp văn bản đến (ngày đến, ngày ban hành, số ký hiệu, …), thống kê văn bản đến theo các tiêu chí (ngày đến, cơ quan ban hành, người xử lý, người thụ lý, …), in ấn.
b) Quản lý văn bản đi hiển thị danh sách các văn bản đi gồm các thông tin (số ký hiệu, ngày ban hành, trích yếu, cơ quan ban hành, lĩnh vực, … ) bao gồm các chức năng: tìm kiếm văn bản đi (số ký hiệu, trích yếu, từ ngày, đến ngày, loại văn bản, lĩnh vực, cơ quan ban hành, người xử lý, người thụ lý), sắp xếp văn bản đi (ngày ban hành, số ký hiệu, …), thống kê văn bản đi theo các tiêu chí (ngày phát hành văn bản, xử lý đúng hạn, xử lý quá hạn, chưa xử lý, ..), in ấn.
c) Quản lý công việc hiển thị danh sách các văn bản chờ xử lý gồm các thông tin (số ký hiệu, trích yếu, cơ quan ban hành, hạn trả lời văn bản, …) gồm các chức năng: Xử lý văn bản (lưu văn bản, trả lời văn bản, bố trí cuộc họp, …), Dự thảo văn bản (Trích yếu, loại văn bản, lĩnh vực, mẫu văn bản, tệp đính kèm, người ban hành, nơi đến, gửi phê duyệt).
Nhân viên văn thư là người có trách nhiệm đảm bảo tính kịp thời, chính xác, bảo mật cũng như an toàn của văn bản đến, văn bản đi của cơ quan đồng thời là người xử lý các khâu từ tiếp nhận, phân loại, chuyển giao, đăng kí số văn bản đến (số đến, ngày đến, số ký hiệu, trích yếu, cơ quan ban hành, hạn xử lý,…), lấy số văn bản đi (số ký hiệu, ngày ban hành, trích yếu, cơ quan ban hành, nơi đến, …) sau khi đã được Giám đốc phê duyệt.
03/05/2022 at 12:41 sáng
Dạ em cảm ơn bài chia sẻ của anh ạ. Tuy nhiên em vẫn mông lung chưa biết mục đích của Use Case Diagram là gì? Nó phục vụ gì cho hiệu quả làm việc của team. Em rất mong được anh giải đáp thắc mắc ạ.
28/05/2022 at 1:57 chiều
Chào Trang, em đọc lại bài viết ở trên nhé. Các thắc mắc của em a ghi rõ trong bài viết hết rồi 🙂
Nếu cần hệ thống lại các chức năng của 1 system nào đó thì em sẽ làm gì? Hay để overview tính năng của 1 phân hệ, module trong 1 hệ thống lớn, từ đó nắm rõ cái sườn để mô tả chi tiết xuống từng tính năng, em sẽ làm như nào? Use case là phương pháp để em làm, nhưng nhớ đọc lại để nắm bản chất của phương pháp nhé em.
27/08/2022 at 10:33 sáng
Em có một tình huống xin được giải đáp:
Em đang vẽ phân rã use case đặt bàn
Khách hàng có thể đặt bàn thông qua chức năng Bữa ăn hoặc Xem trạng thái bàn ăn.
Khách hàng truy cập vào hệ thống
Khách hàng nhập tài khoản và mật khẩu (hoặc mã OTP) sau đó chọn đăng nhập
Hệ thống xác nhận đăng nhập thành công
Khách hàng truy cập vào mục Bữa ăn chọn đặt bàn
Chọn bàn trống trong danh sách
Chọn ngày và giờ
Chọn quy mô
Nhập các yêu cầu cần chuẩn bị
Kiểm tra thông tin và nhấn Đặt bàn
Hệ thống báo đã đặt bàn thành công
—- Alternative flow —-
4a. Khách hàng chọn mục Trạng thái bàn ăn
4a1. Chọn danh sách bàn trống
4a2. Chọn bàn phù hợp nhấn Đặt bàn
Use case tiếp tục bước 6
Trường hợp này em phải vẽ use case phân rã sao ạ. Mong anh giúp đỡ.
23/10/2022 at 4:17 chiều
Em có thể tự vẽ rồi dán hình lên đây để anh & mn review nhé
27/08/2022 at 11:34 sáng
Em chào anh. Anh cho em hỏi một trường hợp e thấy khá bối rối khi vẽ Usecase Diagram như sau:
Ví dụ e có 2 UC ” Gửi tin nhắn ” và ” Thu hồi tin nhắn” . E có 2 cách vẽ
1. Vẽ ” Thu hồi tin nhắn” include ” Gửi tin nhắn”- kiểu muốn UC thu hồi xảy ra thì phải gửi tn trước đã
2. Vẽ ” Gửi tin nhắn” Extend ” Thu hồi tin nhắn” – kiểu Thu hồi tn có thể xảy ra hoặc ko á anh
Thì không biết e nên vẽ như thế nào mới hợp lý ạ ?
Cám ơn anh !
23/10/2022 at 4:13 chiều
Em cứ vẽ theo option 1 như em nói nhé, nó theo cách suy nghĩ tự nhiên hơn so với option 2.
Quan trọng diagram chỉ là show mọi thứ lên trên cùng 1 page để có cái nhìn đầy đủ nhất về nhóm tính năng đó thôi, nên cũng ko quá quan trọng đâu. Cứ làm rồi điều chỉnh dần em nhé.
01/02/2023 at 2:29 chiều
Mình cũng đang bị rối chỗ này nhưng Mình thì nghĩ chọn phương án 2 ạ. vì trường hợp extend thì n đồng thời bao gồm hàm ý là phải gửi tin nhắn trước thì mới thu hồi được ạ.
30/08/2022 at 12:11 sáng
Cảm ơn Thịnh về bài chia sẻ rất hay, mình có một thắc mắc muốn hỏi:
Ví dụ mình có 1 ca sử dụng “Cập nhật kho” có thể chia thành các ca Thêm, Sửa, Xóa,… Nếu không ghi note như ý của bạn mà cứ dùng include, extend thì theo bạn chỗ này mũi tên Cập nhật kho và Thêm thì là include hay extend ?
Cảm ơn bạn!
23/10/2022 at 4:16 chiều
Mình nên tách biệt rõ ràng các “chức năng” ở đây Sơn nhé. Đã “cập nhật kho” thì không có “sửa kho” nữa. Nên mình cứ hình dung rõ ràng thành các Use Case: “Tạo kho”, “Cập nhật kho”, “Xóa kho”….
Các UC này độc lập với nhau cũng được, nếu ko có dụng ý rõ ràng cho việc nó “include” với nhau như thế nào thì thôi không cần thể hiện trên UC Diagram.
30/09/2022 at 4:05 chiều
Ở hình “Use Case Diagram có thể hiện rõ khi nào thì mối quan hệ Extend diễn ra” , UC “gửi tiền típ” là extend của “đánh giá chuyến đi”. Vậy thì cho em hỏi, nếu khách hàng chỉ muốn ‘gửi tiền típ’ mà không thực hiện ‘đánh giá chuyến đi’ thì có được không?
Em cảm ơn.
23/10/2022 at 4:20 chiều
Được hay không là do mình design tính năng đó em nhé. Cái đó cũng sẽ thể hiện ở hình UC mình vẽ. Nếu như anh vẽ (B) là extend của (A), thì nó không thể hiện (B) là một Use Case bắt buộc phải xảy ra, nó chỉ thể hiện được rằng: để use case (B) diễn ra thì use case (A) phải diễn ra. Còn ý em muốn design khác đi thì phải vẽ khác đi, và thể hiện được ý của mình trong hình vẽ.
18/10/2022 at 10:04 sáng
Em nghĩ là ở system đặt xe Grab, UC Đánh giá chuyến đi phải có mối quan hệ extend với UC Đặt xe chứ ạ, vì UC Đánh giá chuyến đi là optional mà
23/10/2022 at 4:22 chiều
Tùy cách mình design tính năng, mình muốn nó như thế nào và thể hiện ý đồ đó lên diagram cho dễ hiểu em nhé. Còn ví dụ muốn tip thì bắt buộc phải đánh giá chuyến xe ở trên là example thôi nhé.
03/11/2022 at 9:49 sáng
Anh ơi. Em có gửi mail cho anh ạ. Anh xem giúp em với ạ. Mail: [email protected]
14/11/2022 at 6:13 sáng
Thịnh thân mến !
Cho mình hỏi chức năng in phiếu trong use case lập phiếu thu có thể xem là 1 use case không ? Và xem nó là include hay extend?
Nếu xem là use case thì đơn giản quá bởi vì user chỉ cần click nút lệnh in là xong
18/02/2023 at 10:39 sáng
Là 1 Use Case bạn nhé. Extend hay Include thì tùy vào quy trình & business bên mình. Xem thử để in được phiếu thu thì có cần bắt buộc use case gì phía trước đó không.
Mục đích là mình cần break ra được thành những Use Case nhỏ gọn, nhưng có tính “dùng lại” cao để sau này các Use Case khác cần thì sẽ refer tới. Use Case in phiếu mình nghĩ vừa đủ để break. Đơn giản về behaviour, nhưng vẫn cần mô tả rõ về các điều kiện, trigger cũng như condition để chạy được Use Case trong nhiều context khác nhau.
01/12/2022 at 4:41 chiều
Khi vẽ Use Case Diagram, tập trung vào câu hỏi What để tìm ra Use Case, tránh câu hỏi How, vì khi đó anh em rất dễ đi vào detail. Anh giải thích ý này rõ hơn được không ạ.
18/02/2023 at 10:41 sáng
Giống như 1 bài anh có note (mà anh quên mất): công việc tiên quyết của BA là cần sàn lọc ra, cần có con mắt tổng quan 1 chút. Thóc ra thóc, gạo ra gạo. Khi đó mình mới gom nhóm, tách nhỏ, gộp chung gì đó là tùy. Khi đó mình sẽ có được cái nhìn tổng thể, nhưng vẫn đảm bảo không sót. Đó là cái nhìn hệ thống.
Rồi vào từng Use Case khi vẽ hoặc viết đặc tả thì mới cần hình dung Use Case này có những gì và chạy ra làm sao, mối quan hệ giữa Use Case này và các Use Case khác là như thế nào em nhé.
18/04/2023 at 10:17 sáng
Anh cho e xin link bài viết đó được không ạ. em cám ơn ạ
05/05/2023 at 11:48 sáng
Như vậy là mình có thể vẽ riêng UC diagram cho từng UC tương tác đúng ko anh?
Ví dụ: Trong UC diagram tổng quát của Hệ thống thư viện có UC mượn sách bằng máy. E vẽ riêng một UC diagram cho mượn sách bằng máy, bao gồm các UC nhỏ hơn như là nhập thẻ ID, chọn sách và chọn số lượng. Làm thế là đúng đúng ko ạ? Vậy mình ghi tên diagram ở đâu để phân biệt với các UC diagram khác, và nếu các UC nhỏ có những UC nhỏ hơn nữa thì mình cứ phân tách tiếp đc đúng ko ạ?
11/05/2023 at 5:22 chiều
Hi em, phân nhỏ hay gom lại Use Case là tuỳ cách mình làm cho từng trường hợp em nhé. Không có chuẩn riêng gì cho việc này hết. Nên thấy vừa phải, cân đối, không quá chi tiết, nhưng cũng không quá tổng quát thì cứ triển em nhé.
12/05/2023 at 2:11 chiều
Dạ cho em hỏi khúc này, em đọc mà chưa hiểu ạ:
Ví dụ hệ thống CRM lấy dữ liệu khuyến mãi từ hệ thống ERP. Thì về bản chất CRM phải có khả năng Create dữ liệu khuyến mãi, thì mới lấy dữ liệu khuyến mãi từ ERP về được.
=> lấy dữ liệu khuyến mãi về thì tại sao phải có khả năng create dữ liệu khuyến mãi là sao ạ?
Nhưng theo góc nhìn của End-Users, thì không một người dùng nào (kể cả System Admin) có thể tạo thủ công dữ liệu khuyến mãi trên CRM, mà End-Users họ chỉ Đọc/ Sửa/ Xóa dữ liệu được lấy về này thôi.
=> tại sao người dùng k thể tạo thủ công dữ liệu khuyến mãi trên CRM đc ạ?
Em cám ơn anh ạ.
19/06/2023 at 10:50 sáng
Hi em,
Về câu hỏi chưa hiểu: “Ví dụ hệ thống CRM lấy dữ liệu khuyến mãi từ hệ thống ERP. Thì về bản chất CRM phải có khả năng Create dữ liệu khuyến mãi, thì mới lấy dữ liệu khuyến mãi từ ERP về được.”
=> Anh có ví dụ này: Khi A có cục kẹo, B không có cục kẹo. Sau khi A cho B cục kẹo, thì B sẽ có cục kẹo. Vậy thì B đã chuyển từ trạng thái: không có cục kẹo -> có cục kẹo. Có nghĩa là B đã phát sinh thêm 1 cục kẹo.
Về mặt dữ liệu thì đơn thuần chỉ là B nó tự tạo mới 1 cục kẹo y chang cục kẹo của A (chứ system thì làm sao mà cho kẹo nhau được). A là ERP, B là CRM => that’s why CRM có khả năng tự tạo mới cục kẹo (~ dữ liệu khuyến mãi)
Còn về câu: “Nhưng theo góc nhìn của End-Users, thì không một người dùng nào (kể cả System Admin) có thể tạo thủ công dữ liệu khuyến mãi trên CRM, mà End-Users họ chỉ Đọc/ Sửa/ Xóa dữ liệu được lấy về này thôi”
=> Ý này thì liên quan đến biz rules thôi em. Đây là biz rule của anh. Em có thể tự tạo 1 system và cho 500 ae users đều có quyền tạo dữ liệu khuyến mãi trên đó, ai tạo cũng được. Nhưng khi đó rule này sẽ impact tới biz của công ty. Vì dữ liệu khuyến mãi cần được tính toán, validate và approve kỹ càng qua các bước trên một system “chuyên dụng” nào đó (có thể là ERP, hoặc CRM, XRM,…). Nên khi “cục kẹo” đó được làm chuẩn chỉnh trên hệ thống ERP này rồi, “ok để xài rồi” => thì các hệ thống vệ tinh khác (như CRM) chỉ cần gọi ra, xài, tính toán & apply trên đơn hàng thôi.
16/05/2023 at 9:52 sáng
A ơi cho e clear chút về 2 TH extend và include với ạ:
1. Include
A có quan hệ include với B (A——>B) là B phải hoàn thành thì A mới thực hiện được và mỗi lần thực hiện A theo đó luôn luôn 1 lần thực hiện B đúng k ạ?
2. extend
A có quan hệ extend với B (A—–>B) thì có bắt buộc B phải hoàn thành xong đến bước cuối cùng thì A mới xảy ra ko ạ?
19/06/2023 at 11:01 sáng
Hi em,
Cả hai ý 1 & 2 của em đều đúng. Nhưng mô tả của em có vẻ hơi thiên hướng về góc nhìn PROCESS.
Làm Use Case thì chỉ nên đặt góc nhìn process trong từng Use Case để mô tả flow & các steps trong UC Specs. Còn nếu muốn nhìn tổng thể process thì nên dùng activity diagram hoặc BPMN. Mỗi tool có một công dụng riêng, phù hợp với từng mục đích em nhé.
06/07/2023 at 9:01 chiều
Ultr, site đã mở trở lại. Hồi chiều em vô thấy die, lo lắng sợ hãi quá trời huhu
22/11/2023 at 5:38 chiều
Bài viết thú vị và hay quá !
29/11/2023 at 9:55 sáng
Theo em tìm hiểu thì include chủ yếu dùng để tách nhỏ UC ra để còn tái sử dụng. Ví dụ như Nhận xét —-<>>—→ Đăng nhập thì mấy UC khác ngoài Nhận xét có thể xài lại UC đăng nhập. Như vậy thì xét về cấp độ, UC Đăng nhập (hoặc UC soạn thảo nhận xét) có cấp độ nhỏ hơn UC Nhận xét. Vậy nên việc vẽ UC mà có dùng các MQH giữa những UC với nhau (include, extend, generalization) thì sẽ khó để có các UC đồng cấp requirement như anh nói trong phần 3.2.
05/05/2024 at 2:49 sáng
trong sơ đồ tổng quát use case nếu như : quản trị viên có chức năng quản lí bài viết (bao gồm xem bài viết ) còn thành viên chỉ có chức năng xem bài viết thì lúc vẽ có nên nối ” quản trị viên —–quản lí bài viết <—extend– xem bài viết——- thành viên ” không bạn
09/05/2024 at 6:20 chiều
Anh ơi ví dụ mình vẽ chi tiết Usecase đăng ký, mình được chon 1 trong 3 phương thức đăng ký là đký bằng sđt, email, MXH thì dùng include hay sao ạ
17/06/2024 at 10:47 chiều
Bài viết rất chi tiết và dễ hiêu. Cám ơn bạn ????
08/09/2024 at 11:44 sáng
hayyy
08/09/2024 at 11:45 sáng
hayyy