Wednesday, April 22, 2009

Software Design Charactristics

Now a days I am reading a fantastic book Code Complete 2 written by one of the finest and famous writer of Software Engineering books Steve McConnell. This blog will actually now served me as keeping notes and important points from this book so that I can use these points as reference and also to share it with all of you.

Although this books is mostly about software construction but he also described the characteristics of a well designed software. Bellow I am presenting these Characteristics with their key concepts.

Minimal Complexity:
  •  Keep your design simpe and easy to understand don't make clever designs because they are hard to understand.

Ease of Maintenance:
  • Design the system to be self-explanatory.

Minimal Connectedness:
  • Means designing so that you hold connections among defferent parts of a program to a minimum. Use the principles of strong cohesion, Loose coupling, and information hiding to design classes with as few interconnections as possible.
Exensibility:
  • Extensibility means that you can enhance a system without effecting other parts.
Reusability:

  • Design a system in such a way that you will be able to use the work you've already done in other system where there is a similar functionality needed.
High fan-in:
  • Referes to having a high number of classes that use a given class.
Low-to-Medium fan-out:
  • Means a given class use a low-to-medium number of other classes.
Probability:
  • Probability means designing system in such a way that it can easily be moved to another environment.
Leanness:
  • means designing the system so that it has no extra parts.

Stratification:
  • Stratified design means trying to keep the levels of decomposition stratified so that you can view the system at any single level and get a consistent view.
  • If yor're writing a modern system that has to use a lot of older, poorly designed code, write a layer of new system that's responsible for interfacing with the bad code. Design the layer so that it hides the poor quality of the old code, presenting a consistent set of services to the newer layers.

Standard techniques:
  • Try to use standardized and common approaches or It'll be very much difficult for someone to understand it first time.

1 comment:

Unknown said...

Great work !
keep up the good effort