What is Software Engineering?

What is Software Engineering?

Overview

The term "Software Engineering" was introduced at the NATO Software Engineering Conference held in 1968. It subsequently developed into a business model aimed at producing high-quality software efficiently, rapidly, and with minimal upkeep requirements. Today, software engineering stands as a fully established engineering field renowned for its comprehensive examination and scholarly exploration.

Software engineering is an engineering field dedicated to crafting software products through the application of clearly defined scientific principles, approaches, and protocols. The outcome of software engineering endeavors is a reliable and effective software product.

IEEE Definition of Software Engineering

  1. The act of employing a methodical, structured, and measurable approach to software development, operation, and maintenance, which essentially means the use of engineering principles in the context of software.

Fritz Bauer, a German computer scientist, offers the following definition of software engineering:

Software engineering involves the application of robust engineering principles to achieve economically dependable software that operates efficiently on tangible computing platforms.

Why Software Engineering?

In the initial stages, software development was fairly straightforward, resulting in a relatively uncomplicated process. However, with the progress of technology, software grew in complexity, making projects significantly more challenging. This evolution necessitated development teams to engage in meticulous planning and design, rigorous testing, the creation of user-friendly interfaces, and the seamless integration of all components into a cohesive system.

What constituted the Software Crisis?

  1. Numerous software development projects experienced failures in the late 1960s.

  2. Several software projects exceeded their budgets, leading to defective software that incurred high maintenance costs.

  3. Managing a substantial codebase posed significant challenges and expenses.

  4. Numerous software applications are needed to enhance their capabilities to meet evolving customer requirements.

  5. As hardware capabilities improved, the complexity of software projects also increased.

  6. The demand for new software outpaced the capacity to develop it.

Solution

The resolution to these challenges came through the transformation of chaotic coding endeavors into a formal software engineering discipline.

These engineering frameworks assisted organizations in optimizing their processes and delivering software that aligned with customer requirements.

During the late 1970s, software engineering principles gained widespread adoption.

The 1980s witnessed a significant milestone with the automation of the software engineering process and the emergence of Computer-Aided Software Engineering (CASE).

In the 1990s, there was an intensified focus on project management aspects, including the implementation of quality standards and methodologies such as ISO 9001.

The Development of Software Engineering

Software evolution involves applying software engineering principles from initial development to ongoing maintenance and upgrades, ensuring the software meets desired requirements.

The process starts with gathering requirements, creating a prototype for user feedback, and incorporating suggested changes. This iterative approach continues until the desired software is achieved.

Even after achieving the desired software, evolving technology and requirements demand ongoing updates. Rather than starting from scratch, updating existing software is a cost-effective solution.

Principles of Software Evolution

In software engineering, the laws of software evolution were introduced by Lehman and Belady in 1974.

These laws outline the balance between factors driving innovations and those limiting growth.

They have evolved and expanded over the decades.

Lehman categorized software into three types:

  1. S-program: Developed to precise specifications.

  2. P-program: Created for specific procedures, defining its capabilities.

  3. E-program: Designed to perform real-world tasks, adapting to changing environments and requirements.

These laws apply specifically to dynamic systems, and there are eight of them:

  1. Continual Updates: E-type systems must receive ongoing updates to remain effective.

  2. Growing Complexity: Without deliberate efforts to control it, the complexity of E-type systems increases as they evolve.

  3. Self-Regulation: Metrics related to E-type system development tend to follow a standard distribution, indicating self-regulation.

  4. Steady Organizational Activity: The average global activity rate remains consistent in evolving E-type systems.

  5. Knowledge Maintenance: To ensure successful evolution, all involved parties must maintain their understanding of the system. Excessive development can erode this knowledge.

  6. Continuous Expansion: E-type systems should regularly expand their functionality to keep users satisfied.

  7. Quality Maintenance: Without consistent adaptation to the operating environment, the perceived quality of an E-type system declines.

  8. Feedback Systems: E-type evolution processes are complex feedback systems, requiring a structured approach for significant progress.

Characteristics of Good Software

Operational Characteristics:

  1. Reliability: Software should not fail or contain errors during execution.

  2. Correctness: The software must meet all customer requirements.

  3. Integrity: It should not have unintended consequences. Efficiency: Efficient use of storage and time.

  4. Usability: The program should be user-friendly. Security: Protects data from external threats.

  5. Safety: Should not harm the environment or life.

Transitional Characteristics (When moving software to a different platform):

  1. Interoperability: Seamless information usage.

  2. Reusability: Easily adaptable for different purposes with minor code changes.

  3. Portability: Works across various settings and platforms.

Maintenance Characteristics:

  1. Maintainability: Easy for the development team to maintain.

  2. Flexibility: Adaptable to changes.

  3. Extensibility: Can add more functions without difficulty.

  4. Testability: Simple to test.

  5. Modularity: This can be divided into separate sections for independent modification and testing.

  6. Scalability: Easily upgradable.

Software Development Paradigm

It applies all engineering concepts to software development. It covers numerous research and demand gathering that aid in the development of the software product. It is made up of:

  1. Collecting requirements

  2. Software design

3. Programming

Software Design Paradigm

This paradigm is a part of Software Development and includes:

  1. Design

  2. Maintenance

  3. Programming

Programming Paradigm

This paradigm is intimately associated with the programming part of software development. This includes:

  1. Coding

  2. Testing

3. Integration

Conclusion

In essence, the software comprises programming code, methods, rules, documents, and data that achieve a specific task to fulfill a particular need.

Conversely, engineering revolves around crafting products using established scientific principles and methodologies.

Software engineering entails grasping customer and business requirements, followed by the design, development, implementation, and testing of software systems to satisfy those demands. This process emphasizes improving software products through the application of scientific standards, methods, and procedures.

The significance of software engineering has grown due to the increasing complexity of software products over time.