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?
This is an opportunity to gain exposure to the dynamic field of software engineering. The knowledge and skills gained will be a definite asset to anyone continuing in the field of software development, whether in commercial or research environments. More specifically, students completing this course will gain a good appreciation of the software engineers’ role and the structured mechanisms involved in the software development process. Consequently, this introduction can only be an asset especially as it relates to employment within the field.
To widen your personal computer science scope and leave the possibility of future postgraduate studies in the field open.
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.
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.
Some of the roles within software engineering include:
Client
Marketing and sales
Product manager
Program manager
Business analyst
Quality assurance personnel
Software engineer (or developer)
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:
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 |