Module 1 - Introduction to Software Engineering

Nature of Software

The nature of software is defined by its fundamental characteristics, which distinguish it from physical hardware and traditional manufacturing products. The key characteristics are:

Software Engineering: Layered Technology

Software engineering is a systematic and disciplined approach towards the development of the software operation and maintenance. The main purpose behind software engineering is to give a framework for building a software with best quality.

Software engineering is a fully layered technology. To develop a software, we need to go from one layer to another. All these layers are related to each other and each layer demands the fulfillment of the previous layer. The layered technology consists of: Tools, Methods, Process, and Quality focus.

Quality focus Process Methods Tools

1. Quality focus

The characteristics of good quality software are:

2. Process

3. Methods

4. Tools

Software Process

The process framework defines a small set of activities that are applicable to all types of projects. The software process framework is a collection of task sets. A task set consists of a collection of small work tasks, project milestones, work products and software quality assurance (SQA) points.

Umbrella Activities

Typical umbrella activities are:


Generic Process Framework

There are five generic process framework activities:

  1. Communication: The software development starts with the communication between customer and developer. They communicate to understand objectives and gather requirements.
  2. Planning: It consists of complete estimation, scheduling for project development and tracking. A "map" is created which defines the work by describing the tasks, risks, resources, work products and work schedule.
  3. Modeling: It creates a "sketch", showing what it looks like architecturally and how the constituent parts fit together. It consists of complete requirement analysis and the design of the project like algorithm and flowchart.
  4. Construction: Construction consists of code generation and the testing part. The coding part implements the design details using an appropriate programming language, while testing checks whether the flow is correct and provides the desired output.
  5. Deployment: This step consists of delivering the product to the customer and taking feedback from them. If the customer wants corrections or demands additional capabilities, then change is required for improvement in the quality of the software.

Capability Maturity Model (CMM)

The Capability Maturity Model (CMM) is a procedure used to develop and refine an organization's software development process. The model defines a five-level evolutionary stage of increasingly organized and consistently more mature processes. It was developed and is promoted by the Software Engineering Institute (SEI) and is used as a benchmark to measure the maturity of an organization's software process.

Level 5 Optimizing Level 4 Managed Level 3 Defined Level 2 Repeatable Level 1 Initial Process Maturity

Level 1: Initial

  • Ad hoc activities characterize a software development organization at this level.
  • Very few or no processes are described and followed.
  • Processes followed are adhoc, immature, and are not well defined, creating an unstable environment.
  • There is no basis for predicting product quality or time for completion.
  • Since software production processes are not limited, different engineers follow their own process, making development efforts chaotic.

Level 2: Repeatable

  • At this level, fundamental project management practices like tracking cost and schedule are established.
  • Size and cost estimation methods (like function point analysis, COCOMO) are used.
  • Experience with earlier projects is used for managing new similar natured projects.
  • Program management is a key characteristic, focusing on maintaining performance of the software product for the entire lifecycle.

Level 3: Defined

  • Methods for both management and development activities are defined and documented.
  • There is a common organization-wide understanding of operations, roles, and responsibilities.
  • Peer Reviews: Defects are removed by using review methods like walkthroughs and buddy checks.
  • Intergroup Coordination: Consists of planned interactions between different teams to ensure efficient fulfilment of needs.
  • Training Programs: Focuses on the enhancement of knowledge and skills of the team members.

Level 4: Managed

  • Quantitative quality goals are set for the organization for software products as well as software processes.
  • The measurements help the organization predict product and process quality within quantitative limits.
  • Software Quality Management: Includes establishment of plans and strategies to develop quantitative analysis of product quality.
  • Quantitative Management: Focuses on controlling the project performance in a quantitative manner.

Level 5: Optimizing

  • This is the highest level of process maturity and focuses on continuous process improvement using quantitative feedback.
  • Process Change Management: Focuses on continuous improvement of software processes to improve productivity, quality, and cycle time.
  • Technology Change Management: Consists of identification and use of new technologies to decrease development time.
  • Defect Prevention: Focuses on identification of causes of defects and prevents them from recurring.

Key Process Areas (KPAs)

Except for CMM level 1, each maturity level is featured by several Key Process Areas (KPAs) that contain the areas an organization should focus on to improve its software process to the next level.

