Software Engineering
 Basic of S/W Engineering
 Layered Technology
 Software Process Framework
 Generic Process Framework
  Activities
 Umbrella Activities
 CMMI Level
What is software?
   Computer programs and associated documentation
   Software products may be developed for a
    particular customer or may be developed for a
    general market
   Software products may be
     Generic   - developed to be sold to a range of
      different customers
     Custom  - developed for a single customer
      according to their specification
    What is software engineering?
   IEEE-Definition :
       (1) The application of systematic, disciplined, quantifiable
           approach to the development, operation, and
           maintenance of software; that is, the application of
           engineering to software.
       (2) Its a discipline that is concerned with all aspects of
           software production.
 Software engineers should adopt
      Systematic and organized approach to their work
      Use appropriate tools and techniques depending on the
       problem to be solved
      The development constraints and the resources available
 Apply Engineering Concepts to developing Software
 Challenge for Software Engineers is to produce high quality
software with finite amount of resources & within a predicted
schedule
Insimple word - software engineering is
about designing, building, testing, and
maintaining computer programs and systems
   Software engineering is an engineering discipline that
    is concerned with all aspects of software production
    from the early stages of system specification through
    to maintaining the system after it has gone into use.
   Engineering discipline
       Using appropriate theories and methods to solve problems
        within organizational and financial constraints.
   All aspects of software production
       Not just technical process of development. Also project
        management and the development of tools, methods etc. to
        support software production.
Engineering Process
Layered Technology
A quality Focus
   Every organization is rest on its commitment to quality.
   Total quality management, Six Sigma, or similar continuous
    improvement culture and it is this culture ultimately leads to
    development of increasingly more effective approaches to software
    engineering.
   The bedrock that supports software engineering is a quality focus.
Process:
   It’s a foundation layer for software engineering.
   A set of activities whose goal is the development or evolution of
    software
   The processes define the tasks to be performed and the order in
    which they are to be performed
   Generic activities in all software processes are:
        Specification - what the system should do and its development
         constraints
        Development - production of the software system
        Validation - checking that the software is what the customer wants
        Evolution - changing the software in response to changing
         demands
Methods:
   It provide the technical how-to's for building software.
   Methods encompass a broad array of tasks that include requirements
    analysis, design, program construction, testing, and support.
   There could be more than one technique to perform a task and
    different techniques could be used in different situations.
Tools:
   Software systems which are intended to provide automated support
    for software process activities. CASE systems are often used for
    method support
   Upper-CASE
     Tools to support the early process activities of requirements and
    design
   Lower-CASE
    Tools to support later activities such as programming, debugging and
    testing
Process Framework
•Each framework activities is
populated by a set for software
engineering actions – a collection
of related tasks.
• Each action has individual work
task.
Generic Process Framework
Activities
Communication:
    
   Heavy communication with customers, stakeholders, team
       Encompasses requirements gathering and related activities
   Planning:
       Workflow that is to follow
       Describe technical task, likely risk, resources will require, work
        products to be produced and a work schedule.
   Modeling:
       Help developer and customer to understand requirements
        (Analysis of requirements) & Design of software
   Construction
       Code generation: either manual or automated or both
       Testing – to uncover error in the code.
   Deployment:
       Delivery to the customer for evaluation
       Customer provide feedback
