📑 Table of Contents

In theoretical computer science, an algorithm is correct with respect to a specification if it behaves as specified. Best explored is functional correctness, which refers to the input–output behavior of the algorithm: for each input, it produces an output satisfying the specification.[1]

Within the latter notion, partial correctness, requiring that if an answer is returned, it will be correct, is distinguished from total correctness, which additionally requires that an answer is eventually returned, i.e., the algorithm terminates. Correspondingly, to prove a program's total correctness, it is sufficient to prove its partial correctness and its termination.[2] The latter kind of proof (termination proof) can never be fully automated, since the halting problem is undecidable.

Partially correct C program to find
the least odd perfect number,
its total correctness is unknown as of 2023
// return the sum of proper divisors of n
static int divisorSum(int n) {
   int i, sum = 0;
   for (i=1; i<n; ++i)
      if (n % i == 0)
         sum += i;
   return sum;
}
// return the least odd perfect number
int leastPerfectNumber(void) {
   int n;
   for (n=1; ; n+=2)
      if (n == divisorSum(n))
         return n;
}

For example, successively searching through the positive integers (1, 2, 3, …) to see if we can find an odd perfect number is quite easy to write and is a partially correct program that would find an odd perfect number, if such a number exists (see box). However, to say this program is totally correct (i.e., that it will find such a number and terminate) would be to assert that an odd perfect number actually exists, which is currently not known in number theory.

A proof would have to be a mathematical proof, assuming both the algorithm and specification are given formally. In particular, it is not expected to be a correctness assertion for a given program implementing the algorithm on a given machine. That would involve such considerations as limitations on computer memory.

A deep result in proof theory, the Curry–Howard correspondence, states that a proof of functional correctness in constructive logic corresponds to a certain program in the lambda calculus. Converting a proof in this way is called program extraction.

Hoare logic is a specific formal system for reasoning rigorously about the correctness of computer programs.[3] It uses axiomatic techniques to define programming language semantics and argue about the correctness of programs through assertions known as Hoare triples.

Software testing is any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results. Although crucial to software quality and widely deployed by programmers and testers, software testing still remains an art due to a limited understanding of the principles of software. The difficulty in software testing stems from the complexity of software: we can not completely test a program with moderate complexity. Testing is more than just debugging. The purpose of testing can be quality assurance, verification and validation, or reliability estimation. Testing can be used as a generic metric as well. Correctness testing and reliability testing are two major areas of testing. Software testing is a trade-off between budget, time, and quality.[4]

See also

edit

Notes

edit
  1. ^ Dunlop, Douglas D.; Basili, Victor R. (June 1982). "A Comparative Analysis of Functional Correctness". Communications of the ACM. 14 (2): 229–244. doi:10.1145/356876.356881. S2CID 18627112.
  2. ^ Manna, Zohar; Pnueli, Amir (September 1974). "Axiomatic approach to total correctness of programs". Acta Informatica. 3 (3): 243–263. doi:10.1007/BF00288637. S2CID 2988073.
  3. ^ Hoare, C. A. R. (October 1969). "An axiomatic basis for computer programming". Communications of the ACM. 12 (10): 576–580. doi:10.1145/363235.363259. S2CID 207726175.
  4. ^ Pan, Jiantao (Spring 1999). "Software Testing" (coursework). Carnegie Mellon University. Retrieved 21 November 2017.

References

edit

📚 Artikel Terkait di Wikipedia

Hoare logic

with a set of logical rules for reasoning rigorously about the correctness of computer programs. It was proposed in 1969 by the British computer scientist

Data type

information to check correctness of computer programs that access or manipulate the data. A compiler may use the static type of a value to optimize the

Static program analysis

In computer science, static program analysis (also known as static analysis or static simulation) is the analysis of computer programs performed without

Outline of computer programming

computer programs. Programming involves activities such as analysis, developing understanding, generating algorithms, verification of requirements of

Computer program

A computer program is a sequence or set of instructions in a programming language for a computer to execute. It is one component of software, which also

Axiomatic semantics

proving the correctness of computer programs. It is closely related to Hoare logic. Axiomatic semantics define the meaning of a command in a program by describing

Program analysis

In computer science, program analysis is the process of analyzing the behavior of computer programs regarding a property such as correctness, robustness

Hello, world

world" program is usually a simple computer program that displays on the screen (often the console) a message similar to "Hello, world". A small piece of code