Software designing process with UML - uml

When designing for a software, what is the correct order of UML diagrams we have to do? Starting from the Use Case diagram, what would be the next diagrams until we have enough to start coding?

UML is just a modeling language, not a software development methodology. A well-known methodology that provides guidelines for using UML in its software development process is the Rational Unified Process, although its popularity has declined. Still, it is not easy to determine the order of the UML diagrams prescribed by RUP from the available material provided by IBM. I have written a paper http://admiraalit.nl/admiraal/WhichUMLmodels.pdf which may help you with that.
For a simple application, a class diagram and a component diagram may be enough, but it depends very much on the type of application.

Related

Are you modeling or drawing? in uml

Please I need help in understanding this two approaches in the uml world. I am a programmer who is new to uml. I just started learning uml lately but kept getting this phrase asked all the time. - Are you modelling or drawing?. An explanation is needed with clear examples.
This link hinted just a little but I am stil confused -- http://modeling-languages.com/drawing-tools-vs-modeling-tools/
UML is a modeling language, which has a graphical notation. Its semantic is precisely specified by UML 2.5 standard of the OMG and also the international standards ISO 19505-1:2012 and 19505-2:2012 (although the latter corresponds to UML 2.4.1).
THere are two different approaches to UML diagramming. And it's heavily influenced by the tools you use:
Drawing tools generally offer UML shapes to be used in drawings. But there is no deeper meaning behind the shapes. It's only pictures. These tools would allow you to mix a use case with a class or an actor in a deployment diagram. The advantage is that you can do what you want. The inconvenience is that what you want may not be compliant.
Real modeling tools let you combine only valid UML elements together and ensure consistency of what you draw with the deeper meaning of the UML language. And they build a true and comprehensive model behind the scene by combining all the facets of the different diagrams.
Modeling tools can do smarter things. They can relate for example a class to their object instantiations in sequence diagram. They can help you to find all the other models in which a specific class is used. If you rename a class or add a property in one diagram, it'll be automatically reflected in all the others.
Modeling requires more discipline, but it's more powerful in the end. Some modelling tools can even use their understanding of UML to generate code out of the model.
You can use UML diagrams in very free way and you can use them up to the specifications. There are even different UML tools - some support only free style diagrams/drafts, some check dependencies and correctness and thus create models. There are some tools in between (MS Visio is one of them)
Nothing is ideal and fitting for everything. For example, some strict tools (VP and EA) forbid to make number-named classes, but according to UML specification you MUST use number names for anonymous classes. But -sigh- we have what we have.
Use of UML as such is not strictly predefined. So, you can use it for freehand drafts, later work on them more thoroughly and make them models. Or do only drafts. Or only models. But at any moment you should know how strictly are you keeping up to specifications. Or at least, trying to keep up. But even very free draft can help you greatly to understand the task or to think in a more productive way.

Is Object Oriented Modelling And Design part of Software Architecture?

Is Object Oriented Modelling And Design part of Software Architecture?
I am confused between Object Oriented Modelling & Design and Software Architecure. In Software Achitecture we are providing the skeleton for system (as I understand) In Objet Oriented Modelling and design we design the system using different UML Digrams. So are we doing same thing in Software architecture ?
Because a skeleton could be defined using diagrams only,right?
Can someone please explain me with Example of Software architecture?
No, Object Oriented Modeling is a toolset or process, Software Architecture is a deliverable artifact.
Related:
Wikipedia: Software architecture
Wikipedia: Object-oriented analysis and design
Kirill Fakhroutdinov's uml-diagrams.org: examples of UML diagrams documenting a software architecture
Scott W. Ambler's Agile Modeling: Architecture Envisioning: An Agile Best Practice
Software Architecture is a very broad term. It can describe the software of the tiniest component, to the largest systems.
OOMD is the process of arriving at a design that may be a part of a software architecture, typically by using Class Diagrams. But OOMD can be used outside of designing something new. It can be used to help analyse and understand a piece of legacy code.
UML is a language which is used in conjunction with OOMD. It is nothing more than that. A UML diagram doesn't necessarily 'contain' an architectual concept, just as much as a picture of an apple is an apple. One would use UML to illustrate and solidify concepts that will eventually go into the finished product.
Not all of UML is concerned with OOMD (eg. Use Cases, and Activity Diagrams). And not all of OOMD is concerned with Software Architecture.
No, object oriented modelling and design is not part of the software architecture.
The software achitecture is independent of the platform that is used to implement it. The platform doesn't even have to be object oriented.
Software architecture has been around since before object oriented development even existed. I remember learning software achitecture approaches (JSP) before even hearing about object oriented development (OO was a very recent concept when I was in school).
Part of the software architecture could be used to automatically generate object models using some tool, but this a different part. By doing that you have taken the step beyond the software achitecture and chosen a platform for the implementation.

