HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
[New] 아만드팀
[New] 아만드팀
/
🔏
팀 스터디
/
🪵
클린 아키텍처
/
04 구조적 프로그래밍

04 구조적 프로그래밍

발표자
Subin kim
Date
Aug 23, 2022
Tags
2부
프로그래밍 패러다임
데이크스트라의 이야기..
수학은 증명 가능한 서술이 참임을 입증하는 원리
과학은 증명 가능한 서술이 거짓임을 입증하는 원리

테스트

데이스크라 : 테스트는 버그가 있음을 보여줄 뿐 버그가 없음을 보여줄 수는 없다.
테스트에 충분한 노력을 들였다면, 테스트가 보장할 수 있는것은
프로그램이 목표에 부합할 만큼은 충분히 참이라고 여길 수 있게 해주는 것이 전부다.
 
소프트웨어 개발은 수학적인 구조를 다루는 듯 보이더라도, 수학적인 시도가 아니라는 점이다.
오히려 소프트웨어는 과학과 같다.
최선을 다하더라도 올바르지 않음을 증명하는데 실패함으로써 올바름을 보여주기 때문이다.
 
이러한 부정확함에 대한 증명은 입증 가능한 프로그램에만 적용할 수 있다.
예를 들어 제약없는 goto문을 사용하는 등의 이유로 입증이 불가능한 프로그램은
아무리 테스트를 많이 수행하더라도 절대로 올바르다고 볼 수 없다.
 
구조적 프로그래밍은 프로그램을 증명가능한 세부 기능 집합으로 재귀적으로 분해할 것을 강요한다.
그리고 나서 테스트를 통해 증명가능한 세부기능들이 거짓인지를 증명하려고 시도한다.
 
거짓임을 증명하려는 테스트가 실패한다면,
이 기능들은 목표에 부합할 만큼은 충분히 참이라고 여기게 된다.
 

결론

구조적 프로그래밍이 오늘날 까지 가치 있는 이유는 프로그래밍에서 반증 가능한 단위를 만들어 낼 수 있는 능력 떄문이다.
뿐만 아니라 아키텍처 관점에서는 기능적 분해를 최고의 실천법 중 하나로 여기는 이유이기도 하다.
소프트웨어 아키텍트는 모듈, 컴포넌트, 서비스가 쉽게 반증 가능하도록(테스트 하기 쉽도록) 만들기 위해 노력해야 한다.
이를 위해 구조적 프로그래밍과 유사한 제한적인 규칙들을 받아들여 활용해야 한다.