Introduction to Software Engineering

The Importance of Software Engineering

The term “software engineering” was introduced in the late 1960s due to the software crisis. This crisis resulted from the introduction of the third generation of hardware. As hardware ceased to be an impediment to the development of information technology, reduced costs and the need for improved quality and efficiency of software production led to challenges characterized by the following problems:

  • Unclear project planning and cost estimation.
  • Poor software quality.
  • Difficulty maintaining programs with unstructured designs.

The demand for effective and affordable software, both in development and acquisition, necessitates characteristics such as reliability, ease of maintenance and use, and efficiency.

1 Software Engineering Concept

What is Software Engineering?

Software Engineering is a field within Computer Science that offers methods and techniques to develop and maintain quality software solutions for diverse problems. Today, it is considered a new branch of Engineering, with Software Engineers gaining recognition as established professionals in the international workplace, enjoying social prestige in the business world and promising futures.

Software Engineering intersects with areas of Information and Computer Science, such as:

  • Construction of compilers and operating systems.
  • Development of Intranets and the Internet.
  • Addressing phases of the information system development life cycle.

It finds applications in various fields like business, scientific research, medicine, manufacturing, logistics, banking, traffic control, meteorology, law, and the Internet, Intranets, and Extranets.

2 Method, Technique, and Tools

Method

A method is a series of successive steps leading to a goal. Professionals aim to make informed decisions based on a theory that allows for generalization and consistent problem-solving. Choosing the most appropriate method for a specific problem is crucial, ensuring the path taken leads to the desired outcome.

Technique

A technique is the know-how or procedure used to achieve a result. It requires manual and intellectual dexterity and often involves tools. Techniques are passed down through generations, originating in imagination and then put into practice empirically. In contrast, technology arises from a scientific and reflective approach, often building upon existing techniques.

Tool

A tool is a sub-module responsible for specific, interconnected functions that contribute to completing a task. Applications can utilize multiple tools. For example, a spell checker is a tool within a document writing application but not an application itself.

CASE Tools

CASE (Computer Aided Software Engineering) tools are computer applications designed to boost productivity in software development by reducing time and cost. These tools assist in various software development life cycle tasks, such as:

  • Project design and costing.
  • Automated code implementation based on design.
  • Automatic compilation, documentation, and error detection.

Objectives of CASE Tools

  1. Improve productivity in software development and maintenance.
  2. Enhance software quality.
  3. Reduce time and cost associated with developing and maintaining computer systems.
  4. Improve project planning.
  5. Increase enterprise computer knowledge, aiding in finding solutions for requirements.
  6. Automate software development, documentation, code generation, testing, and project management, minimizing errors.
  7. Promote software reuse, portability, and documentation standardization.
  8. Enable global management of software development phases with a single tool.
  9. Facilitate the use of software engineering methodologies.

Classification of CASE Tools

CASE tools can be classified based on several parameters:

  1. Supported platforms.
  2. Covered phases of the systems development life cycle.
  3. Architecture of the applications they produce.
  4. Functionality.

Classification Based on Development Cycle Phases

  • Upper CASE (U-CASE): Tools that assist in planning, requirements analysis, and development strategy, often utilizing UML diagrams.
  • Middle CASE (M-CASE): Tools that automate tasks in analysis and application design.
  • Lower CASE (L-CASE): Tools that support semi-automatic code generation, error detection, debugging, and testing. They also automate application documentation and may include tools for rapid application development.

History of Software Engineering

Software Engineering, a term first coined by Fritz Bauer at a NATO Science Committee-sponsored software development conference in Garmisch, Germany, in October 1968, can be defined according to Alan Davis as:

“The intelligent application of proven principles, techniques, languages, and tools for the creation and maintenance, within a reasonable cost, of software that meets user needs.”

The term emerged in the late 1960s to address the growing concerns surrounding software development at the time.

1 The Software Crisis

The environment for developing software systems faced challenges such as:

  • Significant planning delays.
  • Poor productivity.
  • High maintenance costs.
  • Demands outpacing offerings.
  • Low quality and reliability.
  • Lack of unity among developers.

This situation was termed the “software crisis.”

Defining Crisis

A crisis is defined as “a turning point in the course of something, a decisive or crucial event.” However, for software, there hasn’t been a single turning point but rather a gradual evolution. The crisis in the software industry has persisted for many years, seemingly contradicting the term’s implication of a sudden event. It represents a chronic problem in software development, stemming from a lack of:

  • Formalism and methodology.
  • Support tools.

2 Goals of Software Engineering

Effective Management

The primary goals of software engineering are:

  • Improving the quality of manufacturing processes and software products.
  • Increasing productivity and job satisfaction among software engineers.

3 Software Myths

Developer Myths

  • A running program signifies the end of work.
  • Quality equates to a program running without errors.
  • Delivery service solely involves a running program.

Management Myths

  • Standards guarantee success.
  • Tools solve all problems.
  • Poor planning can be remedied by adding programmers.

Client Myths

  • Requirements can be stated as general objectives.
  • Software should be infinitely flexible to changes.

Focus of Computer Engineering

Computer engineering applies principles from computer science, electronics, and software engineering to develop integrated computing and communication systems capable of automatic information processing. It relies on electronic technology, enabling computers to interact with:

  • Physical systems, developing communication and control interfaces between computers and various mechanical and electrical devices (e.g., data acquisition systems, virtual instrumentation, robot control, lighting systems).

Trends in Software Engineering

A major concern in the software industry is creating reliable, high-quality systems with reduced time and cost investments to address increasingly complex problems. Advanced software engineering practices are essential to alleviate strain in different development stages.

Object-oriented technology has proven effective in tackling complex problems, offering benefits like interoperability, modularity, adaptability, and high reusability. Reuse leads to faster development and improved program quality.

Combining object-oriented techniques with other tools like CASE, visual programming, code generators, repository-based methodologies, databases, class libraries (for maximizing reuse), client-server technology, etc., can provide the necessary advancements to overcome current challenges.

This chapter explores the factors determining software quality and introduces fundamental principles and concepts for producing high-quality, reliable software. Software engineering, as a discipline, offers methods and techniques for developing and maintaining quality software. It encompasses various aspects of informatics and computer science, including compiler construction, operating system development, Intranet/Internet development, information system development life cycle phases, and applications in diverse fields (business, research, medicine, manufacturing, logistics, banking, traffic control, meteorology, law, Internet, Intranets, etc.).