UML for system modelling or for software modelling?

Is UML (unified modelling language) a technique for system modelling or for software modelling?
Both. Some diagrams are more useful for software modeling, but some others can be used for both. A state machine for example can be used for a software or a system.
But if you want to model a system with UML, you should take a look at SysML a profile to specialize your UML models.
UML is a general purpose modeling language, although it's primarily geared toward modeling object-oriented software systems. The latest version of the UML specification contains 14 diagrams, some of which are applicable to software in general while others make more sense when applied to modeling object-oriented software systems. Seven UML diagrams are used in SysML, which is commonly used for systems and systems-of-systems modeling.
UML is a tool for modeling all kinds of things, not even just programming related. For example, you can use state diagrams to model the function of a control panel, e.g. a thermostat. You can use use-case diagrams or sequence diagrams to document business processes.
You can use activity diagrams to show how a hamburger is made in a fast-food restaurant.
According to the wikipedia article about Unified Modeling Language it is "a standardized (ISO/IEC 19501:2005), general-purpose modeling language in the field of software engineering. The Unified Modeling Language includes a set of graphic notation techniques to create visual models of object-oriented software-intensive systems."
It is used to describe the more abstract structure of the system and the software itself at the same time.
If you take a look at the article (which I highly recommend), you'll notice that
"The Unified Modeling Language (UML) offers a standard way to visualize a system's architectural blueprints, including elements such as:
* activities
* actors
* business processes
* database schemas
* (logical) components
* programming language statements"
* reusable software components"
By describing the activities, actors, business processes you basically describe the abstract representation/design of the system.
And by describing the (logical) components, programming language statements, reusable software components you describe the implementation details (software).

Advantages and disadvantages of BPMN?

