Software Engineering.... A Reminder......

Thursday, May 29, 2008

Who is a software Engineer…
A software engineer is one employed to solve problems by the application of information technology. He can measure software. He can provide BigOh measurements of algorithms. He can run a performance monitor to measure the relative CPU usage of my procedures. He can run "top" or open the TaskMonitor? to view memory usage. He can run a test client to measure maximum throughput or determine the maximum number of simultaneous clients a server can handle. As an engineer He can try to improve these measurements by modifying my software design. He can then measure the new design to determine if my changes actually did what he intended.

Why software Engineering is so important?

  • But it is just not a simple as it described. Because when we think about the design of the software, we may unable to identify an exactly right or wrong design. So software engineering is not such a simple field of engineering.
  • The complexity of Software Engineering
    • As a software engineer we may have to give solutions to highly complex problems. This complexity starts from the problem domain and extends up to change management. A one of the most difficult task which faces by a software professional is identify the problem domain. Because it is a highly complicated matter to understand the problem domain correctly. Because requirements are changing over the time.
    • Mean while the requirements are get contradict. The requirements are changing over the time. The way of defining requirement at the beginning would be get changes during the life cycle of the development process. As a simple example, if it is a accounting package, and if a new tax type has been introduced by the government at that time, the requirements are getting changes completely.
    • And Managing of development process is also complex. Because software products are intangible. So it is very difficult to measure the development of the product. Most of the software professionals think that they are on the correct time line and correct track. But at the end they found that they have been very late and the product cannot be delivered by the time. Since software development process is a completely a team work, sometimes many problems arises. Wicked problem is also a challenge in software engineering. Some major crises arise during the middle of the process. Sometimes new problems may come, after implementing the first phase. So at the beginning we cannot predict the end correctly.
    • Impedance Mismatch between users and developers is another issue. There would be have a big difference between how a requirement is defined by the user and how it is get understand by the developer. Mainly the ambiguity of our natural languages causes to this issue.
    • The complexity of the software engineering process is very high in terms of Usability, Performance, Cost, Scalability of the product, reliability of the product etc. When a product get very high in terms of performance it will increase the cost also. So balancing all the above requirements are very difficult.
    • Software products are changing over time. So it is needed to manage those changes correctly. Otherwise the source code will get into a confused state.
  • Another major task what a software engineer should engage is he has to work for hiding the complexity. Since software systems are highly coplex systems, software engineer should take the responsibility to hide the responsibility. Otherwise the system will not get usable.

Complicated systems.

There are many complicated systems around us. One clear characteristic which all the complicated systems process is it build a hierarchy.

As examples if we think a language as a complicated system, we can identify an hierarchy as follows. There are letters at the root and letters formulate words. Word phases and sentences generates from words. Then paragraphs will found. By that way we can find books, magazines and publications etc. at another level.

The best way to understand a complex system is identify the hierarchy, which stand besides.

In these hierarchies we can identify the communication dependencies. Especially intra-component communication as well as inter component communication is worth to identify.

There are two ways of defining a hierarchy.

Is a hierarchy________

As an example "car IS A vehicle." So the car is implemented using attributes of vehicle.

Part of a hierarchy________

As an example "Tier is a part of a car". The tier and car can be implementing independently.

OOP Recap…..

Object Oriented Analysis.

  • Object-oriented analysis is a method of analysis that examines requirements from the perspective of the classes and objects found in the vocabulary of the problem domain

Object-oriented design

  • Object-oriented design is a method of design encompassing the process of object-oriented decomposition and a notation for depicting both logical and physical as well as static and dynamic models of the system under design


  • We reduce the information and create a generalized model by only keeping the information relevant to particular purpose. As examples animal, furniture, food, book, vehicle can be identify as abstractions. The levels of abstraction vary depending on the purpose. During the design phase, finding of the correct level of abstraction is an important matter that should be considered.

Wajira Somarathne (044038)