Tại sao UML? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

smbsolutions

Thành viên hoạt động
Tham gia
12/7/07
Bài viết
167
Được thích
294
Tuân and all đọc cái này nhé:

Xin chào mọi người,

Tôi nghĩ, mọi người, ai đã từng dùng UML để phân tích thiết kế, đều cũng ít nhiều thất vọng về khả năng của UML. Tôi cũng đã thất vọng nhiều. Ban đầu tôi cố gắng vẽ nhiều diagram cho project của mình, nhưng sau đó hầu như tôi vứt bỏ tất cả. Một phần là do không có thời gian để cập nhật chúng, một phần là do UML không có tác dụng lắm với việc lập trình. Thông thường, gần 99,99% mã nguồn hoàn toàn khác xa so với các lược đồ mà tôi vẽ cho các thành viên trong nhóm lập trình.

Tôi nghĩ ngay đến nguyên nhân:
  1. Tôi chưa áp dụng triệt để process để vẽ UML tốt
  2. Tôi chưa hiểu về cách áp dụng UML
Tôi suy nghĩ khá nhiều và ngày càng thiên về lý do thứ 2. Tôi nghĩ, mọi người sẽ có cùng cách nghĩ như tôi. Vì vậy, tôi xin trích dịch một đoạn trong quyển UML for Java Programer của Rober C. Martin mà tôi rất tâm đắc khi đọc.

---------------------------------------------
Trích dịch một phần chương 2 từ quyển UML for Java Programmer của Rober C. Martin
* UML là chữ viết tắt của Unified Modeling Language, tức Ngôn ngữ Mô Hình hóa thống nhất.
Chapter 2 Working with diagram

Trước khi khảo sát chi tiết UML, sẽ là khôn ngoan khi chúng ta tìm hiểu về nguyên nhân và các tình huống sử dụng UML. Đã có nhiều dự án phần mềm bị tổn hại vì sử dụng sai hoặc lạm dụng UML
Tại sao phải Mô Hình

Tại sao các kỹ sư làm mô hình? Tại sao các kỹ sư hàng không tạo mô hình máy bay? Tại sao kỹ sư cầu đường làm mô hình cây cầu? Mục đích của những mô hình này là gì?
Kỹ sư làm mô hình để xác định xem liệu thiết kế của họ có hoạt động chính xác không? Kỹ sư hàng không làm mô hình máy bay và đưa chúng vào các ống gió (wind tunnel) để xem chúng có bay được không. Kỹ sư cầu đường tạo mô hình cây cầu để xem chúng có đứng vững hay không. Kiến trúc sư xây dựng mô hình các tòa nhà để xem khách hàng có thích kiểu dáng như thế không. Mô hình được tạo để xác định xem một vật nào đó có hoạt động không.
Điều này ẩn chứa ý rằng mô hình có thể kiểm thử được. Thật là vô nghĩa khi tạo mô hình mà bạn không có cách nào để thực hiện các phép kiểm thử trên nó. Nếu bạn không đánh giá được mô hình, thì mô hình đó không có giá trị.
Tại sao kỹ sư hàng không không chế tạo ra máy bay và lái thử nó? Tạo sao kỹ sư cầu đường không cho xây cây cầu rồi mới xem chúng có đứng vững không? Bởi vì máy bay và cây cầu đắt hơn rất nhiều so với mô hình. Chúng ta nghiên cứu các thiết kế bằng cách làm mô hình nếu như việc làm mô hình rẻ hơn nhiều lần so với việc chúng ta tạo ra vật thể thực.
Tại sao tạo mô hình phần mềm?

Liệu có thể kiểm thử các lược đồ UML? Liệu tạo các lược đồ UML có rẻ hơn và dễ kiểm thử hơn cái phần mềm mà nó biểu diễn? Trong cả hai tình huống, câu trả lời không bao giờ rõ ràng như lĩnh vực hàng không và cầu đường. Không có phương pháp chắc chắn nào để kiểm thử các lược đồ UML. Chúng ta có thể nhìn chúng, định lượng chúng, áp dụng các nguyên tắc thiết kế và các mẫu thiết kế lên chúng, nhưng kết quả của việc đánh giá chúng vẫn rất chủ quan. Vẽ lược đồ UML thì dễ hơn là viết phần mềm, nhưng với hệ số không lớn. Thật vậy, thay đổi mã nguồn dễ hơn rất rất nhiều lần so với việc thay đổi một lược đồ. Như vậy dùng UML liệu có hợp lý không?
Tôi đã không viết một quyển sách về UML nếu như dùng nó là không hợp lý. Tuy nhiên, những lập luận trên nhằm giải thích rằng UML rất dễ bị dùng sai mục đích. Chúng ta sử dụng UML khi chúng ta có một thứ gì đó mà chúng ta dứt khoát phải kiểm thử nó, và khi dùng UML để kiểm thử thì rẻ hơn là dùng mã nguồn để kiểm thử nó.
Ví dụ, nói rằng tôi có một ý tưởng cho một thiết kế nào đó. Tôi muốn kiểm tra rằng liệu những thành viên trong nhóm của tôi có cho rằng đấy là một ý tưởng đúng đắn không. Vì vậy tôi vẽ lược đồ UML lên bảng và hỏi thành viên trong nhóm để nhận phản hồi.
Tại sao chúng ta tạo các thiết kế đầy đủ trước khi lập trình?

