Putting the "engineering" into "software engineering"
Is software development really a form of engineering? Or is it just some kind of elaborate craftsmanship? Are we just fooling ourselves thinking that we are doing engineering? If so, it is certainly not from lack of trying hard over the last 20 years. But may be we tackled the problem from the wrong end: we tried to impose techniques from other engineering disciplines onto software development models without understanding the real nature of software. We analyze the similarities and the differences, and pinpoints the key discriminants (lack of fundamental laws, technology churn, no manufacturing stage) that make software endeavours somewhat different than, for example, those in civil or mechanical engineering. We look at a few recent developments that help fill the gaps: iterative development and model-driven design. And we use Frank Gero's function-behaviour-structure framework to help us contrast software engineering with other engineering disciplines.