Starting from:

$30

Module 1: Introduction to Software Engineering

# Module 1: Introduction to Software Engineering

## Objectives

After completing this module, you should be able to:

describe historical events in software engineering
describe the current state of the software industry
identify social and ethical responsibilities of software development
define a system and system engineering
construct an architectural context diagram
identify the scope and boundaries of software engineering
define the relationship between the software development process and the product
cite the characteristics of software process models
identify the role of UML in system and software engineering
identify the role of technical documentation in software development
write sections of system specifications as outlined in the IEEE guidelines

---

## 1. Emergence of Software Engineering

- In the past the processes used for designing and developing software were very informal, which contributed to the rise in development and maintenance costs. 
- The results of ad hoc development processes contributed to a higher percentage of unreliable and lesser quality products entering the marketplace. 
- Many accidents resulted from failures in computer-based systems with hardware devices that were controlled with software. 
- At the time, the industry was considered to be in a crisis state, which then led to the emergence of new practices and methods in software engineering.

- The emergence of new communication protocols, hardware devices, and graphical user interface components have placed a greater demand on software engineers to design quality, reliable, and safe software.


Brief History of Software Engineering

- In the 1950s and the early 1960s, the various engineering disciplines were beginning to analyze how aspects of the engineering field could be applied to methods used in developing software products. As computing power evolved over the decades, the demand increased along with the complexity of the problems that needed to be addressed in the design of software
- The term software engineering was introduced in 1968 at the first international software engineering conference, held by the North Atlantic Treaty Organization (NATO) Science Committee (Mahoney 2004)
- Software was developed to control critical hardware devices in the mid- to late-1960s and early 1970s
- Defects in software were uncovered, which heightened public awareness to the need for better quality and reliability of software. 
- The escalating cost of building quality and reliable software was on the rise in the computer industry and the demand for skilled programmers could not be met. 
- The state of software development was viewed by practitioners as being in a "crisis" state and was commonly referred to as the software crisis.
- In response to the software crisis, researchers and practitioners have been trying to develop a set of methodologies, processes, and tools as the "silver bullet" for building software. 
- The combination of these methodologies, processes, and tools is what comprises the field of software engineering, which continues to emerge today
- The software in question is custom software written to solve large, unique data-processing problems.


Software Engineering Defined

- Software is much more than just the code of a computer program. Software is accompanied by a set of documentation that is necessary to describe the details of the requirements, design, and any external aspects of the software that are necessary for it to execute successfully.
- These documents include any configuration files and any aspects of the external environment that surround the building and use of the software. 
- We can refer to these items as a collective whole, the software system or the software configuration.
- Software has unique characteristics that differ from hardware, which is manufactured and tangible. Software is abstract and intangible and is not manufactured or governed by physical laws.
- There are four characteristics that best describe software: 
  - its maintainability, 
  - dependability, 
  - efficiency, 
  - and usability
- The uniqueness of programming solutions makes these characteristics difficult to measure.
- In order to build software, we use processes to address a unique problem to be solved or a particular need to be satisfied. Software engineering focuses on improving these processes to build a better quality and more reliable product. 
- In early times these processes were often ad hoc and chaotic and resulted in poor quality and unreliable software that was expensive to maintain after deployment.
- The ultimate goal of good software engineering methodologies is to reduce these maintenance costs by building a better product earlier in the development phases of the life cycle.

IEEE definition of Software Engineering:

1. The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is the application of engineering to software.
2. The study of approaches as in 1.

- In order to build quality software, companies need to be committed to developing sound processes, which requires the establishment of a set of methods and tools.
- When we develop these processes we also need to consider support for the business needs of the organization or company.
- If you search the Internet you can find a variety of automated tools that have been developed to provide support for software processes and methods. These tools are referred to as computer-aided software engineering (CASE) tools.


Social and Ethical Responsibility

- Software engineering is a respected profession and engineers are expected to use good judgment when developing software products.
- Applications to solve a wide range of problems are created and used in society, and society expects the software to be correct and of high quality. 
- Companies entrust engineers with their assets and private data. It is the responsibility of the software engineer to maintain professionalism in the areas of confidentiality, competence, intellectual property rights, and computer misuse (Sommerville, 2004). 
- Professional software engineers are encouraged to join organizations in which ethical standards are established. The Association for Computing Machinery (ACM) and IEEE are known for establishing rules of professional conduct and ethics.

---

## 2. Introduction to Systems Engineering

- In this section we will define system engineering and list some of its distinct characteristics.
- To help you understand the development of the software component within the system framework, we will introduce the basic system life cycle model. 
- Because software requirements are derived from system requirements, we will introduce the System Specifications document.


Definition of System Engineering

- The basic definition of system engineering (Blanchard, 1998, p. 12) is: 
  - "the effective application of scientific and engineering efforts to transform an operational need into a defined system configuration through a top-down iterative process of requirements analysis, functional analysis and allocation, synthesis, design optimization, test and evaluation, and validation."
- The Department of Defense (1996) defines system engineering as the … process that shall:
  - Transform operational needs and requirements into an integrated system design solution through concurrent considerations of all life-cycle needs (i.e., development, manufacturing, test, and evaluation, verification, deployment, operations, support, training, and disposal).
  - Ensure the compatibility, interoperability, and integration of all functional and physical interfaces and ensure that system definitions and design reflect the requirements for all systems elements (i.e., hardware, software, facilities, people, data).
  - Characterize and manage technical risks.
- System engineering has distinct characteristics (Stevens, n.d.) that make its life cycle unique from software engineering
  - handles communication among disparate disciplines, each with its own technical language
  - is primarily a project management activity
  - deals with multiple semi-independent subsystems
  - deals with engineering requirements, constraints for hardware
  - is difficult to change
  - has mechanics and architecture that make progress easier to measure
  - is unlikely to require taking as many risks
  - has a concrete working environment dependent on hardware
  - has components that are manufactured or replicated and that can be damaged
  - has upgrades requiring physical contact to implement because systems contain tangible components
  - has development costs that are easier to determine
  - has the primary maintenance goal of returning to its original state by repairing units
- If we think of system engineering from the perspective of hardware, these characteristics can be easily understood. After all, hardware is tangible, and it can be manufactured.


System Boundaries and Environment

- The term system is used loosely in society to define systems that emerge from organizations and institutions, systems that consist of hardware components, and systems that consist of hardware and software components.
- Hardware systems involve mechanical parts that work together to perform a specific task; power tools are good examples. Systems that contain both hardware and software components are best described as integrated subsystems that work together to accomplish an objective.
- Sommerville (2004, p. 21) defines a system as "a purposeful collection of interrelated components that work together to achieve some objective."
- The focus of our systems engineering discussion will be on systems that contain hardware and software components, or subsystems, which are interrelated. An example is a self-service checkout system that is used in stores by customers to purchase items.


---

## 3. Software Process and Product



## 4. Software Process Models



## 5. Agile Approach to Software Development



## 6. Unified Modeling Language