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.