In the lecture conducted in the subject of software engineering. I learned that Software engineering is considered to be inherently complex, that is why the Software Engineers (SE) is being well paid than the other type of engineers. The discussion on the complexity pointed out with the following attributes.
The Complexity of the Problem Domain-Here the point was that the problem domain could not be understood easily since the product is intangible. There is no clear understanding among the client and the SE about the problem domain. For example if we say we are building a cat various people can see various aspects of the cat important to them. So if you do not communicate well there would be a difficulty in understanding the problem domain.
The difficulty of managing the development process-The difficulty of managing the development process due to the intangibility of the software project. The problem is that the development is not visible to the manager, he can only see the when the final out come or relies date comes in a project. SE’s think they can do it in a very shot time where they can’t. Then completion is delayed or done with the reduced functionality .This is because he doesn’t have the clear understanding of the domain.
Flexibility possible through software – Flexibility is possible because it does not take much cost to change the implementation factions only the developer’s time is needed. It is more difficult in other hard bound products.
Contradictory requirements - This can happen due to miss communications and the requirements art defied well enough. The SE might understand the requirements that the user gave in a different way because every body has his or her mine set where they think in there own terms.
Impedance mismatch between users and developers – User and developments can think differently and might not communicate the correct way to each other this is a problem in software development.
Non-functional requirements like usability, performance, cost, scalability and reliability – It is difficult to mat all the nonfunctional requirements of the users as the above when the performance, reliability is going to be highly implemented it costs more when cost is being reduced due to budget the above requirements cannot be made at a appreciated level. This is also a problem.
Requirements of a software system often change during its development- The requirements of a software system is more likely to change during the half way through the project may change of industry may be change of development pan.
Although the software is inertly complex the user need not see what is happening in side as a Se you need to show the user the simple and pleasant easy to understand nice user interface.
Then next discussion was on the attributes of a complex system First thing was the hierarchy.
Hierarchy-this creates the complexity of the system. A system consists of interrelated sub systems which can then be put in to even smaller systems and so on. This will go in until the component level is reached. This depends on the observers of the system the way they see the system. A medical prospective of the cat would have different attributes and factions that a mechanical attributes and factions may differ.
The linkage of the components intra-components is stronger than the inter-component linkage of the system. Components with in a subsystem are tightly linked than the components form another sub system.
The systems can be reused as they are built in components; they have to be easily extendable with the new components. Complex systems never starts form the scratch but built on top of a simple systems or API’s.
There are fundamental limiting factors of human cognition; we can address these constraints through the use of decomposition, abstraction, and hierarchy.
The OOAD the analysis is to analyze the requirements in terms of objects and classes, to identify the objects I the project and to create separate classes to them.
To design the system using the object class according to the user requirements in the logical and the physical cortexes.
There is something called a object model to do this. There are some major elements in this model which needed to be considered. Abstraction, Encapsulation, Modularity and Hierarchy are some of them.
Abstraction – Find out the special characteristics of an object that can be that can distinguish it form the other objects with the clear boundaries relative to the viewer. Recognition of the similarities of the objects is important to distinguish the objects. This should be a simple specification where the details are emphasized on the importance to the user. Entity abstraction (Considering the properties of objects), Action abstraction (Considering the functionality of the object), Virtual machine abstraction (Set of similar objects represented as one due to abstraction level) and coincidental abstraction (Non similar objects represented as one) are some abstraction types
Encapsulation – putting the properties and the factions together in a single module without having it to depend on the other such modules internal values; This serves the actual implementation of the abstraction. Also allows to hide the details of implementation.
Modularity- This is to group the factions in to a components which are loosely coupled and they should have the ability to work independently. Reduces the cost of software redesign and modules can be reused.
Hierarchy – Is the ordering of the abstractions in to a tree like structure. There are two types of Hierarchy’s is a and part of. As a example wheel is a part of the car and ford is a type of a car.
Buddhika M. Kalupahana(044019)