Software Engineering Paradigms And Models Information Technology Essay

Introduction

In this lesson, we presented software engineering paradigms and models in some detail. These paradigms describe and model how software systems are developed. First, we present the background of traditional software life cycle models that are most popular and widely common. Then, we present the history of software paradigms. We specifically presented and described the following paradigms: waterfall model (also known as the traditional software development life cycle), modified waterfall model, the spiral model, the incremental process model and the agile development model.

Learning Outcomes

Be familiar with the term paradigm and how it relates to software engineering.

Be familiar with the history of software paradigms.

Be familiar with the four software engineering paradigms

1.1 Introduction

"Paradigm", a Greek word meaning "example", is commonly used to refer to a category of entities that share a common characteristic. Software engineering paradigms are also known as Software engineering models or Software Development Models.

In order to reduce the potential chaos of developing software applications and systems, we use software process models and paradigms that describe the tasks that are required for the building of high-quality software systems. The specific process model or paradigms used to develop a given system depends heavily on the nature of the target system. Use of software paradigms in the development of the software processes has many benefits, including supporting systematic approach and the use of standard approaches and methodologies.

The software engineering paradigm which is also referred to as a software process model or Software Development Life Cycle (SDLC) model is the development strategy that encompasses the process, methods and tools. SDLC describes the period of time that starts with the software system being conceptualized and ends with the software system been discarded after usage.

The objectives of the use of software engineering paradigms include:

The software development process becomes a structured process.

Determine the order of states involved in software development and evolution, and to establish the transitions criteria for the next stage.

The software engineering paradigm provides the guidance to the software engineer.

A paradigm specifies the particular approach or philosophy for designing, building and maintaining software. Each paradigm has its own advantages and disadvantages which make some paradigm more suitable to be used in developing a given software system in a given situation than another.

The techniques, tools procedures and methods in developing software systems are heavily dependent on the selected paradigm.

There are common software process tasks, phases and activities that are modeled by software models. They are heavily affected by selected software paradigms. These tasks, phases and activities include:

Requirements Engineering: Software specification and functional requirements obtained from the user.

Requirements Analysis and Modeling

Architectural Engineering, implementation and Design: Production of the software system as a product

Software Testing and Validation: Activity that assures that customer specifications are met

System Delivery.

Software Evolution and Upgrading: System modification to meet continuing customer needs

System Documenting

Maintenance

1.2 History of Software Paradigms

Since the development of the early projects of large software systems in the 1950's and 1960's computer scientists started to develop Software Development Life Cycle (SDLC) models to govern the whole process of development. A number of process models have been developed over the years. The purpose of these models was to be used as a guide and a conceptual scheme to manage the system software project in a systematic, formal and procedural way. They also provide a guide for the development of software applications. Software models are used to guide the various tasks of the software system project including planning, organizing, staffing, coordinating, budgeting, and directing software development activities.

A variety of different process models have evolved and improved over the years. Each represents an attempt to bring order to an inherently chaotic activity. Each of the models is characterized in a way that ideally assists in the control and coordination of a software project.

The difference between various software models include that they emphasize different aspects of the stages of the SDLC. Each emphasizes different aspects of the software life cycle and each is suitable to be used for projects for which the emphasized aspects are important.

In the early stages of the evolution of the software models, these models were classic, traditional and immature.

Since the 1950's and 1960's, many descriptions of the classic software life cycle have been developed. The first software model is the "waterfall" model. The software models are usually describes as flowcharts. These flowcharts summarize in a single display how developing stages of large software systems are conducted. These flowcharts are also used to present and describe the corresponding software model to customers, business manager, and development programmers.

2.0 The Software Engineering Paradigms (Process Models)

The four basic models are:

Waterfall model, also known as the traditional software development life cycle (SDLC).

The spiral model

Incremental process model

Agile development model

Other models include:

Build and fix model

The linear sequential model

The prototyping model (Rapid prototyping model)

Fountain model

Transformation model

Rapid Application Development (RAD) model

Evolutionary process model

Clean room software engineering model

Aspect-Oriented Software Development (AOSD) model

The software engineer chooses a specific software engineering model based on the nature of the project and application he/she is planning to develop. The methods and tools to be used, and the controls and deliverables are affected and influenced by the chosen model.

In the following subsections we present some the above software engineering models (paradigms).

2.1 Waterfall Model

The waterfall model is also known as the linear sequential model and as classic life cycle model.

This model was developed in 1970 to make the software development process more structured. It is the oldest and most commonly used software engineering.

It demands a systematic, sequential approach to software development that begins at the requirements analysis through planning, design, coding, testing, and delivery.

The waterfall model, drawn from an engineering model is used in order to control the development of large software systems. The waterfall model is visualized as the flowchart in Figure 1. It consists of different stages which are processed in a linear fashion. The steps in the waterfall mode are: requirements analysis, planning, design, coding, testing, and delivery. Brief description of the phases in the waterfall model is presented below.