Kiến trúc sư, kỹ sư hàng không, kỹ sư cầu đường luôn vẽ các bản vẽ thiết kế (blueprint). Tại sao? Bởi vì một người có thể vẽ bản thiết kế cho một ngôi nhà mà để xây nó cần đến năm người hoặc hơn. Khoảng một chục kỹ sư hàng không có thể vẽ bản thiết kế cho chiếc máy bay mà để chế tạo nó phải cần hơn cả ngàn người. Có thể vẽ bản thiết kế mà không cần phải đào móng, không cần phải trộn bê tông hay lắp cửa sổ.... Nói ngắn gọn, lập một kế hoạch xây dựng trước sẽ rẻ hơn nhiều so với việc xây dựng mà không có kế hoạch nào. Và nó sẽ không tốn nhiều chi phí khi bỏ đi những bản vẽ tồi, nhưng sẽ tốn rất nhiều nếu giựt sập một tòa nhà.
Một lần nữa, điều này lại không rõ ràng khi áp dụng cho phần mềm. Vẽ các lược đồ UML không thực sự rẻ hơn là viết mã nguồn. Thật vậy rất nhiều nhóm đã tiêu tốn nhiều thời gian trên lược đồ hơn là ngồi làm việc thực sự trên mã nguồn. Và việc ném bỏ các lược đồ không thực sự rẻ hơn là ném bỏ những đoạn mã. Vì vậy việc tạo một bộ đầy đủ các lược đồ UML trước khi viết code không thực sự là chọn lựa hiệu quả về chi phí.
Sử dụng UML một cách hiệu quả.

Phần này cũng rất thú vị, tôi sẽ dịch tiếp khi có thời gian


Bản gốc tiếng anh:

Working with Diagrams
Before we explore the details of UML, it would be wise to talk about when and why we use it. Much harm has been done to software projects through the misuse and overuse of UML.

Why Model?

Why do engineers build models? Why do aerospace engineers build models of aircraft? Why do structural engineers build models of bridges? What purposes do these models serve?

These engineers build models to find out if their designs will work. Aerospace engineers build models of aircraft and then put them into wind tunnels to see if they will fly. Structural engineers build models of bridges to see if they will stand. Architects build models of buildings to see if their clients will like the way they look. Models are built to
find out if something will work.

This implies that models must be testable. It does no good to build a model if there are no criteria you can apply to that model in order to test it. If you can’t evaluate the model, the model has no value.

Why don’t aerospace engineers just build the plane and try to fly it? Why don’t structural engineers just build the bridge and then see if it stands? Because airplanes and bridges are a lot more expensive than the models. We investigate designs with models when the models are much cheaper than the real thing we are building.

Why build models of software?

Can a UML diagram be tested? Is it much cheaper to create and test than the software it represents? In both cases the answer is nowhere near as clear as it is for aerospace engineers and structural engineers. There are no firm criteria for testing a UML diagram. We can look at it, and evaluate it, and apply principles and patterns to it; but in the end the evaluation is still very subjective. UML diagrams are less expensive to draw than software is to write; but not by a huge factor. Indeed, there are times when it’s easier to change source code than it is to change a diagram. So then, does it make sense to use UML?

I wouldn’t be writing this book if UML didn’t make sense to use. However, the above illustrates just how easy UML is to misuse. We make use of UML when we have something definitive we need to test, and when using UML to test it is cheaper than using code to test
it.

For example, lets say I have an idea for a certain design. I need to test whether the other developers on my team think it is a good idea. So I write a UML diagram on the whiteboard and ask my teammates for their feedback.

Why should we build comprehensive designs before coding?

Architects, aerospace engineers, and structural engineers all draw blueprints. Why? Because one person can draw the blueprints for a home that will require five or more people to build. A few dozen aerospace engineers can draw blueprints for an airplane that will
require thousands of people to build. Blueprints can be drawn without digging foundations, pouring concrete, or hanging windows. In short, it is much cheaper to plan a building up front, than it is to try to build it without a plan. It doesn’t cost much to throw away a faulty blueprint, but it costs a lot to tear down a faulty building.

Once again things are not so clear cut in software. It is not at all clear that drawing UML diagrams is much cheaper than writing code. Indeed, many project teams have spent more on their diagrams than they have on the code itself. It is also not clear that throwing away a diagram is much cheaper than throwing away code. Therefore, it is not at all clear that creating a comprehensive UML design before writing code is a cost effective option.


Copy & paste from VietRose
 
Hoàn cảnh lịch sử ra đời của UML

Hoàn cảnh lịch sử ra đời của UML

Nhân đọc thấy bài viết về hoàn cảnh lịch sử ra đời của UML, nên dịch lại dưới đây. Thiết nghĩ, việc hiểu và dùng đúng UML có thể bắt nguồn từ việc hiểu về bối cảnh ra đời của UML.

Chúng ta đều biết rằng UML được hợp nhất bởi 3 phương pháp của 3 nhà

* Booch 94 của Booch
* OMT của Rumbaugh
* OOSE của Jacobson

Lịch sử đã cho chúng ta biết thêm về nguyên nhân về tính "có thể kết hợp" của các phương pháp này.

