4장 구조적 프로그래밍

kimjunkyung·2022년 6월 22일

클린아키텍처

목록 보기
4/14
post-thumbnail

4장 구조적 프로그래밍

에츠허르 비버 데이크스트라

증명

초기 문제 : 프로그래밍은 어렵고 프로그래머는 잘 하지 못한다.

⇒ 증명(proof)라는 수학적원리를 적용하여 해결하고자 함.

  • 유클리드 계층 구조( 공리, 정리, 따름정리, 보조정리) 적용하고자 함. : 프로그래머는 입증된 구조를 이용하고 이들 구조를 코드로 경합시키며 그래서 코드가 옳다는 사실을 스스로 증명하게 되는 방식

→ goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는 것을 발견

모듈을 분해 할 수 없다면 분할 정복 접근법 사용 할 수 없게 됨.

반면, goto 사용하더라도 모듈 분해에 문제 X인 경우 if/then/else 와 do/ while/until의 분기와 반복이라는 단순한 제어 구조로 대체

  • 모든 프로그램을 순차, 분기, 반복이라는 세 가지 구조로 표현 가능

해로운 성명서

기능적 분해

모듈을 증명 가능한 더 작은 다위로 재귀적으로 분해할 수 있게 됨. 즉, 모든 모듈을 기능적으로 분해할 수 있음

엄밀한 증명은 없었다

유클리드 계층 구조는 만들어지지 X.

과학이 구출하다

과학적 방법은 반증 가능 but 증명 불가

과학은 서술된 내용이 사실임을 증명하는 방식이 아니라 서술이 틀렸음을 증명하는 방식으로 동작.

수학 : 증명 가능한 서술이 참임을 입증하는 원리

과학 : 증명 가능한 서술이 거짓임을 입증하는 원리

테스트

“ 테스트는 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 수는 없다.”

→ 프로그램이 잘못되었음을 테스트를 통해 증명할 수 있지만 츠로그램이 맞다고 증명 X.

⇒ 소프트웨어 개발은 수학적 구조를 다루는 것 같아도 수학적 시도가 아님.과학임.

결론

소프트웨어는 과학과 같고 따라서 반증가능성에 의해 주도된다.

⇒ 데이크스트라는 유클리드 계층 구조를 만드려고 연구 과정 끝에 과학적 방법이 소프트웨어 개발에서 유용함을 말한다.

profile
#Backend #Developer

0개의 댓글