Requirements Analysis

In this phase the requirements of the software system are defined. This answers the ‘What is the software system to be developed’ question. It involves extensive user participation and ends with an approved set of requirements documented in a software requirement specification (SRS) document. This document is the basis of next stages of the project.

Design

In this phase the logical design of the system is defined. This answers the ‘How is the software system will be developed’ question. This phase uses the requirements specified in the previous phase (the SRS document) and translates them into design which will solve the problem. The design phase is an intermediate phase and bridge between ‘What’ the user/customer wants and the implemented system (code) that will be created to satisfy the requirements.

Coding

This stage of the model involves the writing of the code. The actual design is turned into a set of programs.

Testing

The code that is developed in the implementation phase is tested during the testing phase. This involves unit testing for the lowest level components, integration testing for groups of components and testing of the system as a whole.

A part of the testing phase are the verification and validation of the system for acceptance (acceptance testing). Verification checks that the system is correct (building the system right) while validation checks that the system meets the users desires (building the right system). System validation fulfils the use needs and and requires considerable user involvement.

Delivery

In this phase the system is made operational. Main activities in this phase include training of the user’s, and installation of the system. Also, in this phase the system is maintained where bugs, errors, and defects are corrected. The system is made more efficient, new requirements are added and existing functionality and features modified to meet the changing customer/user/business needs.

Requirements Analysis

Planning

Design

Coding

Delivery

Integration Testing

Figure1: Waterfall model

In waterfall model each phase starts when the previous stage finishes. The original classical waterfall model enforces strict sequentially among tasks. This means that the phases are executed sequentially and no parallelism or overlapping could occur among them. There are well-defined boundaries between phases and each stage has a well-defined start and end. This model is the classic life cycle because of its methodical chronological flow. The waterfall model was one of the first software models to be developed. It is only suitable for projects in which all the customer requirements are known at the beginning of the project, which is only true for small scale projects. Also, in this model a working version of the system is only available late in the project. This problem was addressed by the incremental process model.

The waterfall model has the following advantages:

The model has well defined phases with well defined inputs.

The model recognizes the sequences of software engineering activities that result in a software product.

The waterfall model has the following disadvantages:

Real projects rarely follow the sequential flow that the model proposes.

The model assumes that requirements are clearly specified at the beginning of the project.

The model has no mechanism to handle changes to the requirements that are identified during the design phase.

The model reduces the customer’ involvement between design and testing phase of the project.

The model provides no contribution from the customer for active participation during the intermediate phase of the life cycle.

For large projects, the users have to wait a long time for the delivery of the system.

The assumption that all requirements have to be known at the beginning leads to premature decisions.

This model requires cannot accommodate the natural uncertainty that exist at the beginning of any project.

Despite these disadvantages, the waterfall model remains popular because it recognizes the inherent sequence in software engineering activities.

When Winston Royce proposed this model he included feedback loops. Figure 1 removes these loops for simplicity. Feedback loops are needed to provide for feedback between phases or for updating/re-definition of earlier phases. Figure 2 shows the waterfall model with feedback loops shown.

Requirements Analysis

Planning

Design

Coding

Delivery

Integration Testing

Figure 2: Modified waterfall model

Figure 2 shows the feedback loops needed to provide for overlapping and feedback between phases. Figure 2 implies that the waterfall model is not a simple linear model but an iterative model. This model recognizes the fact that at the design phase the development team may have to go back and perform some of the activities of a previous requirements analysis phase as more clarity comes in the later design phase.

The waterfall model is inflexible in the partitioning of the project into distinct phases. It is inadequate for realistic validation activities. However, it generally reflects engineering practice.

2.2 The Spiral Model

The spiral process model (developed by Barry Boehm in 1989) includes the same steps (requirements analysis, planning, design, coding, testing, and delivery) as the waterfall process model.

The motivation behind the development of the spiral process model was due to fact that requirements given at the beginning of the project are incomplete where requirements analysis phase and the design phase are continuously evolving as time passes. The steps go through a cyclical motion as requirements and design

evolve as shown in figure 3. As Figure 3 shows, the spiral model is non-linear and cyclic. Each cycle of the spiral consists of 6 phases (as in the waterfall model). The radius of the spiral represents the cost accumulated so far in the process and the angular dimension represents the program in the process. Each phase starts with a design goal and ends with the client/customer reviewing the progress thus far.

Figure 3: The spiral model

The spiral model focuses on the constant re-evaluation of the design and risks involved. It can be described as being ‘iterative’ and ‘sequential’. The model can accommodate any process development model due to its generality. It is used commonly used for large and complex projects which as a result, can also be described as being expensive.

The spiral model has the following advantages:

