Research toward an engineering discipline for software
Software engineering should aspire to be a true engineering
discipline. We have made good progress in some areas, but a
number of aspects of practical engineering are under-represented
in our research portfolio. We have been slow to move beyond
well-delimited systems developed by professional programmers to
systems integrated from multiple public sources that evolve in the
hands of their users. We have focused on formal reasoning and
systematic testing to the detriment of qualitative and incremental
reasoning supporting cost-effective, rather than perfect solutions.
We have been slow to codify our results into unified theories and
practical reference material. To establish a true engineering
discipline for software, we need to broaden our view of what
constitutes a “software system” and we need to develop
techniques that help to provide cost-effective quality despite
associated uncertainties.