Monday was our first software engineering lecture. During that lecture I got chance to learn new concepts and also to refresh my earlier knowledge.
:-) Software Industry….
Software industry is young industry when comparing to other industries. But this industry has high demand. There are many reasons for that; domain identification is very difficult, progress of the development is invisible, team work ,requirements gathering is very difficult, Basically Software is abstract and intangible.
:-) What makes good software….
Depending on the application user expects different capability from the application. Such as banking systems must secure, a telephone switching system must be reliance etc. These all attributes can be generalized into following attributes. And those are the key Essential attributes of good software such as Maintainability,Dependability,Efficiency,Usability.
:-) New word……This is new word I head in the lecture and it’s quite interesting .Wicked problem-come up with an initial solution and implements it and see. Like wise you are going forward. Following link gives more details about this Wicked problem
:-) Software and complexity…..
Software is a more complex and also it is an essential property of all large software system. People can develop software but the challenge is developing a industrial-strength software. If we didn’t develop such systems the developed systems are nor more usable. So handling complexity is major task in software industry and there fore we should find a way to tackle this complexity.
We observe that this inherent complexity derives from four elements:
- The complexity of the problem domain,
- The difficulty of managing the developmental process,
- The flexibility possible through software,
- The problems of characterizing the behavior of discrete systems.
The complexity of the problem domain
There are lots of root causes to become the problem domain complex. There can be contradictory requirement. This means two or more requirements are complicit each other. Suppose if client ask the product within two week and also he asks for bug free product; this instance shows the contradiction of requirements.Impedance mismatch is another reason for getting the problem complex. User and developer see the product in different views. In software industry user not able to describe what he wants and same time developer don’t know what user wants. So in this situation requirement gathering is very difficult. Following picture shows famous example of impedance mismatch
And the other thing is requirements are changing during the development process. Normally the large software is evolving with the time. Different users have different requirements so we can’t give generic product.
The difficulty of managing the developmental process,
The user don’t care about how much complex inside the product. So developer responsibility is to give simple solution for the complex problem by hiding the complexity from the user. So developer has to concern about maintainability, flexibility. To achieve this developer have to use different techniques. Also lots of software developments are carried out using team. So managing teams with the development process is also very difficult task .This may get complex when the development work is geographically detached.
The flexibility possible through software
With the software it can be change, add the new things. So flexibility is the thing which we should done the things without introducing new issues or bugs.
The problems of characterizing the behavior of discrete systems.
In general events we may able to describe using the theories. Within the large software application there are lots of variables, thread .So current state of the application is determined by values of these variables. Computers are digital devices with discrete states. So it is very of characterizing the behavior of discrete systems.
Most of the time software industry fails to master the complexity there for software crisis arises. Which means software may not be able to deliver on time and within budget.
There are some complex systems in our environment such as plant, animal, language, human etc.
:-) Attributes of complex system
Normally complex systems are hierarchical and it consists of sub system .Those sub systems are interrelated.The inter-component linkages within a sub system are much stronger than the intra-component linkages. Basically And the complex systems are evolve with the time.
:-) Finished Complexity and discussed about some fundamentals…….
— Object-oriented analysis - Read and identify the objects and classes.
— Object-oriented design - Add more classes, introduce other things not directly related to design and problem domain.
The following figure shows in object oriented technology has reduced the semantic gap between realty and the model.
:-) What is Object Model?
Object-oriented technology exits on top of foundation and the it consists with some elements.When we take theses elements collectively call the object model.
:-) Major elements of Object Model
During our lecture we discussed about four major elements of object model as mention in the figure.
We identify the object in abstract manner. The level of abstraction depends on the requirement. You have to find the right level of the abstraction in that problem domain .For that you refer the software specification document and find the similarities. Then you can be able to find the right level of abstraction. Also depending on purpose we can reduce the attributes .If not lots of attributes will be in your program and it affect the maintainability of program. There are many abstraction con be find out in our environment such as animal, person, vehicle. Normally Abstract classes cannot be instantiated
Hide details of implementation of the methods. This picture shows simple example of encapsulation.
Best way to handle the complex systems is using divide and conquer method .You divide the whole system into manageable chunk. It will support for maintainability of program. By modularizing you can understand the each module separately.
Complex systems can be representing in hierarchical manner and we can go level by level in detail. So you able to find sub system and with in that sub system again small sub system like wise you can go along the hierarchy. Within the system as well as among those systems intercommunication take place. You have to minimize inter dependency between the modules. Hierarchy helps to deal the complex problem in simple manner.There are two hierarchy types.
- Is-a- : Cat is an animal
- Part -of : Monitor is part of Computer
Also there should be a purpose for go to hierarchy. For a simple solution hierarchy may not applicable.