💻

Overview of Software Engineering Principles

Aug 8, 2024

Introduction to Software Engineering

  • Instructor: Dr. Bharati, Professor, Department of Computer Science and Engineering, Satyabhama Institute of Science and Technology
  • Session Focus: Introduction to the world of Software Engineering

Understanding Software Engineering

  • Definition of Engineering:
    • A field of science and technology involving construction of machines, structures, and tech in an optimized way.
  • What is Software?
    • A set of programs;
    • A program is typically 50-500 lines of code.
    • Software is a collection of programs, data structures, and documentation.
  • Difference Between Programmer and Software Engineer:
    • A software engineer applies systematic and organized techniques to software development.

Types of Software

  1. System Software:
    • Examples: Operating systems, compilers, interpreters.
  2. Real-Time Software:
    • Used for monitoring real-world activities (e.g., smartphone applications).
  3. Business Software:
    • Customized software for businesses (e.g., ERP, CRM).
  4. Engineering and Scientific Software:
    • For algorithm and number crunching.
  5. Embedded Software:
    • Found in smart technology.
  6. Artificial Intelligence Software:
    • Simulates human capabilities (e.g., AI applications).

Definition of Software Engineering

  • Definition: Software engineering is the application of a systematic, disciplined, and quantifiable approach to software development.
  • Process Overview:
    1. Requirements Gathering and Analysis
    2. Planning and Specifications
    3. Design
    4. Development
    5. Testing
    6. Maintenance

Phases of Software Engineering

1. Requirements Gathering and Analysis

  • Importance of understanding the problem is emphasized.
  • Methods:
    • Surveys, interviews, focus groups, observations, and use case analysis.
  • Challenges:
    • Customers may not clearly understand their own requirements.
    • Requirements gathering can take up 40% of the software life cycle.

2. Planning the Solution

  • Break down the problem into smaller sub-problems (modularization).
  • Important Keywords:
    • Cohesion: How tightly the elements are bound in a module.
    • Coupling: Degree of dependence between modules.

3. Designing the Software

  • Architectural Design: Overall structure decisions (e.g., distributed systems).
  • Detailed Design: Incorporates cohesion, coupling, and modularization principles.
  • Prototyping: Creating dummy forms to demonstrate functionality to the customer.

4. Development (Coding)

  • Follow industry coding standards and practices.
  • Importance of clear naming conventions.

5. Testing

  • Aim: To find and fix errors (bug fixing).
  • Types of Testing:
    • Unit Testing: Tests individual units of code.
    • Integration Testing: Tests combined units for correct interaction.
  • Testing Methods:
    • White Box Testing: Testing internal logic and structure.
    • Black Box Testing: Testing based on input/output without considering internal workings.

6. Maintenance

  • Involves deployment and support after customer acceptance testing.
  • Continuous support for as long as the software is in use.

Conclusion

  • Building software is complex and requires careful planning and execution.
  • Transition from programmer to software engineer involves understanding problems, planning solutions, and applying engineering principles.
  • Future sessions will cover each phase in detail.