Software Modeling and Design: UML, Use Cases, Patterns, and Software Architectures