------------------------------------
Đôi nét về lịch sử xuất hiện UML

Trích dịch từ quyển sách Agile Software Developement Principles, Patterns and Practices của Robert C. Martin.



Phân tích và thiết kế phần mềm gồm bước tạo ra vài loại ký hiệu. Có nhiều cố gắng để tạo ra nhiều bộ ký hiệu. Flowchart, data-flow diagrams, entity-relationship diagram, v.v...

Sự xuất hiện của phương pháp lập trình hướng đối tượng tiên đoán sự bùng nổ các ký hiệu. Có khoảng hơn chục bộ ký hiệu dành cho phân tích và thiết kế hướng đối tượng cạnh tranh nhau.

Những bộ ký hiệu thông dụng bao gồm:
* Boosch 94
* OMT (Object Modeling Technique) của Rumbaugh
* RDD (Responsebility Driven Design) của Wirfs-Brock
* Coad/Yourdon của Peter Coad và Ed Yourdon

Trong những bộ ký hiệu này, Boosch 94 và OMT là quan trọng nhất. Boosch 94 được cho là bộ ký hiệu hỗ trợ mạnh mẽ cho việc thiết kế, trong khi OMT thì được cho là mạnh hơn về mặt phân tích.

Sự tách bạch này khá hấp dẫn. Vào cuối thập niên 1980, đầu 1990, người ta cho rằng với ưu điểm của hướng đối tượng, phân tích và thiết kế được trình bày bởi cùng chung một bộ ký hiệu. Có thể bởi vì đây là sự phản ứng lại với sự tách bạch quá rạch ròi giữa bộ ký hiệu phân tích và thiết theo hướng cấu trúc. Việc chuyển từ phân tích hướng cấu trúc sang thiết kế hướng cấu trúc đã quá nổi tiếng về sự khó khăn của nó.

Khi các bộ ký hiệu hướng đối tượng bùng nổ lần đầu tiên, người ta có cảm nhận rằng cùng 1 bộ ký hiệu sẽ có thể đáp ứng cho cả phân tích và thiết kế. Và trong suốt một thập kỷ, nhà phân tích và nhà thiết kế bắt đầu chuyển sang các bộ ký hiệu mà họ ưa thích. Nhà phân tích thì chọn OMT, trong khi nhà thiết kế lại có xu hướng dùng Boosch 94. Và như vậy, một bộ ký hiệu dường như là không đủ. Bộ ký hiệu cho phân tích không đáp ứng được cho thiết kế và ngược lại.

UML là một bộ ký hiệu đơn, nhưng nó có thể đáp ứng cho mọi nhu cầu. Một phần của nó rất hữu ích cho phân tích, trong khi một phần khác lại phù hợp với thiết kế. Như vậy, cà nhà phân tích và nhà thiết kế có thể dùng UML.

[....]

Copy & Paste from VR
 
Nhận xét thêm của Mr hoangnx (MISA)

Nhận xét thêm của Mr hoangnx (MISA)

Tôi đã đọc khá nhiều các bài viết và tranh luận của bạn trên diễn đàn, và qua đó cảm nhận được sự bức xúc cũng như nỗ lực của bạn trong quá trình áp dụng UML.
Theo tôi, không phải riêng bạn mà hầu hết đều gặp rất nhiều khó khăn trong quá trình áp dụng UML, đúng như trong phần trích dẫn của cuốn sách của R.Martin. Bản thân tôi, cũng đã từng vật lộn nhiều với UML, và tôi chỉ thấy nó thực sự hữu ích trong các hoàn cảnh:
- Cần có một tài liệu phân tích- thiết kế đẹp đẽ (nếu như trong yêu cần về sản phẩm phải có), thực sự dùng UML quả là rất dễ hiểu. Tuy nhiên từ bản thiết kế này ra đến code là cả một quá trình dài, vì nhiều khi code mà chẳng cần phải xem tài liệu thiết kế mình đã viết gì, điều này thật buồn cười.. vì sự thay đổi yêu cầu quá nhanh và quá nhiều...nhưng thực tế là như vậy.
- Mô tả những quy trình Business Process (thường tôi hay sử dụng Activity/State Diagram), nhất là kiểu Swimlane, rất dễ hiểu rõ ràng. Tất nhiên có nhiều ngôn ngữ khác để mô tả Business Modelling, nhưng UML cũng rất tuyệt.
- Mô tả một số thiết kế chính, phức tạp, ít thay đổi - chủ yếu là Architect Design, để tất cả mọi người trong dự án có một cái nhìn thống nhất về kiến trúc hệ thống định xây dựng.
- Mô tả kiến trúc ứng dụng 3 lớp (nếu dùng Rose, chuyển sang chế độ Three Tiers), mô tả các Class theo các phân loại Boundary/Control/Entity, các tên Class và một số Attribute/Method quan trọng. Chủ yếu để xác định quan hệ tương tác giữa chúng.
Còn lại tùy theo nhu cầu thấy thực sự cần thì mới tiếp tục mô tả.
Tôi cũng áp dụng triệt để tư tưởng trong cuốn "RUP for Small Project..." (trong Resource có để download). Nghĩa là bắt đầu dự án không có bất cứ cái gì cả, sau đó trong quá trình thực hiện thấy cần cái gì thì đưa vào sử dụng, kiên quyết loại bỏ ngay cái gì mà mình chưa thấy cần thiết, hoặc thậm chí chỉ là phân vân có nên đưa vào hay không?
Ngoài ra, giả sử có design mọi thứ bằng UML đi chăng nữa, việc tạo ra nó không khó, nhưng việc update nó mới khó - khi mà đã viết code rồi, sau đó thay đổi code khác với design, việc này ngốn rất nhiều thời gian, mà thông thường ta hay bỏ qua - vì đoạn này thường phải "chạy nước rút" rồi, lấy đâu ra thời gian mà làm tài liệu nữa. Tất nhiên, sau dự án nếu có thời gian thì update lại design theo code, nó hữu ích khi vài năm nữa lại phải sờ đến khi bảo hành, bảo trì chương trình, mà lúc đó đội phát triển năm trước chẳng còn ai!!
Trên đây là vài kinh nghiệm chia sẻ với mọi người. Theo tôi, nếu gặp khó khăn, hãy áp dụng triệt để tư tưởng, chỉ làm cái gì nếu thấy thực sự cần thiết.
Copy & paste from VR