CMM Level Focus Key Process Areas
1. Initial Competent People NO KPA'S
2. Repeatable Project Management Software Project Planning, Software Configuration Management
3. Defined Definition of Processes Process definition, Training Program, Peer reviews
4. Managed Product and Process quality Quantitative Process Metrics, Software Quality Management
5. Optimizing Continuous Process improvement Defect Prevention, Process change management, Technology change management

Prescriptive Process Models: The Waterfall Model

The name 'prescriptive' is given because the model prescribes a set of activities, actions, tasks, quality assurance and change the mechanism for every project. There are three types of prescriptive process models: The Waterfall Model, Incremental Process model, and Rapid Application Development (RAD) model.

The Waterfall Model

The Waterfall model was the first Process Model to be introduced and is also referred to as a linear-sequential life cycle model. It is very simple to understand and use. In a waterfall model, each phase must be completed before the next phase can begin and there is no overlapping in the phases. Typically, the outcome of one phase acts as the input for the next phase sequentially. Feedback is taken after each phase to ensure the project is on the right path, and testing starts only after the development is complete.

Requirement Analysis System Design Implementation Testing Deployment Maintenance

Phases in Waterfall Model

Advantages of Waterfall Model

Disadvantages of Waterfall Model

Applications of Waterfall Model

Some situations where the use of Waterfall model is most appropriate are:

Incremental Process Model

The incremental model combines the elements of the waterfall model and applies them in an iterative manner. The first increment in this model is generally a core product. Each increment builds the product and submits it to the customer for any suggested modifications. The next increment implements the customer's suggestions and adds additional requirements to the previous increment. This process is repeated until the product is finished. For example, word-processing software is typically developed using the incremental model.

Requirements Build 1 Design & Dev Testing Implementation Build 2 Design & Dev Testing Implementation Build N Design & Dev Testing Implementation

Phases in Incremental Process Model

Advantages of Incremental Model

Disadvantages of Incremental Model

Applications of Incremental Model

Evolutionary Process Models: RAD & Spiral

The Evolutionary development model is a combination of the Iterative and Incremental models of the software development life cycle. It divides the development cycle into smaller, incremental waterfall models in which users are able to get access to the product at the end of each cycle. Feedback is provided by the users, and the development team responds by changing the product, plan, or process. Therefore, the software product evolves with time. The two main types are the Rapid Application Development (RAD) Model and the Spiral Model.

1. Rapid Application Development (RAD) Model

Using the RAD model, a software product is developed in a short period of time (generally a 60-90 days time-box). It is used when the requirements of the complete system are clearly defined and understood. The model achieves faster development and higher quality through gathering requirements via workshops, early user testing of designs, re-use of software components, and less formality in team communication.

Business & Data Modelling

Business: Information flow among business functions is defined by answering what data drives the process and where it goes.
Data: Data collected from business modeling is refined into a set of data objects (entities) and their relationships are defined.

Process Modelling

The information objects are transformed to achieve the necessary data flow to implement a business function. Processing descriptions are created for adding, modifying, deleting, or retrieving a data object.

Application Generation & Testing

Generation: Automated tools are used to facilitate the construction of the software.
Testing: Reduces overall testing time because RAD emphasizes reuse, though new parts and interfaces must still be fully tested.

2. Spiral Model

First mentioned by Barry Boehm, the Spiral Model is a risk-driven software development process model. It is a combination of the waterfall model and iterative model. It allows incremental releases of the product or incremental refinement through each iteration around the spiral, continuously evaluating unique risk patterns.

Communication & Planning Risk Analysis Engineering Construction & Release

1. Communication & 2. Planning

Interacting with the customer to gather requirements and understand specifications. Includes estimating the cost, schedule, and resources for the iteration.

3. Risk Analysis

An important phase involving a Risk analyst. Identification of potential risks is done while risk mitigation strategy is planned and finalized.

4. Engineering

Includes designing and modeling the system. Starts with conceptual design and progresses to architectural and physical product design in subsequent spirals.

5. Construction & 6. Evaluation

Programs are developed into prototypes (early cycles) or developed software (subsequent cycles) and tested. Finally, the customer evaluates the software and monitors risks.

Agile Process Model: XP, Scrum, Kanban

The Agile process model is based on iterative development and provides a versatile, rapid, and adaptive response to change. An agile process is driven by customer descriptions, recognizes that plans are short-lived, develops software iteratively with a heavy emphasis on construction, and delivers multiple software increments. Entire projects are divided into smaller parts with iterations lasting from one to four weeks. High-performing agile teams require effective communication, collaboration, self-organization, metrics-driven approaches, and mutual respect.

