SE Decode 1&2

Introduction to Software Engineering

  • Definition: Software engineering is a discipline that applies theories, methods, and tools to develop professional software products.

Nature of Software

  • Categories of Software:

    • System Software: Programs like compilers and editors that communicate with hardware.

    • Application Software: Standalone programs developed for specific business needs.

    • Engineering/Scientific Software: Programs used in diverse fields (e.g., astronomy, automotive stress analysis).

    • Embedded Software: Programs residing within products or systems.

    • Web Applications: Software designed for web browsers.

    • Artificial Intelligence Software: Based on knowledge-based expert systems useful in robotics and recognition tasks.

Software Engineering Principles

  • Principles:

    1. Reason for Existence: Software systems must provide user value.

    2. Keep It Simple Stupid (KISS): Design should be simple and maintainable.

    3. Vision: Clear goals must be defined for the software.

    4. Product is Getting Consumed: Documentation must be maintained during development.

    5. Be Open to Future: Accommodate necessary changes easily.

    6. Plan for Reuse: Components should be designed for reusability using OOP techniques.

    7. Think: Reflect on activities before execution.

The Software Process

  • Definition: A structured set of activities required to develop a software system.

  • Fundamental Activities:

    1. Specification

    2. Design and Implementation

    3. Validation

    4. Evolution

Software Myths and Realities

  • Common Myths:

    • Myth: Standards guarantee successful software.

      • Reality: Standards must be complete, modern, and adaptable.

    • Myth: Adding people speeds up project completion.

      • Reality: It often causes delays due to onboarding.

    • Myth: Outsourcing eliminates all development concerns.

      • Reality: Outsourcing requires ongoing support.

    • Myth: Continuous requirement changes are easily accommodated.

      • Reality: Changes can introduce significant errors.

    • Myth: Development can start without detailed problem statements.

      • Reality: Comprehensive problem descriptions are critical.

    • Myth: Once running, the software project is complete.

      • Reality: Significant work follows product delivery.

    • Myth: Only working code is needed in the project.

      • Reality: Documentation and support are essential.

    • Myth: Documentation slows down development.

      • Reality: It aids in ease of use and future reference.

The Layered Approach in Software Engineering

  • Layers:

    • Quality Focus Layer: Ensures quality management.

    • Process Layer: Outlines the software engineering framework.

    • Methods Layer: Contains methodologies for analysis, design, coding, and testing.

    • Tools Layer: Utilizes software tools to automate processes.

Generic Process Model

  • Components of Process Framework:

    • Activities: Communication, planning, modeling, construction, deployment.

    • Umbrella Activities: Include tracking, risk management, quality assurance, technical reviews, and configuration management.

Software Process Models

  • Waterfall Model: A linear-sequential approach where requirements, design, coding, testing, and maintenance are conducted in sequence.

    • Advantages: Simple to implement, useful for small systems.

    • Disadvantages: Difficult to manage changes; clients see the product only after completion.

  • Incremental Model: Iterative with a core product first and subsequent refinement through increments.

  • Prototyping Model: Involves building prototypes for user feedback and iterative development.

  • Spiral Model: Combines iterative prototyping with systematic risk analysis.

Agile Software Development

  • Principles:

    • Early and continuous delivery of valuable software.

    • Adaptability to changes, even late in development.

    • Collaboration between business and development teams.

    • Maintaining development pace for sustainability.

    • Focus on technical excellence and quality.

Requirement Engineering

  • Processes:

    • Inception: Initiates project based on business needs.

    • Elicitation: Gathering requirements through discussions/interviews.

    • Elaboration: Refining and expanding requirements information.

    • Negotiation: Resolving conflicting demands.

    • Specification: Documenting requirements in various formats.

    • Validation: Ensuring requirements meet user expectations.

    • Management: Handling requirement changes and updates.

Software Requirements Specification (SRS)

  • Desirable Characteristics:

    1. Correct: All requirements are stated accurately.

    2. Complete: All necessary requirements are included.

    3. Unambiguous: Requirements are clearly defined.

    4. Consistent: No conflicting requirements.

    5. Verifiable: Requirements must be testable.

    6. Traceable: Origins of requirements are documented.

Use Case Development

  • Use Cases: Identify primary actors (users) and document interactions with the system to gather functional and non-functional requirements.