Dijkstra (A position paper on Software Reliability) argued that the notion of software reliability is meaningless, because the environment in which the software is made to work cannot be dealt with in scientific ways. There is always a gap between the formal specifications and the behavior, which the software user really wanted from the software.
I agree with the meaninglessness of the notion. But I disagree that the environment cannot be treated scientifically.
Consider, for the example, software for controlling an airplane, which flies by wire. Let’s assume, for the sake of argument, that takeoffs and landings are 100% manually controlled. Let’s also assume that there is no issue of collision with mountains. Then, it is possible to specify all weather conditions, which the airplane might face while being en route. Thus, the control software can be fully specified to control the airplane no matter what air turbulences, rain or snow conditions the airplane might face as long as it is being flown in Earth’s atmosphere.