Scope
of Software Engineering
Five
Aspects of Software Engineering:
1.
Historical Aspects:
| 1967 - Term software
engineering coined by a NATO study group |
| 1997 - 50th anniversary
of ACM (Association for Computing Machinery) |
| 1968 - NATO Software
Engineering Conference held in Garmisch, Germany |
| name reflected the belief
that software production should be an engineering like activity |
| Software engineering
should use the philosophies and paradigms of established engineering disciplines
to solve the software crisis. |
|
Components of Software
Engineering: |
| computer science and
math |
| management |
| psychology |
| economics |
| Differences between
developing software and other types of engineering products: |
| A major fault in a bridge
would cause collapse, and the bridge would need to be redesigned and rebuilt |
| If an operating system
crashes, it is usually considered minor, and the solution is simple - just
reboot it. |
| Expectations -- fault
tolerance: |
| bridge should be perfectly
engineered - all possible conditions are handled during the design. |
| software is expected
to be imperfect |
| Engineering uses continuous
math and calculus; An operating system is based on discrete math and goes
through various states |
| Maintenance: |
| maintenance of a bridge
is restricted to minor repair |
| It is not unusual for
50% of the source code of an operating system to be rewritten over a 5
year period. |
2.
Economic Aspects:
| Relationship between
software engineering and computer science: |
| Computer scientist investigates
a variety of ways to produce software, some good and some bad. |
|
Software engineer is
interested in only those techniques that make sound economic
sense. |
| some considerations
in introducing a new coding technique at an organization: |
| Since new technique
would result in faster coding time, it should be better, but: |
| cost of introducing
new technology into an organization |
| maintenance consequence |
| use of the technique
may result in code that is difficult to maintain, making the cost higher
over the life of the product. |
| Unfortunately, the aim
of both the client and the software provider is often to produce code as
quickly as possible. |
3.
Maintenance Aspects:
| Life Cycle - series
of steps that software undergoes, from concept exploration through final
retirement. |
| Phases of the software
life cycle: (general phases) |
| Requirements phase |
| concept exploration;
client's requirements are elicited |
| Specification (Analysis)
phase |
|
requirements analyzed
and put into the specification document; what
the product is supposed to do; results
in a SPMP - software project management plan |
| Design phase |
|
how it
is to be done |
| architectural design
(modules) |
| detailed design (design
of the modules) |
| Implementation phase |
| Coding and Testing |
| Integration phase |
| Components are combined
and tested as a whole until developers are satisfied with it. |
| Then, acceptance testing
is done by the client. |
| Phase ends when: |
| product is accepted |
| product goes into operations
mode |
| Maintenance phase |
| all changes to the product
once it meets the specification document. |
| Includes: |
| Corrective maintenance
(software repair) - no changes to specifications |
| removal of residual
faults |
| Enhancement (2 types)
- changes to specifications are made |
| Perfective maintenance
(such as additional functionality or decreased response time. |
| Adaptive maintenance
(such as in response to changes in government regulations) |
| Bad products are thrown
away; good products are repaired and enhanced. |
| Retirement |
| Product is removed from
service |
|
Maintenance accounts for about 67% of the
relative cost of the phases of the software life cycle. |
|
Coding only accounts for 5% |
|
The real world changes, so software must change
as a reflection of the real world. |
|
Example: a change in the sales tax rate. |
|
Maintenance in the form of enhancement is
a positive part of a company's activities. |
|
Because maintenance is so important, a major
aspect of software engineering consists of those techniques, tools, and
practices that lead to a reduction in maintenance costs. |
|
Reducing maintenance costs by 10% will reduce
overall costs by nearly 7%. |
4.
Specification and Design Aspects:
|
The earlier a fault is corrected, the better. |
|
The reason that the cost of correcting a fault
increases so steeply is related to what has to be done to correct a fault. |
|
Example shown in text: fault costing $40 to
detect and correct in design phase would cost about $2000 to detect
and correct in the maintenance phase. |
|
Solution to problem: |
|
employ techniques for detecting faults during
the requirements and specification stages. |
|
Between 60 and 70% of all faults are specification
and design faults. |
|
Reducing specification and design faults by
10% will reduce the overall number of faults by 6 to 7%. |
|
Software engineering strives to produce techniques
that yield better specifications and designs. |
5.
Team Programming Aspects:
|
Decrease in the performance-price factor has
made hardware more affordable, and companies need larger software products
than one person can develop and maintain within time constraints. |
|
decrease in the performance-price factor due
to discoveries in electronics, particularly the transistor and VLSI |
|
VLSI = very large scale integration |
|
performance-price factor = time to perform
one million additions X cost of CPU and main memory. |
|
Need for software development by teams |
|
Problems with team programming: |
|
interface problems among code components |
|
communications among team members |
|
teams must be organized, or time is wasted
in conferences between team members |
The
Object-Oriented Paradigm:
| .History of techniques
used: |
| Before 1975, no specific
programming technique was used. |
| 1975 to 1985: development
of structured paradigm: |
| Structured paradigm
includes the following techniques: |
| structured systems analysis |
| composite/structured
design |
| structured programming |
| structured testing |
| Reasons for lack of
success: |
| inability to cope with
increasing size of software products |
| maintenance phase |
| did not support reuse
as well as object-oriented |
| techniques are either
action oriented or data oriented but not both |
| DFA (Data Flow Analysis)
is action oriented |
| Jackson system development
is data oriented |
| Object-Oriented paradigm
considers both data and actions to be of equal importance. |
|
An object
is
a unified software component that incorporates both the data and the actions
that operate on that data. |
| Information Hiding:
Details as to how the data element is stored are not known form outside
the object. |
| The payoff of the implementation
details comes during maintenance; changes need only be made within the
object itself. |
| Object-oriented paradigm
makes development easier. |
| there is a close correspondence
between the objects in a product and their counterparts in the real world. |
| Well designed objects
are independent units. |
| conceptual independence
is sometimes called encapsulation. |
| The only allowable form
of communication is the sending of a message to the object to carry out
a specific action. |
| Comparison: |
| use of structured paradigm
produces a single unit |
| O.O. paradigm - product
consists of a number of smaller, largely independent units; reduces the
level of complexity. |
| O.O. Paradigm promotes
reuse. |
| reuse of objects
reduces
time and cost of development and maintenance |
| Phases of the software
life cycle using the Object Oriented Paradigm: |
| Requirements phase |
| Object-oriented analysis
phase |
| Object-oriented design
phase |
| Object-oriented programming
phase |
| Integration phase |
| Maintenance phase |
| Retirement |
| One of the steps of
the Object-oriented analysis phase is to determine the objects. |
| Architectural design,
because the objects are kinds of modules, is accomplished in this phase
rather than in the actual design phase. |
Terminology
used in the text Classical and Object-Oriented Software Engineering:
|
Software - consists
not just of code in machine readable form, but also all the documentation
that is an intrinsic component of every project. |
|
Product -
used to denote a nontrivial piece of software. |
| to obviate the program
vs
system
confusion |
|
Book deals with the
process
of software production and the end result of a process is termed a product. |
|
Software production
consists
of two phases: software development
followed by maintenance. |
|
The term system
is used in its modern sense, the combined hardware and software. |
|
Methodology
and paradigm
are both used to mean a collection of techniques for carrying out the complete
life cycle. |
|
One term that is avoided
as far as possible is bug. |
|
Error
is used instead, because referring to an error as a bug is a way of casting
off responsibility. |
| Grace Hopper (one of
the developers of COBOL) - first to use the term applied to software -
(a real bug had gotten into the system) |
| Because there are many
different terms used in object-oriented literature, the author chose to
use the terms: |
|
attribute
for a data component of an object |
|
method
with regard to the actions of an object |
|
sending a message denotes
when a method within an object is invoked. |
|