Software Engineering Notes

What is Software Engineering?

  • Software is more than just program code; it includes executable code, associated libraries, and documentation.

  • A software product is created for a specific requirement.

  • Engineering involves developing products using well-defined, scientific principles and methods.

  • Software engineering is an engineering branch focused on developing software products using scientific principles, methods, and procedures.

  • The goal of software engineering is to produce efficient and reliable software products.

Definitions

  • IEEE Definition:

    • The application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software.

    • The study of approaches as described above.

  • Fritz Bauer Definition:

    • Software engineering is the establishment and use of sound engineering principles to obtain economical software that is reliable and works efficiently on real machines.

Software Evolution

  • Software evolution is the process of developing a software product using software engineering principles and methods.

  • It includes initial development, maintenance, and updates until the desired software product is achieved.

  • The evolution process begins with requirement gathering.

  • Developers create a prototype and gather user feedback early in the development process.

  • Updates and maintenance are performed based on user feedback and changing requirements.

  • Updating existing software is more feasible and economical than recreating it from scratch.

  • Advancing technology and changing requirements continuously drive software evolution.

Software Evolution Laws

  • Lehman's laws categorize software into three types:

    • S-type (static-type):

      • Software that works strictly according to defined specifications and solutions.

      • The solution and method are immediately understood before coding.

      • Least subjected to change.

      • Example: Calculator program for mathematical computation.

    • P-type (practical-type):

      • Software with a collection of procedures.

      • Specifications can be described, but the solution is not immediately obvious.

      • Example: Gaming software.

    • E-type (embedded-type):

      • Software that closely interacts with the real-world environment.

      • High degree of evolution due to changes in laws, taxes, etc.

      • Example: Online trading software.

E-Type Software Evolution Laws (Lehman)

  • Continuing Change: An E-type software system must continuously adapt to real-world changes or become less useful.

  • Increasing Complexity: As an E-type system evolves, its complexity increases unless efforts are made to maintain or reduce it.

  • Conservation of Familiarity: Familiarity with the software's development and rationale must be retained to implement changes effectively.

  • Continuing Growth: The size of implementing changes in an E-type system grows with the lifestyle changes of the business it serves.

  • Reducing Quality: An E-type system's quality declines unless rigorously maintained and adapted to a changing operational environment.

  • Feedback Systems: E-type systems are multi-loop, multi-level feedback systems and must be treated as such for successful modification or improvement.

  • Self-Regulation: E-type system evolution processes are self-regulating, with product and process measures distributed close to normal.

  • Organizational Stability: The average effective global activity rate in an evolving E-type system remains invariant over the product's lifetime.

Software Paradigms

  • Software paradigms are the methods and steps taken during software design.

  • Paradigms can be categorized, with each category containing others:

    • Programming paradigm is a subset of the Software design paradigm.

    • Software design paradigm is a subset of the Software development paradigm.

Software Development Paradigm

  • Applies all engineering concepts to software development.

  • Includes research and requirement gathering.

  • Consists of:

    • Requirement gathering

    • Software design

    • Programming

Software Design Paradigm

  • Part of the Software Development paradigm.

  • Includes:

    • Design

    • Maintenance

    • Programming

Programming Paradigm

  • Closely related to the programming aspect of software development.

  • Includes:

    • Coding

    • Testing

    • Integration

Need for Software Engineering

  • The need for software engineering arises from the high rate of change in user requirements and the working environment.

  • Large Software: Engineering provides a scientific process to manage the complexity of large software.

  • Scalability: Without scientific engineering concepts, re-creating software would be easier than scaling existing software.

  • Cost: Proper software engineering processes can help control the high costs of software development.

  • Dynamic Nature: Software must adapt to the changing environment and user needs, which software engineering facilitates.

  • Quality Management: Better software development processes lead to better quality software products.

Characteristics of Good Software

  • A software product is judged by its offerings and usability.

  • It must satisfy the following aspects:

    • Operational

    • Transitional

    • Maintenance

Operational Characteristics

  • How well the software works in operation.

  • Measured by:

    • Budget

    • Usability

    • Efficiency

    • Correctness

    • Functionality

    • Dependability

    • Security

    • Safety

Transitional Characteristics

  • Important when moving software from one platform to another.

  • Includes:

    • Portability

    • Interoperability

    • Reusability

    • Adaptability

Maintenance Characteristics

  • How well the software maintains itself in a changing environment.

  • Includes:

    • Modularity

    • Maintainability

    • Flexibility

    • Scalability

Conclusion

  • Software engineering is a branch of computer science that uses well-defined engineering concepts to produce efficient, durable, scalable, in-budget, and on-time software products.