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:
Reason for Existence: Software systems must provide user value.
Keep It Simple Stupid (KISS): Design should be simple and maintainable.
Vision: Clear goals must be defined for the software.
Product is Getting Consumed: Documentation must be maintained during development.
Be Open to Future: Accommodate necessary changes easily.
Plan for Reuse: Components should be designed for reusability using OOP techniques.
Think: Reflect on activities before execution.
The Software Process
Definition: A structured set of activities required to develop a software system.
Fundamental Activities:
Specification
Design and Implementation
Validation
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:
Correct: All requirements are stated accurately.
Complete: All necessary requirements are included.
Unambiguous: Requirements are clearly defined.
Consistent: No conflicting requirements.
Verifiable: Requirements must be testable.
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.