Saturday, October 10, 2009

About Software Modularity

I am involved in a project to make a big code-base (about 1 million lines with comments) modularized, then there are two interesting questions:

1. What does software modularity really mean?

2. How does software modularity impact the full life-cycle of the development?

1. What does software modularity really mean?

The software modularity could mean many things, for example, each software module could be compiled independently, no header file or logic dependencies on other modules The software modularity could also mean each module could be executed independently and link at runtime, like Windows DCOM or Windows/UNIX shared library.

Normally any software will start with some form of modularity design. However, the modularity may deteriorates along the way if the modularity is not well maintained or the original modularity design is not good enough, "not good" means no way to ensure modularity at tool level, all depends on human best practice.

2. How does software modularity impact the full life-cycle of the development or even the success of the project.

The software modularity level creates huge impact on the project execution or even success/failure. It not only causes technical issues, but also impacts management. A good modularized code-base enables a group of experienced Engineers focused on the overall picture without the need to look into the details, while other groups of engineer can focus on their own module with less in-depth knowledge of the overall picture. Modern software projects are almost for sure with a big team of developer/testers involved, no-one has enough capacity to know everything, and if someone really does, it is not a good sign for the company:-).  Better level of modularity provides the key foundation for the success of big team collaboration.

Having thought of these two questions, the subsequent question will be:

How to design a modularized software?

Or worse case: how to make current software modularized?

I have two related to discuss these two questions:

1. Component based programming (Object-oriented style and Finite-State Machine based model) to design a modularized software system;

2. Iterative and incremental improvement of software modularity for existing system.

No comments:

Post a Comment