We believe in a syllogism. The two premises are:
- All engineering branches go through a transition from artistic management to an engineering discipline.
- Software engineering solves complex problems for the mankind hence is a branch of engineering and currently is still in its artistic management phase.
Therefore the conclusion is:
- Software engineering will evolve into a science-based engineering discipline.
The driving force of this transition is the discovery and application of engineering science. For civil engineering it is the Statics; for software engineering it is the software science. Software science is a discipline to construct application domain knowledge into a scientific theory from which complete requirements are derived. This theory, once constructed, is further explained in terms of program construct in the problem domain from which software design proceeds. This belief is based on another syllogism where the two premises are:
- We can think of the application domain as what is given. There are general laws (domain knowledge), the invariant property, of the domain that we can come to know. Without the existence of the invariant property, the development task is not possible. This knowledge has two properties: independent of software under development and inherent to the domain itself that is to be discovered not invented.
- Application domain is a complex phenomenon inaccessible to our intuition but accessible to scientific method. Using scientific terms, we are able to unravel the phenomenon in its entirety, including its hidden aspects. The planets Neptune and Pluto were discovered this way, as also the existence of electromagnetic waves. The scientific formulation of processes or situations enables one to predict the evolution of a system: something that is impossible to do in any purely verbal language. Knowledge acquires its most advanced form in science. When we represent the application domain knowledge as a scientific theory, we are able to explain, predict and control events in the domain that is impossible with any verbal language. The primary reason for the immaturity of software engineering is the use of ordinary language instead of scientific language or mathematical concepts to understand problem and define requirements.
The conclusion is:
- There exists an engineering discipline to systematically elicit and construct application domain knowledge in form of scientific theory whereby problem space is precisely scoped, well structured, visualized, and effectively communicated.
Requirements are a variant or nonessential property of the application domain. The general belief that requirements are unknowable upfront is due to the fact that no efforts are made in systematically and scientifically constructing the application domain knowledge. Rather today’s prevailing methodologies rely on intuition and use trial and error approach. The “hurry up to show results” syndrome is one of the greatest sources of having “cost-regret” in design. Intuitive knowledge is imprecise, incomplete, and incommunicable. Requirements change can be avoided mostly if not completely if we are able to represent the application domain in scientific terms. When domain invariant property is scientifically represented, we are able to define with subjective certainty the full scope and full range of requirements. Requirements volatility is anticipated rather than unexpected. |