I was hoping you could tell me what the advantages and disadvantages of BPMN are in a developers perspective.
I'm comparing UML with BPMN and a found a bunch of advantages and disadvanteges for UML but none for BPMN.
It's largely down to audience and purpose. In terms of modelling language, BPMN and UML activity diagrams cover pretty much the same conceptual space with different notations. The notation thing gets religious very quickly. I personally prefer AD notation over BPMN - but it's a very personal thing.
Broadly speaking, BPMN tends to find favour with those coming from a business process modelling / business analysis background. UML ADs tend to be favoured by those coming from a software perspective. Tool support tends to mirror this: the high end process modelling tools (casewise, aris, etc.) are more likely to support BPMN; software modelling tools (MagicDraw, Sparx, etc.) favour UML. However there's increasing crossover there. I've used both with business stakeholders with no issues in either case.
Finally is purpose. Are your diagrams going to be for human consumption only or used as a specification for some form of analysis/code generation? If it's not just pictures then your tool chain may well be the deciding factor.
If you want a more detailed description of the differences, have a look at the answer in this forum post.
A new BPMN Profile has been discussed at the OMG. UML can easily generate code even with an activity or state diagrams. You just need to add stereotypes in your model then a parser will take the xmi and create code. The OMG specification will define which stereotypes should be used and why. Really a very good idea !!
In my company we have stopped using BPMN and are only focus on the activity diagram which is more accurate because built on the top of a standard language. Having also class diagram, usecase and activity diagrams allows to model faster.
We get a running code from our activity or state diagram. We debug with our class diagram.
We use the same metamodel for all diagrams and therefore can trace activity to code implementation and through class diagram. I mean that the code is reversed once generated and then we check all requirements and the architecture in order to have a nicer object architecture.
Everything works well :-)
We are now waiting for the new profile specification and will implement the needed stereotypes in order to cover BPMN.
My answer to your question is that we don't need anymore BPMN and should move on to UML 2.3 BPMN profile implementation.
BPMN is for modeling business process flow, isn't it? That's not exactly what UML is for. The goal of UML is to model a software from different view and ultimately not to have to code it (yes that's kind of ideal).
The main arguments for BPMN from a business perspective are usually:
When building BPMN diagrams from scratch with many stakeholders, it is ok to mix tasks of different levels of hierarchy, which can be detailed out or summarized later.
The basic language elements can be thought quickly even to a non-technical audience.
The developers can immediately start working and attaching source-code and scripts to the BPMN-diagram by workflow and business process management software like Camunda.
The main drawbacks are that
The initial BPMN sketch (usually by the business) usually needs many iterations to arrive at a diagram which allows for implementation.
It is not straight forward to represent different roles since the usual concept of lanes in pools might not be enough or lead to huge diagrams, see e.g. BPMN: multiple roles in a row
See the MDA on OMG (Model Driven Architecture):
- we use BPMN only for Computation Independent Models (CIM)
- we use UML only for Platform Independent Model (PIM, high level design) and Platform Specific Model (PSM, low level design).
- using BPMN for any "software systems" or UML for "business" have no sense (see UML v.2.5)
- for developers: we can make transition from BPMN business process to Use Case, it is good tool for defining scope of requirements for software https://www.visual-paradigm.com/tutorials/from-business-process-to-use-cases.jsp
If you are looking for similarities, both UML and BPMN diagrams can be described using text.
PlantUML
BPMN Sketch Miner

What methodologies, processes, and tools are available for designing and modeling non-object-oriented applications?

I'm quite familiar with UML for modeling object-oriented applications. However, I'm not familiar with anything specifically designed for designing and/or modeling procedural, functional, or any other paradigm. How do you design or model applications written in a non-object-oriented language?
Oh golly, there's a blast from the past.
We used to use flowcharts, pseudocode, data flow diagrams, structure charts, Hierarchy-IPO, "coathanger charts" (which are really a variant of flowcharts), Nassi-Schneiderman diagrams. Among others.
Oh, SADT is another one.
SSADM - I think I've still got my certification in a box somewhere...
UML can be used for modeling non-OO languages as well. I use UML for modeling just about anything. To be fair the core of UML is OO focused, but much of the behavior, instance level, and less common structural types work for non-OO languages. However, UML is for design in OO not implementation, your building blocks/objects are just different, modules, or whatnot.
Many of the diagram types mentioned by Charlie Martin have analogous UML representations. Even better it is a model not just a diagram/view.
Example: LISP is not OO based. So create a keyword or stereo type for classes that is function. The attributes are the arguments as it has no state. This is not perfect, but it is the most approachable.
Example: COBOL/JCL is not OO based. Have each PACBASE package be a component and have structural components as your COBOL. Artifacts can be your JCL.
Let fact that UML is broad and loosely defined to your benefit and re-purpose UML parts. You can always formalize it with a UML profile. Where I work this has been a point of discussion for some time. Mainframe programmers do not see OO design and OO-UML as relevant, but it is only partially true in that the core or how far most people go with it is just to the class/structural stuff and use cases, which is OO focused.

Resources