views:

1207

answers:

4

I work in a mid size company as a Senior dev and work on developing projects that are fairly large size (> 1 year at a minimum). Most of the architects here feel that creating UML diagrams does not justify the time involved (although we always have a ERD and some informal flowchart kinda diagram for all projects)

I am looking to create UML diagrams atleast for the projects that I work on. Based on my quick research, it appears that there are the following:

  1. For Creating a Logical model - Object Role Model (ORM
  2. For Creating a physical model - Component, Class, Sequence, Activity
  3. For the database model - ERD

Questions:

  1. What UML diagrams do you create in your company?
  2. Does MS Visio have the capability to create all of the diagrams above?
  3. Are UML diagrams chosen based on the type of the application being developed?
+1  A: 

PREFACE

I think UML Use Case diagrams are extremely helpful for mapping out the overall users and functional areas of an application. This technically is the job of a Business Analyst, however if one doesn't exist or this level of detail doesn't exist it's an exercise that takes very little time to go through and has tremendous value to give you a big picture view of the solution.

Sequence Diagrams are extremely useful as well with ASP.NET development. It makes the components of the high level view in the Use Case Diagrams easy to decompose and make real.

1.What UML diagrams do you create in your company?

None. UML is not something the BAs, dev team, etc. understand where I currently work. However, the value really isn't there given the type of dev we do: quick and moderate sized tactical solutions.

2.Does MS Visio have the capability to create all of the diagrams above?

Yes. http://softwarestencils.com/uml/index.html

I suggest you consider a tool which allows UML -> Code Gen http://www.visual-paradigm.com/

3.Are UML diagrams chosen based on the type of the application being developed?

It's a mix. UML is a set of tools that can be used in whatever fashion suits the user. The different diagram types (behaviour, structure and interaction) and their sub-types have different purposes. After years of dealing with UML (since the late 90s) I pretty much only see value in the Class, Use Case and Sequence Diagrams. Beyond that it's just semantics overload and little value in the projects I've been involved.

Nissan Fan
+1  A: 

After object model diagrams, I've found use case diagrams to be the most useful.

Chris Pebble
+6  A: 

#1 What UML diagrams do you create in your company?

We use the entire set of diagrams defined by UML. We make particularly heavy use of use case diagrams, class diagrams, sequence diagrams, and state machine diagrams.

#2 Does MS Visio have the capability to create all of the diagrams above?

It does, but we generally do not use Visio for this as there are many tools out there far more suited to the job. Personally, I favor tools that allow me to create diagrams very quickly, without much muss and fuss. Tools that enforce slavish adherence to the UML spec (or, even worse, a tool vendor's interpretation of the spec) annoy me. One of the tools I have found particularly useful is Pacestar's UML Diagrammer.

#3 Are UML diagrams chosen based on the type of the application being developed?

UML can be used to describe aspects of any application. The nature of the application, though, will impact the type and number of diagrams that you choose to employ.

Most of the architects here feel that creating UML diagrams does not justify the time involved

UML diagrams need not take much time to create. The key is to avoid diminishing returns by developing models that are 'just good enough' to satisfy your needs. As I intimated above, I focus my modeling efforts on capturing salient aspects of the system rather than on strict adherence to the UML spec. Further, I do not hesitate to use non-UML diagrams (or simply text) to model aspects of the system if by doing so I can better communicate the system aspects of interest.

Brandon E Taylor
Will +1 when you tell me which tools are better for UML than Visio (Since I hate Visio! :) - Oh, I also hate Visual Paradigm. So much hatred in this world. I think it's about to close this paranthes... Now...)
cwap
I have no fewer than 5 tools in my tool box since none of them alone satisfy all of my needs. Most often, I find myself using Pacestar's UML Diagrammer because of its simplicity and flexibility.
Brandon E Taylor
+1 (+10 if I could) for knowing when to stop modeling and start creating; for knowing what a model/plan is good for, and that the goal is a product that satisfies the user's requirements - not some diagram.
overslacked
+2  A: 

I've used UML since it was invented in the '90's and have used it in companies large and small for a wide variety of purposes. I use UML for two fundamental purposes: as a scratch pad for thinking (sometimes I don’t know what I think until I see what I draw ;) and as a way to document and communicate designs. Here’s how I use it and some of my rules-of-thumb.

I use UML when other tools are inadequate for visualizing/modeling. So, if you're using a SQLServer database, you can use the built-in design diagrams and print and paste them into your documents. UML is not needed here.

In thinking out design problems, I often start with a wall-to-wall whiteboard and once the design crystallizes, I move to UML diagrams (or move back and forth from monitor to wall).

JavaScript and Ajax development. Tool and visualization support is weak. I use UML to think through and show the high-level design of complex JavaScript apps. (If you’re working on a Java app, you can use the tools built into most Java IDEs to visualize your code. On the other hand, if you’re working on a JavaScript app or have poor tools, this is harder to do, so UML can fill in the gaps.)

Information architectures and navigation for web-based apps. I use UML to show web pages, their relationships, and information components on web pages. The same also applies to screens in any kind of GUI (it used to be called a user experience model). I use REST urls in my web-based apps. So I annotate my page objects to show the actual REST URLs. That way, I'm simultaneously thinking through the REST part as I'm laying out the pages. In my experience, this is one of the most useful and underused types of diagrams—perhaps because it’s not standard. It captures both the information architecture (your domain model experienced as a collection of pages/screens) and the concept of the application as a set of navigatable views. Frequently there is a mismatch between this model that is the closest to the user and the application domain model or the database model. Being able to have this model fleshes out the problem. I’ve worked on projects where everyone had their model of the app to be built: the usability people, the developers, the database people, the enterprise architects. But nobody had the correct model and the user experience model fleshed out what they weren’t seeing.

Code-based models. I work with Java and reverse engineer the codebase and create diagrams to document the design. However, because the Java tools are so mature, I infrequently need to reverse engineer to just to understand the code. I'm using Enterprise Architect which is inexpensive and allows you to reverse engineer new code and sync it up with UML diagrams based on older code.

I put all of these different diagrams together in one project and it depicts the total design of the System as a set of views. I also export my UML projects to XML and store them in my version control system. Diagrams are published on the Intranet and inserted into documents.

Component diagrams, never. If I want to depict components, I just use a class diagram and annotate it with a stereotype: page, view, table--to represent the type of object I’m depicting. That keeps things simple for me. I use stereotypes heavily. They allow me to essentially create my own diagram types and yet stick to using mostly class diagrams.

I use sequence and activity diagrams infrequently, but they can be indispensable and powerful at times. Sequence diagrams in the design phase when you are working out the interactions of objects. The more complex the interactions, the more you need sequence diagrams. (When the sequence diagram is too complex, that fact might indicate that you need to simplify your design.) I have found sequence diagrams most useful when reverse engineering a new project that I inherited and need to get up to speed quickly. I’ve found that they can give me a competitive advantage in understanding Systems.

Finally, I tend to prefer quasi-physical models. Models based upon the actual code to be written or the actual system, but somewhat abstracted and tweaked for communication purposes. Somewhere between the airy abstractions of “architecture astronauts” and intricate code-based models with too much detail and less value than the outline view of your IDE.

So to sum up. I use UML for thinking and for documenting and communicating designs when there is a need for better visualization and when other tools fall short.

JimB
1. What are REST urls?2. Wow, I never knew one could convert UMLs to XML. That's pretty neat
In short, they're meaningful, user-friendly URLS where the path segments are descriptive of the page. StackOverflow uses them.
JimB