746
edits
(add info) |
(box) |
||
Line 171: | Line 171: | ||
Formal methods are a particular kind of [[Mathematics|mathematically]] based technique for the [[formal specification|specification]], development and [[formal verification|verification]] of software and [[computer hardware|hardware]] systems.<ref>Phillip A. Laplante, 2010. Encyclopedia of Software Engineering Three-Volume Set (Print). CRC Press. p. 309. {{ISBN|978-1-351-24926-3}}.</ref> The use of formal methods for software and hardware design is motivated by the expectation that, as in other engineering disciplines, performing appropriate mathematical analysis can contribute to the reliability and robustness of a design. They form an important theoretical underpinning for software engineering, especially where safety or security is involved. Formal methods are a useful adjunct to software testing since they help avoid errors and can also give a framework for testing. For industrial use, tool support is required. However, the high cost of using formal methods means that they are usually only used in the development of high-integrity and [[life-critical system]]s, where safety or [[computer security|security]] is of utmost importance. Formal methods are best described as the application of a fairly broad variety of [[theoretical computer science]] fundamentals, in particular [[logic in computer science|logic]] calculi, [[formal language]]s, [[automata theory]], and [[program semantics]], but also [[type systems]] and [[algebraic data types]] to problems in software and hardware specification and verification. | Formal methods are a particular kind of [[Mathematics|mathematically]] based technique for the [[formal specification|specification]], development and [[formal verification|verification]] of software and [[computer hardware|hardware]] systems.<ref>Phillip A. Laplante, 2010. Encyclopedia of Software Engineering Three-Volume Set (Print). CRC Press. p. 309. {{ISBN|978-1-351-24926-3}}.</ref> The use of formal methods for software and hardware design is motivated by the expectation that, as in other engineering disciplines, performing appropriate mathematical analysis can contribute to the reliability and robustness of a design. They form an important theoretical underpinning for software engineering, especially where safety or security is involved. Formal methods are a useful adjunct to software testing since they help avoid errors and can also give a framework for testing. For industrial use, tool support is required. However, the high cost of using formal methods means that they are usually only used in the development of high-integrity and [[life-critical system]]s, where safety or [[computer security|security]] is of utmost importance. Formal methods are best described as the application of a fairly broad variety of [[theoretical computer science]] fundamentals, in particular [[logic in computer science|logic]] calculi, [[formal language]]s, [[automata theory]], and [[program semantics]], but also [[type systems]] and [[algebraic data types]] to problems in software and hardware specification and verification. | ||
{| style="border:1px solid #ccc; text-align:center; margin:auto;" cellspacing="15" | |||
|- | |||
| [[File:IF-THEN-ELSE-END_flowchart.svg|96px]] | |||
| <math>\Gamma\vdash x: \text{Int}</math> | |||
| [[File:Compiler.svg|96px]] | |||
| [[File:Python add5 syntax.svg|96px]] | |||
| [[File:Prop-tableau-1.svg|96px]] | |||
| [[File:Coq plus comm screenshot.jpg|96px]] | |||
|- | |||
| [[Semantics (computer science)|Formal semantics]] | |||
| [[Type theory]] | |||
| [[Compiler construction|Compiler design]] | |||
| [[Programming language]]s | |||
| [[Formal verification]] | |||
| [[Automated theorem proving]] | |||
|} | |||
=== Answering the question === | === Answering the question === |