The Unified Modeling Language (UML) is a mature design language, which can be used for modeling object oriented analysis and designs.
There are lots of web resources and books available on how to model an OO design using UML. But can UML be used to model a procedural design ? Assume a very sophisticated C program design that consists of multiple threads, functions, messaging with queues, synchronization with mutexes etc. I am yet to find a good tool that can help model such a system effectively; there is also a lack of standard notations that can be used to diagrammatically represent the design.
I started looking at the UML diagrams to find out whether one of the UML diagrams would come close to modelling the above. The closest, I feel, is the activity diagram. I think the following notations and features of the activity diagram should help:
1. The activity flow diagram with activity states and transitions can be used to represent procedural flow.
2. Fork and Join synchronization bars may be used to represent multithreading
3. The ’signal’ contruct can be used to represent messaging.
An excellent free tool to start UML design is ArgoUML. A product based on ArgoUML is also available as a community version for non-commercial use. You can get it from here.
UML template for VISIO
http://www.phruby.com/stencildownload.html