Patterns in software engineering – An Introduction

What is a pattern? (in software engineering world)

A predefined solution for a problem for the given context.

Key words in the above definition is problem, solution and the context.

What are the different categories of the patterns ? (in software engineering)

  • Analysis patterns
  • Design patterns
  • Architectural patterns
  • Technology patterns
  • Integration patterns

Why do we use the patterns?

Objective of patterns is to enhance

  • Reusabililty
  • Repeatability

in return will fetch

  • Cost efficiency
  • Agility (time to market)

Where the pattern concepts started in general ?

The pattern concept has been in use for thousands of years. In the building architecture and design, we have been using the patterns quite extensively. Ancient buildings like pyramids, roman collegium and lot more used the patterns in the implementation. For instance, the pillars used in ancient temples built in Thailand, India and etc are patterns. They did not design the pillars every time. The pillars are to hold the load of the building. We can notice the reusability and repeatability of the pillars in multiple places in those ancient building architecture which in returned improved the ancients to be effective and quick.

What are the types of patterns in each category?

There are conceptual, logical and physical patterns in each category. Conceptual patterns are very high level solution for the given problem at the given context. Physical patterns spells out the implementation solution for the given problem at the given context. Logical patterns are between physical and conceptual.

What is software system architecture?

Software system architecture is collection of viewpoints. The types of viewpoints depends on the type of systems. Software system architecture for a typical web application contains information and functional views primarily focuses on the structural (or static) representation of the system and the deployment, concurrency and operational views are the behavioral (or run-time/dynamic) representation of the system and the development view is guidelines. Views are instance of viewpoints. Viewpoint is a set of standards, guidelines, templates, patterns for constructing a view.

Functional viewpoint:
The functional viewpoint represents the business processes and function elements of the system. It is mandatory for all web development projects since all web projects are executed to meet a set of functional requirement.
Information viewpoint:
It represents the data and flow of the data within the system. The data or information is integral of the web system.
Deployment viewpoint:
The typical web environment contains minimum a web server with internal disk, domain name server, web browser, inter network or intra network. The environment could be complex for a transaction application. It contains quite few infrastructure components like web server, router, switches, firewall, application server, domain name server, intrusion detection devices, messaging services, storage management systems, load balancer, ssl accelerator, external cache devices etc. It is essential to understand the deployment view of the system upfront during the architecture definition phase of the software development life cycle.
Development viewpoint
In an enterprise environment, there are set of standards, policies, patterns, anti-patterns, reference models, lessons learned, domain knowledge, reference architecture and etc. The development team is expected to reuse the existing references. These artifacts are provided to the application developed team by the centralized architecture team. With recent success of the outsourcing development model, the development viewpoint is required to be part of the architecture.
Concurrency viewpoint:
The functional elements of the system are to be served simultaneously for concurrent users in the web environment. It is required to study the behavior of the concurrency structure of functional elements. It enables to create the necessary environment setup like thread configuration for the operational viewpoint.
Operation viewpoint
The gap between the application development process and the infrastructure management process is quite significant in the industry in spite of the well known IT infrastructure management frameworks like ITIL being in place and adapted widely. The longevity, sustainability, maintainability of the system are determined how the operation views are analyzed and designed during the architecture phase of the project. It may be optional if the web application is developed for a limited time.

Software system architecture definition model

Consistency and repeatability in the architecture definition process is a must have requirement in an organization. It is like parents teaching some moral lessons to the kids. Kids will watch the parents if parents do practice what they teach them. If parents does not practice what they teach the kids, the kids are not going to buy-in to the parent’s teaching. Same situation with the architects. Architects emphasis and promote consistency, repeatability, efficiency and etc to the project team and if they do not practice those imperatives in their process and work product, it is going to be a hard sell for them.

Picture speaks more than thousand words. The above diagram illustrates a model, software system architects would follow to define the architecture blue print. The architect’s tool box are the knowledge gained through the internal process, individual experience, continuous improvement. The reference model and pattern catalog provides a framework for repeatability in the architecture definition process and in return implements those imperatives in the end product of the process. ie. software system architecture blueprint.