Software Engineering I

 


What is it?

The field of software engineering (SE) can intuitively be described as the combination of techniques from both the engineering discipline and all aspects software production. This includes all of the development stages from system specification to maintenance and possibly retirement. Alternatively, it may be defined as the “establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.” The IEEE has developed a more comprehensive definition that states:

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).

Computer software can then be defined as the product that software engineers design and build. It includes the executable programs, documentation (both electronic and hard copy). In addition, it may also include data in the form of numbers and text, or even pictorial and multimedia formats.

Engineering is the analysis, design, construction, verification and management of technical (or social) entities.”


Why do it?


Why is it important?

“Computer Software has become a driving force. It is a tool that drives business decision making. It serves as the basis for modern scientific investigation and engineering problem solving. It is a key factor that differentiates modern products and services. It is embedded in systems of all kinds: transportation, medical, telecommunications, military, industrial process, entertainment, office products, …the list is almost endless. Software is virtually inescapable in a modern world. It is the driver for new advances in everything from elementary education to genetic engineering.”

In essence, software affects nearly every aspect of our lives either directly or indirectly. As long as software continues to be intricately linked to commerce and culture the need for software engineering will exists.


Why has it become a discipline?

In the early years of software development programs were relatively small as they were designed to perform a specific function that was often limited in scope and tied to a given platform. However over the last 50 years there has been a dramatic advancement in the technology sector leading to improvements in hardware performance and profound changes in computing architectures. These advances along with the vast increase in memory and storage capacities have all combined to produce complex computer-based systems that are capable of providing information in a wide variety of formats. The introduction of third-generation computer hardware initially led to what is termed the ‘‘software crisis’’. In essence, the dramatic increase in computer power made seemingly unrealistic computer applications a feasible proposition, marking the genesis of the era where software products that were magnitudes of order more complex than their [then] predecessors. This increased sophistication carried with it the inherent possibility of severe problems for a lone programmer. Inexperience with creating software on this scale often led to informal approaches being adopted which resulted in software that was over budget, delivered late, unreliable as well as difficult to operate and maintain.

 An increasing importance was placed the programmers ability to answer the questions:

 Why does it take so long to get software finished?

Why are the development costs so high?

Why can’t we find all the error before the software is released?

Why is there difficulty in measuring progress as the software is being developed?

 

 

As with any entity carrying possible financial benefits, whether the profit generating or loss limiting, software production needed to be optimised. Typically, a team of software specialist (each focusing on one part of the technology to be delivered to the client) is employed to tackle the complexity issue. However as the scope is often large and intricate a structured approach is required and a standard must also be maintained so that, for example, in the event of any staffing changes, continuity would not be severely affected. The control, organisation and stability offered by a structured approach are crucial for the successful development a good software product.

 


Useful definitions

 

Client

The individual or organisation for which the product is developed.

Developer

The individual or organisation responsible for the production of the required software.

User

The person(s) who use the software

Software development

Covers all aspects of software production before the product enters the maintenance phase.

 


Software Engineering Roles

Some of the roles within software engineering include:

  1. Client

  2. Marketing and sales

  3. Product manager

  4. Program manager

  5. Business analyst

  6. Quality assurance personnel

  7. Software engineer (or developer)

In this course we will focus on the role of the software engineer. However, for a practical example of the relationships between the above roles follow the example link below.

Software role example


Software Engineers’ Role

Software engineering is often described as a layered technology where the emphasis placed on quality. The foundation of SE includes a process, management, technical methods and tools.

 In essence, the process establishes:

  1. The framework for management control of the software project.
  2. The mechanism by which scheduling is maintained and quality is ensured
  3. The proper management of change
  4. The context in which technical methods a are applied
  5. The appropriate tools b for a project

 NB:

(a) Methods provide the technical information on stages required to successfully build the software product. This ranges from the embryonic stages of development (e.g. requirements analysis) to the maintenance stages. Depending on the given stage, models (e.g. state diagrams) and various other forms of documentation (e.g. reports) are required.

(b)   Tools provide automated or semi-automated support for the process and methods.

 The software engineer should have a global view of the production procedure. That is he should be aware of:

1.      The problem to be solved

2.      The complete objective of the final product

3.      The means by which the final product will be built and the tools required - strategy

4.      The design, testing and maintenance considerations


 

Below are just a few of the common myths that are associated with software at the different levels (/stages) of its development and the associated realities:

Myths

Reality

Management

If we get behind schedule, we can add more programmers and catch up.

Adding more programmers in an adhoc manner may actually retard productive development.

Customer

A general statement of the objectives is enough to begin writing the program. The details can be filled in later.

Poor up front definition is a major cause of failed software. A detail description of the software is required before the coding begins.

Practitioner

Once we write the program and get it to work, our job is done.

60-80% of all effort expended on software will be expended after it is delivered to the customer for the firs time.

Recognition of these myths and their associated realities promotes a healthy appreciation for the structured software development process

Observe that the scope of the software engineering field is diverse as it effectively combines engineering and software programming disciplines with project management. Thus a good software engineer should be competent in all three of these areas.

Copyright © Adrian Als & Charles Greenidge, 2003
This page was last modified: Thursday, September 09, 2004