Rất tiếc là chủ đề sau đó lại đi vào "dĩ vãng" như bao chủ đề khác trên mọi diễn đàn. --=0
 
Lần chỉnh sửa cuối:
UML - Martin Fowler: Các góc nhìn

Xin chào mọi người,

Martin Fowler được xem là một trong những cao thủ về OO hiện nay, ông có viết quyển sách khá nổi tiếng về UML. Cuốn này được nhiều người thích vì nó trình bày khá đơn giản, dễ hiểu.

Trong quyển này, Martin Fowler có đề cập đến việc phân chia UML theo 3 góc nhìn khác nhau. Cách chia này tôi thấy rất hay và hợp lý mà không phải các tác giả khác có đưa cách nhìn nhận này vào sách của mình. Vì vậy tôi xin trích dịch lại đoạn ông viết. Mời mọi người tham khảo và cho ý kiến.

Rất cảm ơn.

---------------------------------------

Dịch từ chương 4 của quyển UML Distilled Second Edition A Brief Guide to the Standard Object Modeling Language của Martin Fowler

Chapter 4. Class Diagrams: The Essentials
<phần giới thiệu>

Các góc nhìn

Trước khi tôi bắt đầu mô tả lược đồ lớp (class diagram), tôi muốn nói rõ một ý tinh vi khá quan trọng về cách mọi người sử dụng nó. Ý tinh vi này thường không được ghi lại tường minh nhưng có tác động đến cách mà bạn nên hiểu về một lược đồ.

Theo sự chỉ dẫn của Steve Cook và Janh Daniels (1994), tôi cho rằng có 3 góc nhìn mà bạn có thể dùng để vẽ lược đồ lớp, hoặc với những loại lược đồ khác, nhưng dưới đây chỉ tập trung chú ý đến lược đồ lớp.
  • Conceptual / Góc nhìn Khái niệm.
Nếu bạn đứng ở góc nhìn Conceptual, bạn sẽ vẽ lược đồ trình bày các khái niệm trong lĩnh vực bạn đang nghiên cứu. Những khái niệm này sẽ có quan hệ tự nhiên đến các lớp cài đặt chúng, nhưng thông thường thì không phải là ánh xạ trực tiếp. Thực vậy, một mô hình khái niệm nên được vẽ mà không có hoặc có rất ít cái nhìn đến phần mềm sẽ cài đặt nó, và vì vậy nó có thể được xem như là độc lập ngôn ngữ. (Cook và Daniels gọi đây là góc nhìn bản chất, Essential)

  • Specification / Góc nhìn Đặc tả
Bây giờ, chúng ta hãy nhìn vào phần mềm, nhưng chúng ta đang nhìn vào các giao diện của phần mềm, không phải cài đặt bên trong. Phát triển theo hướng đối tượng nhấn mạnh sự tách biệt giữa giao diện và cài đặt, nhưng điều này thường bị bỏ qua trong thực tế bởi vì ký hiệu của lớp trong ngôn ngữ lập trình hướng đối tượng kết hợp cả giao diện lẫn cài đặt. Đây thật sự là điều đáng xấu hổ, bởi vì chìa khóa để sử dụng hiệu quả lập trình hướng đối tượng là để lập trình giao diện của lớp hơn là để cài đặt chúng. Có một cuộc thảo luận rất hay về điều này giữa Gamma, Helm, Johnson và Vlissides (1995). Bạn vẫn thường hay nghe từ "type" được dùng để nói về giao diện của một lớp; một type có thể có nhiều lớp cài đặt nó, và một lớp có thể cài đặt nhiều type.

  • Implementation / Góc nhìn cài đặt
Ở góc nhìn này, chúng ta thật sự có các lớp và chúng ta đang hướng đến việc cài đặt. Đây có lẽ là góc nhìn đươc sử dụng nhiều nhất, nhưng theo nhiều cách góc nhìn về Specification là một chọn lưa tốt hơn.