Takes into consideration the change of the requirements during the development process.

The model is flexible and can be tailored for a variety of situations, such as reuse, component based development and prototyping.

Can be adjusted to be used as any other model.

Combines the best features of waterfall and prototyping models.

The spiral model has the following disadvantages:

Complicated, unsuitable for small projects where the requirements are clearly known at the beginning of the development process.

2.3 Incremental Process Model

Similarly to the spiral model, the incremental process model uses the same phases as the waterfall process model. The difference between this model and the waterfall model is that in this model the phases are much smaller than the waterfall phases.

This model is similar to the spiral model in that the requirements are not complete at project start. But the difference with the spiral model is that rather than going in a cyclical cycle like the spiral model, the incremental model has something similar to multiple waterfalls within the model. Figure 4 shows the incremental process model.

Figure 4: Incremental process model

The incremental process model allows customers to gent the developed system incrementally and part by part. They do not need to wait for the whole system to be completed. This is especially important in very large system where the completion of the whole system takes very long time. Deliverables are produced by increments where after an initial information strategy planning, the customer could get the first deliverable which is the core product. Here, the first ‘increment’ is the core product or the most important functionality of the system. Basic requirements are addressed, and the core product is produced. Non-basic requirements (some known, others unknown) are addressed later and the rest of the project remains undelivered. The core product is used and reviewed by the customer and base on customer evaluation, a plan is developed for the next increment. The plan addresses the new requirements specified by the customer of the core product to better meet the needs of the customer and the delivery of additional features and functionality. The incremental process is repeated following the delivery of each increment, until complete product is produced. The incremental process model is both evolutionary and interactive approach.

The incremental process model has the following advantages:

The model adds flexibility to the basic waterfall model by adding incremental iteration processes.

Each function of the system can be treated as a separate system and developed in accordance with the waterfall model (modular design)

The system can be delivered to the customer incrementally beginning with the first function and later functions one by one on a different project schedule, with each function delivered initially as a separately operating function.

Early delivery of parts of the functionality for use.

The customer has the capability to give his feedback and evaluation of the system at different stages of time as the system is incrementally developed.

The highest priority features and functionalities of the system are incorporated in early deliveries.

Re-prioritization is possible in the course of the project.

The incremental process model has the following disadvantages:

Total development costs are higher than in other models.

Total time period for delivery of the complete system is longer.

The success of the development of the whole system is dependent on correct planning of priorities among system components. Wrong planning can result in a disaster.

2.4 Agile Development Model

A discussion issue among software engineering main players is how much to involve customers with the different stages of the SDLC and how much to overlap these phases. This is the issue that led to the development of the Agile development model. The motivation of the development of the Agile development model is the customer

Is not always pleased with the product because he/she did not give all of the expected requirements and engineers did not always understand the requirements. This model has the customer involved throughout all of the steps and giving continuous feedback on the product. In this model the testing, correctness, validation and verification of the developed component are implemented with customer being involved to meet his/her needs.

Agile model includes only 4 phases of the SDLC which are: planning, design, coding and testing. Figure 5 shows the Agile development model. Agile software development model promotes development iterations throughout the life-cycle of the project.

Figure 5: Agile development model

The Agile development model, also known as the "Extreme Programming" model has the sole focus of time of delivery of the project. It is designed to allow software projects to be completed in the shortest time possible. Hence, agile development models are appropriate for web applications developers, which require rapid delivery of the system.

The incremental process model has the following features:

There are many agile development methods; most minimize risk by developing software in short time.

One iteration in agile development model is the Software developed in one unit of time.

Each iteration is an entire software project includes all stages that exist in the model which are planning, requirements analysis, design, coding, testing, and documentation.

An iteration does not necessarily add enough functionality to guarantee releasing the product to market. But, at the end of the iteration, there should exists an available release (without bugs).

At the end of each iteration, the development team re-evaluates project priorities.

Agile methods emphasize face-to-face communication over written documents.

Summary

In this lecture, the following has been discussed:

In this lesson, we presented software engineering paradigms and models in some detail. These paradigms describe and model how software systems are developed. First, we present the background of traditional software life cycle models that are most popular and widely common. Then, we present the history of software paradigms. We specifically presented and described the following paradigms: waterfall model (also known as the traditional software development life cycle), modified waterfall model, the spiral model, the incremental process model and the agile development model.

Exercises

What is a Process Framework?

What are the Generic Framework Activities?

How the Process Model differ from one another?

Write out the reasons for the Failure of Waterfall Model?

What does a System Engineering Model accomplish?

Write the disadvantages of classic life cycle model.

What do you mean by task set in spiral Model?

What is the main objective of Win-Win Spiral Model?

Which of the software engineering paradigms would be most effective? Why?

Explain Linear Sequential Model and prototyping model in detail

Explain incremental model in detail