Recommended Book: Software Engineering by Roger Pressman, 5 Edition
Recommended Book: Software Engineering by Roger Pressman, 5 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 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
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.
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
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.