You are on page 1of 23

Lecture 01

Recommended Book : Software Engineering by Roger Pressman, 5th Edition

We must understand that life is difficult, if we know and accept it, it is no longer difficult.
Do men think that they will be left alone on saying We believe and that they will not be tested? We did test those before them and Allah will certainly know those who are true from those who are false Al-Quran (29:2-3).

Software, is a collection of computer programs and


related data that provides the instructions for telling a computer what to do and how to do it. Software engineering is the establishment and use of sound

engineering principles in order to obtain economically


software that is reliable and work efficiently on real machine.

Software products may be developed for a particular customer or may be developed for a general market.

Software products may be Generic - developed to be sold to a range of different customers e.g. PC software such as Excel or Word. Bespoke (custom) - developed for a single customer according to their specification.

Hardware

Software

Manufactured Wear out Built using components Relatively simple

Developed/ engineered Deteriorate Custom built Complex

Once a hardware product has been manufactured, it is difficult or impossible to modify. In contrast, software products are routinely modified and upgraded. In hardware, hiring more people allows you to accomplish more work, but the same does not necessarily hold true in software engineering.
Unlike hardware, software costs are concentrated in design rather than production.

Engineering methods put a lot of emphasis on planning before you build


Design, Plan and then Construct Construction is much bigger in both cost and time than design and planning - 80-90%

Q: What is the proportion in Software Engineering?

The Answer to the question is:


10-30%

Software construction is so cheap as to be free


Almost all effort is of design

Design requires creative and talented people

When a hardware component wears out, it is replaced by a spare part.


There are no software spare parts. Every software failure indicates an error in design or in the process through which design was translated into machine executable code. Therefore, software maintenance involves considerably more complexity.

Software engineers deal with unique set of problems Young field with tremendous expectations Building of vastly complex, but intangible systems Software is not useful on its own e.g., unlike a car It must conform to changes in other engineering areas Some problems can be eliminated These are called accidental difficulties Other problems can be lessened, but not eliminated These are called essential difficulties

Accidental complexity is complexity that arises in computer programs or their development process
Accidental complexity is caused by the approach chosen to solve the problem Sometimes accidental complexity can be due to mistakes such as ineffective planning, or low priority placed on a project

Essential complexity refers to a situation where all reasonable solutions to a problem must be complicated
Only partial solutions exist for them, if any Complexity Conformity

Changeability
Intangibility

No two software parts are alike If they are, they are abstracted away into one Complexity grows non-linearly with size (scaling-up) E.g., it is impossible to enumerate all states of program Except perhaps toy programs From complexity comes the difficulty of Communication Enumerating Less understanding of all the possible states of the program

Natural Science God VS Software People Much of the complexity that he (developer) must master is based on individual judgments. These (standards) differ from interface to interface, and from time to time, not because of necessity but only because they were designed by different people, rather than by God.

The

software entity is constantly subject to pressures for change. Of course, so are buildings, cars, and computers. But manufactured things are infrequently changed. Software of a system embodies its function, and the function is the part that most feels the pressure of change.
In part it is because software can be changed more easily it is pure thought stuff.

Building do in fact get change but the high cost of change understood by all serve to dampen the whims of the changes. The software product is embodied in a cultural matrix of applications, users, laws, and machine vehicles. These change continually, and their changes inevitably force change upon the software product.

Software is invisible and un-visualizable. A geometric reality is captured in a geometric abstraction The reality of software is not inherently embedded in space

As soon as we attempt to diagram software structure, we find it to


constitute not one, but several, general directed graphs

superimposed one upon another. This lack not only obstruct the process of design within one mind, it severely hinders communication among minds.

To gain an understanding of software engineering it is important to examine the characteristics of software that make it different from other things that human beings build. 1- Software is engineered not manufactured.
2- Software does not wear out, but it does deteriorate.

3- Although the industry is moving toward component-based assembly, most software continues to be custom built.

Software may be applied in any situation for which a pre specified set of procedural steps (i.e., an algorithm) has been defined. The following software areas indicate the breadth of potential applications:
System software Real-time software Business software Engineering and scientific software Embedded software Personal computer software Web-based software Artificial intelligence software

Software Engineering is an engineering discipline Concerns with the development of software by applying Engineering Principles Goal is the cost-effective development of software systems
Software Engineering [IEEE-93]*: The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.