Hiểu đúng các góc nhìn có tính quyết định cốt yếu để vẽ và đọc các lược đồ lớp. Nhưng thật không may, lằn ranh giữa các góc nhìn không rõ ràng, và hầu hết các nhà mô hình không thận trọng khi nhận diện góc nhìn của mình thuộc loại nào khi họ vẽ lược đồ. Mặc dù tôi cũng thấy rằng điều này không thường là vấn đề giữa góc nhìn Conceptual và Specification, nhưng sẽ rất quan trọng để tách bạch góc nhìn Specification và Implementation.

Khi sẽ nói về lược đồ lớp ở phần sau, tôi sẽ chỉ rõ cách mà mỗi yếu tố kỹ thuật phụ thuộc chặt chẽ lên góc nhìn.

Các góc nhìn không phải là một thành phần của UML, nhưng tôi nhận thấy nó rất có giá trị khi mô hình hóa và khi xem các mô hình. UML có thể được sử dụng cùng lúc cả ba góc nhìn. Bằng cách đính các lớp bởi sterotype, bạn có thể cung cấp một chỉ dẫn về góc nhìn. Bạn đánh dấu các lớp với <<implementation class>> để chỉ rằng nó được vẽ với góc hìn Implementation, và với <<type>> cho góc nhìn Specification và Conceptual.

Bài này em trình bày ý kiến của em góc nhìn khái niệm. "Chiêu thức" của Fowler em sẽ trình bày trong bài sau.


Góc nhìn khái niệm.

UML hình thành bởi việc sản xuất phần mềm, nhưng không có gì cấm người ta dùng hình vẽ để mô tả những vấn đề ngoài phần mềm.

Dễ thấy nhất là trong Use-case diagram. Đây là lược đồ ít hiệu quả nhất của UML vì thông tin nó mang lại không nhiều. Nó được dùng trong các bài Presentation cho team khi bắt đầu project. Thay vì phải trình bày dài dòng, use-case diagram cho người nghe khái quát các Feature của project; và chỉ dừng lại ở đây, vì các member phải đọc usecase để biết chi tiết hơn. Không một ai có thể bắt tay vào sản xuất mà trong tay chỉ có lược đồ usecase.

Một ví dụ khác là Domain Model. Bạn rất giỏi về IT, nhưng với bạn, qui trình bán hàng thật là phiền phức. Bạn tốn mấy ngày để tìm hiểu và không muốn các member "phát minh lại bánh xe". Sử dụng các notation UML về actor, class, state..., bạn đã tiết kiệm rất nhiều thời gian.

Liệu các diagram mô hình nghiệp vụ có giúp team của bạn sản xuất không? Hầu như không.
  • Các lược đồ mô hình nghiệp vụ KHÔNG được cài đặt hết trong software. Bạn không thể viết phần mềm để giao hàng cho khách được, nhưng trên mô hình nghiệp vụ thì bạn vô tư vẽ.
  • Chưa có một phép ánh xạ khả dĩ nào được đưa ra cho đến nay. Các lược đồ được bạn vẽ vào lúc đang phân tích yêu cầu. Vào lúc đó, bạn không muốn bận tâm quá nhiều vào chi tiết. Tâm trí của bạn đang tập trung hiểu nghiệp vụ, các điều kiện môi trường, các rủi ro... Bạn phân tích lợi ích khi dùng platform P mà team của bạn dày dạn kinh nghiệm để thuyết phục khách hàng theo. Bạn đang các thuận lợi/khó khăn nếu dùng protocol X để hiện thực chúng...
Yếu tố cuối cùng, UML sẵn sàng cho phương pháp luận OO, nhưng có ngoại lệ. Use-case không hề OO. Vì vậy, nếu bạn dùng use-case và sau đó phát triển bằng C chẳng hạn, cũng đồng nghĩa với việc UML không còn đất sống. Kết quả là use-case chưa đủ sản xuất phần mềm với OOD/OOP.

Như vậy, bạn hoàn toàn có thể dùng UML trình bày những ý đồ, những khái niệm ngoài phần mềm mà bạn dư định sản xuất.

Trên đây là series bài dịch của Trương Lập Vĩ (From VR)
 
Quản lý yêu cầu (RM)

Tool cho quản lý yêu cầu (RM)

