Software Engineering benefits
Software Engineering is still a relatively new area of engineering. Indeed the phrase itself gained widespread use after a 1968 NATO-sponsored conference. As the name suggests, it deals with the "demystifying" of the process of designing, creating and maintaining software. It is perhaps useful to bear in mind that a structured approach to a solution is in no way a barrier to creativity. Indeed, much modern architecture, although bound by rigid guidelines and specifications can be truly breathtaking.
The single greatest driving force in software engineering (and indeed almost every branch of industry today) is cost-reduction. Time to market and development cost are two critical factors in deciding a product's fate.
Although initially through trial-and-error, the current accepted method of cost-effective software development is the result of an industry-wide study as to what makes a software project successful. By identifying recurring patterns (such as the follow-up costs caused by bad planning) the costs associated can be minimised by adapting the devleopment model.
Current estimates suggest that 40% of the cost in a successful software project goes into planning, 40% into testing and only 20% in actual coding.
Modularity / Flexibility
Decisions made during the design phase of a software project can often carry unforseen hidden costs once the project is finished. In an effort to reduce this problem, code is increasingly being made modular. By defining a part of a program only through it's Interface it is relatively easy to replace this module or component at a later date without making drastic changes to the core of the product.
Such modularity also allows for previously unforseen functionality to be incorporated at a later date.
It is a relatively well.known fact that the effort required to solve a problem is proportional to its complexity. Indeed, the estimated cost of solving a problem increases with the square of it's complexity.
This means that a piece of software code which is twice as complex as another will either
- Take four times as long to reach a given quality -or-
- Have four times as many bugs after a given development time
By applying the aspects of modularity, we can limit the size of any given portion of code. Instead of having a program with 1 million lines of code, we can now have perhaps four modules each with 250,000 lines of code. The total complexity has now decreased by 75%. This allows generation of software with far fewer bugs in the same time.
(0.25*0.25)*4 = 0.25 for 4x 250,000 line programs
(1*1) = 1 for 1x 1,000,000 line Program