Software Engineering: Chapter 1

Software Engineering, Chapter 1, focuses on the nature of software, its application domains, an in-depth definition of software, and more. These topics also include sub-categories that we will explore gradually. 👌

The Nature of Software

Today, software plays a dual role: it acts as a product and, simultaneously, as a vehicle for delivering a product. Regardless of its specific form, software is a transformer that delivers the most significant product of our era: information.

Definition of Software

Software is defined as:

Instructions: Computer programs that, when executed, provide desired features and functions.

Data Structures: Structures that enable programs to process information effectively.

Descriptive Information (Documentation): Both print and virtual data that describe how to set up and use the programs.

Categories of Software

System Software: A collection of programs written to service other programs. These have complex yet deterministic information structures (where the order and timing of inputs, processing, and outputs are predictable).

Application Software: Software designed to address specific business needs, facilitating easier managerial or technical decision-making.

Engineering/Scientific Software: Primarily used for data processing and computational analysis.

Embedded Software: Resides within a product or system and is used to implement and control features and functions for the end-user and the system itself.

Product-Line Software: Designed to provide specific capabilities for use by many different customers.

Web/Mobile Applications: This broad category includes browser-based applications (like websites), cloud computing, service-oriented computing, and software running on mobile devices.

Artificial Intelligence (AI) Software: Uses heuristic methods to solve complex problems that cannot be easily measured by simple algorithms. It is applied in robotics, decision-making systems, pattern recognition (speech and image), machine learning, etc.

IEEE Definition of Software Engineering

Software Engineering is the application of a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software. In essence, it refers to a system that is disciplined, adaptable, and agile.

Software engineering is a layered technology that must rely on quality, which serves as the cornerstone of software engineering.

Process Layer: The foundation of software engineering. The process defines the framework that must be established for the effective delivery of software engineering technology.

Methods: Provide the technical techniques for building software, including communication, requirements analysis, design modeling, program construction, and more.

Software Process

A process is a collection of activities, actions, and tasks.

Activities: A set of efforts aimed at achieving a goal, which must be carried out regardless of the primary project objectives.

Action: A collection of tasks that produce a major work product.

Task: Focuses on a small but well-defined goal that creates a tangible result.

In the context of software engineering, the process is a precise guide for how to build computer software and an adaptable approach that allows the team performing the work to select the appropriate set of actions and tasks. The ultimate goal is always to deliver high-quality software on time, ensuring the satisfaction of sponsors and end-users.

The Process Framework

A general process framework consists of 5 activities:

Communication: The initial step prior to any technical action. The goal is to understand stakeholder objectives and gather requirements to define software features and functions.

Planning: A software project is a complex journey. The planning activity provides a “map” to guide the team. This map, known as a Software Project Plan, defines the strategy for software construction, technical tasks to be executed, probable risks, required resources, and work products to be generated.

Modeling: After planning, an initial, smaller model of the main program must be designed to grasp the “big picture”—what the software exactly looks like and how its components fit together.

Construction: What was designed in the planning and modeling activities must now be built. This activity begins with code generation and continues through testing phases.

Deployment: The software, either as a complete entity or an evolving one, is delivered to the customer for evaluation.

Note: These five stages can be applied to small, simple applications, web-based programs, as well as large, complex computer systems.

Umbrella Activities

Software process framework activities are complemented by a number of umbrella activities. Generally, umbrella activities are applied throughout the lifecycle of a software project and help the team control and manage progress, quality, change, and risk.

Common Umbrella Activity: Software Project Tracking and Control allows the software team to assess progress against project plans and take necessary actions to maintain the schedule.