Quản lý yêu cầu (requirement management - RM) là vấn đề không phải của riêng dự án phần mềm mà của các loại dự án nói chung. RM không chỉ dùng cho các dự án phát triển mà còn cần cả cho các dự án nâng cấp. Không có requirement thì toàn bộ quá trình phát triển sản phẩm đều là vừa làm vừa mò, không có cơ sở nào cả. Việc test một sản phẩm khi không có requirement lại càng nực cười. Quá trình nghiệm thu sản phẩm không có requirement thì cũng là "đóng cửa bảo nhau" chứ chẳng có căn cứ gì cả.
(xin lỗi cả nhà tôi gặp một nhóm viết test-case dài thượt, test cắm cúi nhưng hỏi ra là requirement đâu thì không có, test mò, dựa trên .. nothing. Viết testcase bận lắm, không có thời gian viết requirement!!! có khác nào đi bộ khắp Hà nội cả tuần để tìm phố Hàng Mắm chứ không có thời gian mua bản đồ)
Vậy tại sao chúng ta vẫn làm phần mềm mà không viết các tài liệu mô tả yêu cầu? lý do đầu tiên là ... mệt. Thật vậy, viết tài liệu đặc tả yêu cầu (software requirement specification - SRS) cực mệt. Và mệt nhất là viết bằng Word - không có công cụ hỗ trợ chuyên nghiệp. Quá trình thay đổi yêu cầu và theo dõi sự thay đổi càng thê thảm hơn. Kể cả khi sản phẩm đã được sửa đổi thì cũng rất vất vả để sửa tài liệu yêu cầu tương ứng -> tài liệu một đằng, sản phẩm một nẻo -> vứt quách đi không làm nữa.
Phương án giải quyết là sử dụng các công cụ quản lý yêu cầu. Các công cụ này giúp quá trình quản lý như là nhập liệu cho database, xong rồi thì thích tìm kiếm, sinh các báo cáo, đặt các bộ lọc, sắp xếp... thoải mái theo nhu cầu. Một tính năng không thể thiếu là sinh thành tài liệu đặc tả yêu cầu theo định dạng word với một template định sẵng.
Trong bộ Rational Suite, bên cạnh công cụ quen thuộc là Rose thì công cụ RM là Requisite Pro. Công cụ này khá mạnh, tích hợp chặt chẽ với các công cụ khác (như Rose) để quá trình chuyển đổi từ các yêu cầu sang khâu phân tích, kiểm tra chéo xem có yêu cầu nào chưa được xử lý không, chuyển thành testcase... là rất trơn tru, bảm đảm một yêu cầu được đặc tả vào sẽ được sử dụng trong 3-4 chỗ khác nhau. Điều này vửa bảo đảm tài liệu luôn nhất quán với sản phẩm, vừa dễ thay đổi mà vẫn kiểm soát được, và quan trọng nhất là giúp người phát triển đỡ ngại, cảm thấy công viết tài liệu cũng được đền bù xứng đáng.
Nhược điểm hiện nay cá nhân tôi cảm thấy là Requisite Pro vẫn còn tương đối khó dùng đối với một người dùng trung bình. Đồng thời không hỗ trợ unicode cũng là một chi tiết gây khó chịu. Và chúng ta có thể còn có nhiều lựa chọn khác. Danh sách được đưa trong trang web sau
http://www.jiludwig.com/Requirements_Management_Tools.html
Có thêm bình luận thì ở đây
http://easyweb.easynet.co.uk/~iany/other/vendors.htm
Bản so sánh cực kỳ chi tiết cho từng tính năng của 20+ sản phẩm RM cũng được đưa ra tại đây
http://www.paper-review.com/tools/rms/read.php
Tôi chưa có điều kiện xem hết nhưng có 2 gợi ý:
1. Phần mềm đầy đủ (mạnh kinh người luôn) là Caliber-RM của Borland, tích hợp chặt chẽ với công cụ phân tích thiết kế Together phù hợp với nhóm phát triển lớn, hoặc cả một công ty phần mềm. Nếu công ty bạn định làm nghiêm túc vấn đề RM thì có thể chọn công cụ này http://www.borland.com/caliber/.
2. Phần mềm dùng được ngay (vừa dễ dùng, vừa đủ tính năng lại không đòi hỏi cài đặt phức tạp lắm) là Analyst Pro của www.analysttool.com. Mặc dù trong hơi "basic" nhưng xem kỹ thì tính năng rất khá, phù hợp với một nhóm dự án từ 3 - 7 người, lại không đòi hỏi phải mất nhiều thời gian học (chắc mất khoảng 30 phút là dùng được)
Kết luận: viết tài liệu đặc tả yêu cầu rất mệt, vậy có hai lựa chọn: không viết, nếu viết thì nên dùng tool, đừng dùng Word khổ lắm

(From VR)
 
Lần chỉnh sửa cuối:
Đây là 2 template được sử dụng tại ciren, do anh Dũng gửi, đã được Việt hóa hoàn tòan.
1. SRS-DacTaYeuCau.dot: Tài liệu đặc tả yêu cầu phần mềm
2. SAD-DacTaKienTruc.dot: Tài liệu đặc tả kiến trúc phần mềm

Nội dung bao gồm:

1. SRS-DacTaYeuCau.dot: Tài liệu đặc tả yêu cầu phần mềm

1. Giới thiệu
1.1 Mục đích
1.2 Phạm vi
1.3 Các định nghĩa, thuật ngữ, từ viết tắt
1.4 Tài liệu tham khảo
1.5 Khái quát chung
2. Mô tả tổng quát
2.1 Tổng quan về mô hình Use-Case (Use-Case Model)
2.2 Các điều kiện phụ thuộc
3. Các yêu cầu phần mềm
3.1 Mô tả các Use case
3.2 Các yêu cầu bổ sung
4. Các thông tin hỗ trợ khác

2. SAD-DacTaKienTruc.dot: Tài liệu đặc tả kiến trúc phần mềm
1. Giới thiệu
1.1 Mục đích
1.2 Phạm vi
1.3 Các thuật ngữ, từ viết tắt
1.4 Tài liệu tham khảo
1.5 Mô tả chung
2. Mô tả kiến trúc
3. Mục tiêu và các ràng buộc về mặt kiến trúc
4. Mô hình Use-Case (Use-Case View)
4.1 Các luồng sự kiện trong Use-Case
5. Mô hình Logic (Logical View)
5.1 Mô tả chung
5.2 Chi tiết về các gói tin (package)
6. Mô hình xử lý (Process View)
7. Mô hình triển khai (Deployment View)
8. Mô hình thực hiện (Implementation View)
8.1 Mô tả chung
8.2 Chi tiết các tầng
9. Mô hình dữ liệu (Data View) (không bắt buộc)
10. Kích thước và hiệu hiệu năng của phần mềm (Size and Performance)
11. Chất lượng phần mềm