1. Extreme Programming (XP)

eXtreme Programming (XP) is a lightweight, efficient, low-risk, and flexible agile methodology developed to address the specific needs of software development by small teams facing vague and changing requirements. It emphasizes taking best practices to extreme levels and uses the concept of object-oriented programming.

XP Core Values:

Communication, Simplicity, Feedback, Courage, and Respect.

2. Scrum

Scrum is a light-weighted framework that emphasizes self-organization and is effective for projects with tight timelines, changing requirements, and business criticality. The framework relies on constant feedback and divides the large product into small sub-products.

Product Backlog

A prioritized list of project requirements or features that provide business value.

Sprint Backlog

Divided into product assigned features to sprint and sprint planning meeting.

The Sprint

A time-box of one month or less. Changes are not introduced during the sprint.

Daily Scrum

Short daily meetings guiding 'knowledge socialization' to encourage a self-organizing structure.

3. Kanban

Kanban is a system indicating a workflow that limits Work In Progress (WIP) using visual cards, signboards, or billboards. It utilizes Just-In-Time (JIT) strategies to control inventory expenses and improve high-level production.

Core Concepts of Kanban:

  1. Visualize the workflow: Split work into defined states visualized as named columns on a wall using a Kanban Board.
  2. Limit Work-in-Progress (WIP): Assign explicit limits to how many items can be in progress to realize bottlenecks and prevent overproduction.
  3. Measure Lead Time: Measure the cycle time (average time to complete one item) to optimize the process.
To Do Being Done (WIP: 2) Done Task 4 Task 5 Task 2 Task 3 Task 1

XP vs Scrum vs Kanban

Parameter Extreme Programming (XP) Scrum Kanban
Change Acceptance Amenable to change even in later stages; allowed in set timelines. Changes are not allowed within the Sprint. Changes allowed at any time.
Iterations Typically 1-2 weeks. Sprints lasting 1-4 weeks (max 30 days). Delivery cadence (continuous delivery, short iterations).
Coding Standards Strict coding standards are used. No coding standards are used. No coding standards are used.
Requirements Managed in the form of Story Cards. Managed as artifacts (Product/Sprint Backlogs). Managed using visual Kanban Boards.

Introduction to AI/ML & Advanced Trends in SE

The software engineering landscape is rapidly evolving with the integration of cutting-edge technologies. These advanced trends are reshaping how applications are developed, deployed, and experienced by end-users.

Artificial Intelligence (AI) & Machine Learning (ML)

Machines can now think intelligently like humans and perform tasks that were initially restricted to humans.

  • Chatbots: There is a rising trend of chatbots in app and website development using powerful programming languages, effectively replacing traditional human assistance and customer service.
  • App Usability: The use of AI and machine learning in native app development has begun to significantly enhance customer experience and app usability.
  • Error Reduction: These technologies have reduced human involvement in almost everything, making processes much less prone to errors.
Modern SE Cloud Big Data IoT Low-Code AR/VR/MR Blockchain Human Augment

Internet of Things (IoT)

Ordinary devices and vehicles are attached with sensors for monitoring and data gathering. Best utilized when combined with AI and Big Data, heavily driving smart city solutions.

Low-Code Development

Allows developers to sketch applications like a flowchart rather than coding line-by-line. It is fast, intuitive, and highly fruitful for companies undergoing digital transformation.

Reality Technologies (AR/VR/MR)

  • AR: Empowers digital worlds (e.g., ads, virtual makeup filters).
  • VR: Used heavily in gaming, education, and workforce training.
  • MR: Combines AR smart glasses with VR headsets to direct employees through complicated enterprise operations.

Cloud & Big Data

  • Cloud: Growing need for business availability, data recovery, and "distributed cloud" technology.
  • Big Data: Startups use it to reap benefits via Data-as-a-Service (DaaS), allowing access to exact data when needed while eliminating redundancy.

Blockchain & Human Augmentation

  • Blockchain: Helps in the secured, simplified recording of transactions in a decentralized ledger (used in finance, media, healthcare).
  • Human Augmentation (HA): Implantation of technologies into the human body/brain for cognitive and physical improvements (e.g., powered exoskeletons for heavy lifting).