Umbrella Activities
   Software project tracking and control
        Assessing progress against the project plan.
        Take adequate action to maintain schedule.
   Formal technical reviews
        Assessing software work products in an effort to uncover and remove errors before
         goes into next action or activity.
   Software quality assurance
        Define and conducts the activities required to ensure software quality.
   Software configuration management
        Manages the effects of change.
   Document preparation and production
        Help to create work products such as models, documents, logs, form and list.
   Reusability management
        Define criteria for work product reuse
        Mechanisms to achieve reusable components.
   Measurement
        Define and collects process, project, and product measures
        Assist the team in delivering software that meets customer’s needs.
   Risk management
        Assesses risks that may effect that outcome of project or quality of product (i.e.
Capability Maturity Model
Integration (CMMI)
   The Software Engineering Institute (SEI) has
    developed process meta-model to measure
    organization different level of process capability
    and maturity.
   CMMI – developed by SEI
   The CMMI defines each process area in terms of
    “specific goals” and the “specific practices”
    required to achieve these goals.
   Specific goals establish the characteristics that
    must exist if the activities implied by a process
    area are to be effective.
   Specific practices refine a goal into a set of
    process-related activities.
   Fulfilling customer needs and expectations.
   Value creation for investors/stockholders.
   Market growth is increased.
   Improved quality of products and services.
   Enhanced reputation in Industry.
   Staged Representation :
       uses a pre-defined set of process areas to define improvement path.
       provides a sequence of improvements, where each part in the sequence
        serves as a foundation for the next.
       an improved path is defined by maturity level.
       maturity level describes the maturity of processes in organization.
       Staged CMMI representation allows comparison between different
        organizations for multiple maturity levels.
   Continuous Representation :
       allows selection of specific process areas.
       uses capability levels that measures improvement of an individual process
        area.
       Continuous CMMI representation allows comparison between different
        organizations on a process-area-by-process-area basis.
       allows organizations to select processes which require more improvement.
       In this representation, order of improvement of various processes can be
        selected which allows the organizations to meet their objectives and
        eliminate risks.
CMMI Level
Level 0 (Incomplete) –
       Process are not perform or not achieve all the goals and objectives
        defined by the CMMI for Level I capability.
Level 1 (Performed) – All specific goals are performed as per defined by CMMI
Level 2 (Managed) –
       All level 1 criteria have been satisfied
       In addition to Level I;
            People doing work have access to adequate resources to get job
             done,
            Stakeholders are actively involved,
            Work tasks and products are monitored, controlled, reviewed, and
             evaluated for conformance to process description.
Level 3 (Defined) –
       All level 2 criteria have been achieved.
       In addition;
            management and engineering processes documented
            standardized and integrated into organization-wide software process
Level 4 (Quantitatively Managed) -
        All level 3 criteria have been satisfied.
        Software process and products are quantitatively understood
        Controlled using detailed measures and assessment.
Level 5 (Optimized) –
        Continuous process improvement is enabled by quantitative feedback
         from the process and testing innovative ideas.
   CMMI provides a structured approach to process improvement,
    ensuring higher quality and lower risk in organizational processes.
   The staged or continuous representation, organizations can achieve
    different maturity or capability levels, leading to standardized,
    managed, and optimized processes. This systematic improvement
    enhances customer satisfaction, market reputation, and overall
    business performance. CMMI is a valuable tool for organizations
    seeking to integrate and enhance their processes effectively.
                            Process Model
   Different process models
     Build-and-fix model
     Waterfall model
     Incremental model
     Evolutionary process models
          Rapid    prototyping model
          Spiral   model
       Agile process models
          Extreme    programming
       Object-oriented life-cycle models
          Unified   Process
   Criteria for deciding on a model
             Software Process Model
   Process model (Life-cycle model) -steps through
    which the product progresses
       Requirements phase
       Specification phase
       Design phase
       Implementation phase
       Integration phase
       Maintenance phase
       Retirement
Build and Fixed Model
   Problems
       No specifications
       No design
   Totally unsatisfactory
       High cost
       Difficult maintenance
Waterfall Model
   The Waterfall Model was the first Process Model to be introduced. It 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.
   the outcome of one phase acts as the input for the next phase sequentially.
   1. Requirements Analysis and Specification
   Requirement Analysis and specification phase aims to understand the
    exact requirements of the customer and document them properly. This phase
    consists of two different activities.
   1. Requirement Gathering and Analysis: Firstly all the requirements
    regarding the software are gathered from the customer and then the
    gathered requirements are analyzed.
   The goal of the analysis part is to remove incompleteness (an incomplete
    requirement is one in which some parts of the actual requirements have
    been omitted) and inconsistencies (an inconsistent requirement is one in
    which some part of the requirement contradicts some other part).
Waterfall Model
   2. Requirement Specification: These analyzed requirements are
    documented in a software requirement specification (SRS) document. SRS
    document serves as a contract between the development team and
    customers. Any future dispute between the customers and the developers
    can be settled by examining the SRS document.
   2. Design
   The goal of this Software Design Phase is to convert the requirements
    acquired in the SRS into a format that can be coded in a programming
    language. It includes high-level and detailed design as well as the overall
    software architecture. A Software Design Document is used to
    document all of this effort (SDD).
   High-Level Design (HLD): This phase focuses on outlining the broad
    structure of the system. It highlights the key components and how they
    interact with each other, giving a clear overview of the system’s
    architecture.
   Low-Level Design (LLD): Once the high-level design is in place, this
    phase zooms into the details. It breaks down each component into smaller
    parts and provides specifics about how each part will function, guiding the
    actual coding process.
   3. Development
   In the Development Phase software design is translated into source
    code using any suitable programming language. Thus each designed
    module is coded. The unit testing phase aims to check whether each
    module is working properly or not.
   In this phase, developers begin writing the actual source code based
    on the designs created earlier.
   The goal is to transform the design into working code using the most
    suitable programming languages.
   Unit tests are often performed during this phase to make sure that
    each component functions correctly on its own.
   4. Testing and Deployment
   1. Testing: Integration of different modules is undertaken soon after
    they have been coded and unit tested. Integration of various modules
    is carried out incrementally over several steps. During each
    integration step, previously planned modules are added to the
    partially integrated system and the resultant system is tested. Finally,
    after all the modules have been successfully integrated and tested,
    the full working system is obtained and system testing is carried out
    on this. System testing consists of three different kinds of testing
    activities as described below.
   Alpha testing: Alpha testing is the system testing performed by the
    development team.
   Beta testing: Beta testing is the system testing performed by a
    friendly set of customers.
   Acceptance testing: After the software has been delivered, the
    customer performs acceptance testing to determine whether to
    accept the delivered software or reject it.
   2. Deployment: Once the software has been thoroughly tested, it's
    time to deploy it to the customer or end-users. This means making
    the software ready and available for use, often by moving it to a live
    or staging environment.
   During this phase, we also focus on helping users get comfortable
    with the software by providing training, setting up necessary
    environments, and ensuring everything is running smoothly. The goal
    is to make sure the system works as expected in real-world conditions
    and that users can start using it without any hitches.
   5. Maintenance
   In Maintenance Phase is the most important phase of a software
    life cycle. The effort spent on maintenance is 60% of the total effort
    spent to develop a full software. There are three types of
    maintenance.
   Corrective Maintenance: This type of maintenance is carried out to
    correct errors that were not discovered during the product
    development phase.
   Perfective Maintenance: This type of maintenance is carried out to
    enhance the functionalities of the system based on the customer’s
    request.
   Adaptive Maintenance: Adaptive maintenance is usually required
    for porting the software to work in a new environment such as
    working on a new computer platform or with a new operating system.
   Features of Waterfall Model
   Sequential Approach: The waterfall model involves a sequential
    approach to software development, where each phase of the project is
    completed before moving on to the next one.
   Document-Driven: The waterfall model depended on documentation to
    ensure that the project is well-defined and the project team is working
    towards a clear set of goals.
   Quality Control: The waterfall model places a high emphasis on quality
    control and testing at each phase of the project, to ensure that the final
    product meets the requirements and expectations of the stakeholders.
   Rigorous Planning: The waterfall model involves a careful planning
    process, where the project scope, timelines, and deliverables are
    carefully defined and monitored throughout the project lifecycle.
   the waterfall model is used in situations where there is a need for a
    highly structured and systematic approach to software development. It
    can be effective in ensuring that large, complex projects are completed
    on time and within budget, with a high level of quality and customer
    satisfaction.
   Importance of Waterfall Model
   Clarity and Simplicity: The linear form of the Waterfall Model offers
    a simple and unambiguous foundation for project development.
   Clearly Defined Phases: The Waterfall Model phases each have
    unique inputs and outputs, guaranteeing a planned development with
    obvious checkpoints.
   Documentation: A focus on thorough documentation helps with
    software comprehension, maintenance, and future growth.
   Stability in Requirements: Suitable for projects when the
    requirements are clear and stable, reducing modifications as the
    project progresses.
   Resource Optimization: It encourages effective task-focused work
    without continuously changing contexts by allocating resources
    according to project phases.
   Relevance for Small Projects: Economical for modest projects with
    simple specifications and minimal complexity.
Rapid Prototyping Model
        Prototyping is defined as the process of
         developing a working replication of a product
         or system that has to be engineered.
        It offers a small scale replica of the end
         product and is used for obtaining customer
         feedback as described below:
   The Prototyping Model is one of the most popularly used
    Software Development Life Cycle Models (SDLC models). This
    model is used when the customers do not know the exact project
    requirements beforehand.
    a prototype of the end product is first developed, tested, and refined
    as per customer feedback repeatedly till a final acceptable prototype
    is achieved which forms the basis for developing the final product.
   In this process model, the system is partially implemented before or
    during the analysis phase thereby allowing the customers to see the
    product early in the life cycle. The process starts by interviewing the
    customers and developing the incomplete high-level paper model.
   This document is used to build the initial prototype supporting only
    the basic functionality as desired by the customer. Once the
    customer figures out the problems, the prototype is further refined to
    eliminate them. The process continues until the user approves the
    prototype and finds the working model to be satisfactory.
Rapid Prototyping Model (contd.)
   Rapid application development is a software development
   methodology that uses minimal planning in favor of rapid
   prototyping. A prototype is a working model that is
   functionally equivalent to a component of the product.
   In the RAD model, the functional modules are developed in parallel as
    prototypes and are integrated to make the complete product for
    faster product delivery. Since there is no detailed preplanning, it
    makes it easier to incorporate the changes within the development
    process.
   RAD projects follow iterative and incremental model and have small
    teams comprising of developers, domain experts, customer
    representatives and other IT resources working progressively on their
    component or prototype.
Rapid Prototyping Model
(contd.)
     
     Rapid prototype characteristics:
       Used    in the requirements phase
       Evaluated   by the customer/user
       Then,
            it is discarded -do not turn into
       product
     Rapidprototyping model is not proven
     and has its own problems
       Possible   solution
         Rapid prototyping for defining
          requirements
         Waterfall   model for rest of life cycle
Incremental Model
   Incremental Model is a process of software development where
    requirements are broken down into multiple standalone modules
    of software development cycle.
   Each iteration passes through the requirements, design, coding
    and testing phases.
   Typical product takes from 5 to 25 builds (iterations).
Incremental Model (contd.)
Incremental Model (contd.)
   Waterfall and rapid prototyping models
       Deliver complete product at the end
   Incremental model
       Deliver portion of the product at each stage
   Advantages
       The software will be generated quickly during the software life cycle
       It is flexible and less expensive to change requirements and scope
       Throughout the development stages changes can be done
       This model is less costly compared to others
       A customer can respond to each building
       Errors are easy to be identified
   Partial System Delivery: The system is developed and
    delivered in small, manageable pieces. Each part adds new
    features to the previous version.
   Early Functionality: Basic functionality is available early in
    the project. This allows users to start using and testing the
    system quickly.
   Customer Feedback Loop: Feedback is collected after each
    part is delivered. This helps improve the next version of the
    system.
   Flexible to Changes: Changes or new features can be added
    between increments. This makes the model flexible to
    evolving needs.
   Combination of Linear and Iterative
    Approaches: Combines the structured approach of Waterfall
    with flexibility. Supports both planning and ongoing
    improvements.
   Requirement Analysis
   The first step in the Incremental Model is understanding
    what the software needs to do. The team gathers the
    requirements from the product experts and clearly
    defines the system’s functional needs. This phase is
    important because it sets the foundation for everything
    else in the development process.
   Design & Development
   Next, the team focuses on designing how the software
    will function and starts developing it. They work on
    adding new features and making sure the system works
    as expected. The design and development steps go
    hand-in-hand to build the functionality of the software.
   Testing
   Once a feature is developed, it goes through testing. The
    testing phase checks how the software performs,
    including both new and existing features. The team uses
    different testing methods to make sure everything is
    working correctly.
   Implementation
   This phase involves writing the final code based on the
    design and development steps. After testing the
    functionality, the team verify that everything is working
    as planned. By the end of this phase, the product is
    gradually improved and updated until it becomes the
    final working version.
Incremental Model (contd.)
   Disadvantages:
     It requires a good planning designing
     Problems might arise due to system architecture as
      not all requirements collected up front for the entire
      software lifecycle
     Each iteration phase is rigid and does not overlap
      each other
     Correcting a problem in one unit requires correction in
      all the units and consumes a lot of time
When to use Incremental
models?
   Requirements of the system are clearly understood
   When demand for an early release of a product arises
   When software engineering team are not very well skilled or
    trained
   When high-risk features and goals are involved
   Such methodology is more in use for web application and
    product based companies
Spiral Model
   The spiral model is a risk-driven software development process model.
   Based on the unique risk patterns of a given project, the spiral model guides
    a team to adopt elements of one or more process models, such as
    incremental, waterfall, or evolutionary prototyping.
   Risk Analysis: Identification of potential risk is done while risk mitigation
    strategy is planned and finalized
   Precede each phase by
       Alternatives
       Risk analysis
   Follow each phase by
       Evaluation
       Planning of next phase
Simplified Spiral Model
   Objectives Defined
   In first phase of the spiral model we clarify what the project
    aims to achieve, including functional and non-functional
    requirements.
   Requirements are gathered from the customers and the
    objectives are identified, elaborated, and analyzed at the
    start of every phase. Then alternative solutions possible for
    the phase are proposed in this quadrant.
   . Risk Analysis and Resolving
   In the risk analysis phase, the risks associated with the
    project are identified and evaluated.
   During the second quadrant, all the possible solutions are
    evaluated to select the best possible solution. Then the risks
    associated with that solution are identified and the risks are
    resolved using the best possible strategy. At the end of this
    quadrant, the Prototype is built for the best possible solution.
   Develop the next version of the Product
   During the third quadrant, the identified features are developed
    and verified through testing. At the end of the third quadrant, the
    next version of the software is available.
   In the evaluation phase, the software is evaluated to determine if
    it meets the customer's requirements and if it is of high quality.
   Review and plan for the next Phase
   In the fourth quadrant, the Customers evaluate the so-far
    developed version of the software. In the end, planning for the
    next phase is started.
   The next iteration of the spiral begins with a new planning phase,
    based on the results of the evaluation.
   The Spiral Model is often used for complex and large software
    development projects, as it allows for a more flexible and
    adaptable approach to Software development. It is also well-
    suited to projects with significant uncertainty or high levels of
    risk.
Full Spiral Model
When to use Spiral
Methodology?
   When project is large
   When releases are required to be frequent
   When creation of a prototype is applicable
   When risk and costs evaluation is important
   For medium to high-risk projects
   When requirements are unclear and complex
   When changes may require at any time
   When long term project commitment is not feasible
    due to changes in economic priorities