C&P From VR
 
Kinh nghiệm thiết kế

Khi phân tích thiết kế, nhất là ban đầu khi mới làm quen, việc mắc phải các sai lầm (không đến nỗi chết người) là việc quá thường xuyên. Sau một thời gian (thường là phải qua một vài dự án) thì những nhầm lẫn này sẽ bộc lộ tác hại và chúng ta có thể rút ra một kết luận nào đó cho riêng mình. Sau khoảng 1 năm chúng ta sẽ có khoảng vài chục kết luận như vậy.
Vậy tại sao chúng ta không đọc các kết luận của các "tiền nhân" đi trước tổng hợp lại và viết ra thành "guide lines" (một số khẩu quyết khi luyện công). Người thiết kế có thể dùng để hoàn thiện bản thiết kế của mình, người kiểm tra có thể căn cứ vào đó để đánh giá bản thiết kế có thể được phê duyệt hay không.
Đây là một địa chỉ cung cấp các guide line chi tiết cho từng loại biểu đồ UML: http://www.processwave.net/Articles/ModelingAndUMLArticles.h tm
Phần lớn các link trong danh sách này chỉ sang: http://www.agilemodeling.com/style/
Hãy bỏ một chút thời gian để đọc để giảm bớt công sức tự mày mò, có ai còn viết chương trình quản lý nhân sự bằng ASM đâu ;)
Xin tạm dịch một số hướng dẫn cho việc làm biểu đồ activitiy, bà con tự kiểm nghiệm lại xem có đúng không nhé:
(http://www.agilemodeling.com/style/activityDiagram.htm)
Kinh nghiệm tạo biểu đồ Activity (UML)
Trên nhiều phương diện thì biểu đồ hoạt động (activity diagrams) trong thiết kế hướng đối tượng giống với sơ đồ khối (flow chart) và biểu đồ luồng dữ liệu (data-flow diagram DFD) trong lập trình hướng chức năng. Biểu đồ hoạt động được dùng (và chỉ nên dùng) để biểu diễn quá trình logic của:
- Một thao thác xử lý phức tạp
- Một vai trò nghiệp vụ (business rule) phức tạp
- Một use case đơn lẻ
- Phối hợp của một số use case
- Một qui trình nghiệp vụ
- Các tiến trình phần mềm
1. Kinh nghiệm chung:

1.1. Nên đặt điểm bắt đầu của biểu đồ ở góc trên bên trái

Điểm bắt đầu của biểu đồ là hình tròn đặc, cùng cú pháp biểu diễn với biểu đồ trạng thái (State Chart diagram) của UML. Mỗi biểu đồ hành động trong UML đều cần có điểm bắt đầu, và điểm bắt đầu nên đặt ở góc trên bên trái vì điều này là tự nhiên với cách chúng ta đọc tài liệu: góc trên bên trái là nơi bắt đầu. Hình vẽ 1 mô hình hóa quá trình đăng ký học một trường đại học, sử dụng cách tiếp cận này.
2004-08-26_010112_activityDiagramEnrollment.gif

1.2 Bắt buộc phải có điểm kết thúc

Điểm kết thúc của biểu đồ là hình tròn đặc và thêm một vòng tròn bao quanh, cùng cú pháp biểu diễn với biểu đồ trạng thái (State Chart diagram) của UML. Phương pháp Fowler and Scott's (1999) thì cho rằng điển kết thúc là không bắt buộc vì trong một số trường hợp thì một hành động nào đó trong biểu đồ chính là điểm chết. Nhưng trong trường hợp này thì cũng chẳng hại gì nều chúng ta vẽ điểm kết thúc là dẫn ra từ hành động đó, vẫn thế cả thôi nhưng người xem biểu đồ có thể nhìn được một cách rõ ràng là làm thế nào để kết thúc một dãy các hành động.
1.3 Thấy biểu đồ hành động có nghĩa là đang gặp một thao tác phức tạp

Có một nguyên tắc vàng là nếu một phương thức trong class hoặc một hành động nào đó của hệ thống tương đối phức tạp thì chúng ta cần phải làm một biểu đồ hành động để có thể hiểu rõ hơn, đồng thời điều này cũng có nghĩa là hành động này cần được xem xét kỹ lưỡng hơn
(mấy ông mới làm thiết kế rất chăm vẽ những biểu đồ đơn giản lèo tèo vài activity nhưng biểu đồ phức tạp thì lại làm rất ẩu)
2. Các hành động (activities)

Một hành động (activity) hay còn gọi là hành động trạnh thái (activity state) (chưa gặp cách gọi này bao giờ) trong một biểu đồ hành động thường để diễn giải một thao tác, một bước trong một quá trình hay có khi đại diện cho cả một quá trình.
2.1 Xem lại những hành động dạng “lỗ đen”

Một hành động dạng “lỗ đen” là hành động mà có bước chuyển đến (biểu diễu bằng các mũi tên vào) nhưng lại không có mũi tên nào đi ra. Trường hợp này thường xảy ra khi chúng ta đã bỏ sót một hay nhiều bước chuyển (thế thì mới phải xem lại). Tất nhiên không phải lúc nào cũng là sót, trong trường hợp hành động đó chính là bước cuối cùng của một quá trình thì nó có dạng “lỗ đen”. Thế nhưng như đã nói ở trên, nếu đó là hành động cuối cùng thì chúng ta nên cho thêm ký hiệu điểm kết thúc và tạo ra một bước chuyển từ hành động đó tới điểm kết thúc. Như thế vừa rõ ràng, vừa không thể nhầm được.
2.2 Xem lại những hành động dạng “ảo thuật”

Một hành động mà có bước chuyển từ đó ra nhưng lại chẳng có đầu vào nào gọi là "ảo thuật", điểm "ảo thuật" duy nhất đúng trong một biểu đồ là điểm bắt đầu của biểu đồ. Nếu không phải vậy thì chắc chắn là chúng ta đã sót.

(Tóm lại là ông nào không có đủ cả đầu vào lẫn đầu ra tức là có vấn đề)

Ghi chú: chỗ viết nghiêng là tôi tự bình luận thêm vào. Còn nhiều guide line trong cái link kia lắm, đọc không thiệt đâu



C&P From VR
 
Hay quá! Cảm ơn anh! Trước đây em cũng đã tạo thử lược đồ nhưng cũng chưa tìm ra được tính thực dụng của nó. Hy vọng loạt bài của anh sẽ giúp nhiều cho em với UML.
 
May cho em quá, đọc chả hiểu tí gì cả. Vì nếu mà hiểu (dù chỉ tí tí ti thôi) thì lại đam mê.
Mà đam mê nó thì . . . chỉ có nước : Thượng Đế ơi, hãy cho con một ngày là 48 tiếng.--=0--=0

Nhưng đọc mạnh văn của các bác ở trên thấy họ thực sự là những người có nền tảng cực vững. Qua cách dịch và lối hành văn và sự tóm lược cô đọng cũng đủ để toát lên một tầm nhìn!!!
(Dĩ nhiên người sưu tầm được cũng chẳng kém cạnh gì --=0 )

Cảm ơn bác nhiều!!!

Thân!
 
Cám ơn bác smbsolution đã mở Topic này, em là dân kinh tế tuy nhiên em thấy ngôn ngữ UML rất hay, đặc biệt là ngày còn học đại học hay thấy các thầy đề cập đến. Bây giờ đi làm, có đủ thời gian nghiên cứu nó nên cảm thấy khá hay vì nó đem đến cho người thiết kế một công cụ hoàn chỉnh trong việc thiết kế và mô hình hóa trong rất nhiều lĩnh vực

Trong quá trình giảng dạy thi thoảng em cũng sử dụng UML để xây dựng và mô hình hóa các quá trình sản xuất kinh doanh trong DN để cho sinh viên hiểu thêm và em nhận thấy họ rất thích những mô hình được xây dựng bằng ngôn ngữ này.
Tuy nhiên bác cho em hỏi thêm là có phần mềm nào chuyên sử dụng để thiết kế theo UML hay không. Hện tại em thường sử dụng phần mềm MicroSoft Visio có chứa các Module ngôn ngữ UML tích hợp sẵn để thiết kế, tuy cũng được nhưng vẫn hơi thủ công.
 
dat2007 đã viết:
Tuy nhiên bác cho em hỏi thêm là có phần mềm nào chuyên sử dụng để thiết kế theo UML hay không. Hện tại em thường sử dụng phần mềm MicroSoft Visio có chứa các Module ngôn ngữ UML tích hợp sẵn để thiết kế, tuy cũng được nhưng vẫn hơi thủ công.
List of UML Tool:
http://www.objectsbydesign.com/tools/umltools_byCompany.html

IBM Rational is the most popular tool (I think it is the best one also).

dat2007 đã viết:
...em là dân kinh tế tuy nhiên em thấy ngôn ngữ UML rất hay, đặc biệt là ngày còn học đại học hay thấy các thầy đề cập đến.

Trường liên quan tới khối "Kinh tế" nào ở VN mà lại có các thầy đề cập đến món này nhỉ? Các thầy update công nghệ ác quá. :-=
 
Lần chỉnh sửa cuối:
Trường liên quan tới khối "Kinh tế" nào ở VN mà lại có các thầy đề cập đến món này nhỉ? Các thầy update công nghệ ác quá

Trường đại học Kinh tế quốc dân Hà Nội bác ạ. Trước học môn Hệ thống thông tin quản lý em có thấy các thầy nói đến ngôn ngữ này tuy nhiên bọn em lại không được học, chỉ được nghe các thầy giới thiệu sơ lược thôi, vì ngày đó ngôn ngữ UML còn rất mới không chỉ ở VN mà còn cả trên thế giới, rất ít tài liệu đề cập đến.
Bây giờ mới có cơ hội tìm hiểu thêm . Một lần nữa cám ơn bác
 
Web KT

Bài viết mới nhất

Back
Top Bottom