구조적 프로그래밍은 데이크스트라라는 네덜란드 프로그래머에 의해 만들어졌다.
증명
데이크스트라는 프로그래밍에도 수학의 증명을 도입하려고 했다. 프로그래머가 검증된 구조를 사용해 코드를 작성하여 이 코드가 올바르다는 사실을 스스로 증명하게 만드려고 했다.
이런 과정에서 goto
문은 단순 반복문/조건문으로 대체할 수 있다는 것을 발견했다. goto
문을 사용하면 증명을 하기가 어렵지만, 반복문/조건문은 세부 단위로 쪼갤 수 있고, 따라서 증명을 하기가 더 쉽다.
모든 프로그램을 순차, 분기, 반복이라는 세 가지 구조만으로 표현할 수 있다는 사실을 증명했다.
해로운 성명서
데이크스트라는 "goto문의 해로움"이라는 제목의 글을 썼고, 여기에 많은 사람들이 지지와 반대를 보냈다.
현재 살펴보면 goto
문은 코드 스멜이다. 이를 지원하지 않는 언어도 많고, goto
문을 사용하지 않는 것을 권장한다.
기능적 분해
구조적 프로그래밍을 통해 모듈을 증명 가능한 더 작은 단위로 분해할 수 있게 됐다. 이를 토대로 구조적 분석이나 구조적 설계와 같은 기법이 인기를 끌었다.
엄밀한 증명은 없었다
증명은 이루어지지 않았다. 대다수의 프로그래머들이 기능들을 엄밀히 증명하는 작업을 좋아하지 않았고, 이를 통해 이득을 얻는다고 믿지 않았다.
그러나 과학적 방법으로 구조적 프로그래밍이 해답을 찾게 된다. 과학적 방법은 반대가 나오기 전까지 옳다고 믿는 것이다.
테스트
과학적 방법에서 테스트가 출발한다. 프로그램이 옳다고 믿기 때문에 반증을 찾기 위해 테스트를 진행해야 한다.
테스트는 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 수는 없다