2016년 1월 31일 일요일

소프트웨어 개발에 있어서 믿지 못할 3가지 표현

소프트웨어 개발을 하다보니 자연스럽게 절대로 믿지 않게된 3가지

1. 절대 안바껴요
모든 것은 바뀔 수 있다. 왜냐하면 오늘날의 현실 세계가 그만큼 빠르게 변하고 있고, 그에 따른 요구사항도 빠르게 변하기 때문이다. 특히 소프트웨어 세계에서는 다른 영역에 비해서 그 빈도가 더 잦고, 그 범위가 더 넓다. 왜냐하면 흔히 사람들은 소프트웨어는 하드웨어와는 다르게 간단한 작업만으로도 쉽게 바꿀 수 있다고 생각하기 때문이다. 
프로그램을 설계하거나 개발할 때, 특정 요건이 절대 바뀌지 않는다는 가정은 하지 말자. 머지 않아 그 가정은 틀어질 수 있고, 그 가정에 기반한 설계와 소스코드는 수정하기 어려운 지경에 이르렀을 가능성도 높다. 변경될 부분을 고려하여 OCP스럽게 설계해야 할 것이다.

2. 한방에 다 되요
현실 세계가 매우 복잡해졌기 때문에, 그런 현실세계를 투영한 소프트웨어도 매우 복잡한 구성을 가지고 있는 경우가 대부분이다. 구성뿐만 아니라 절차마저도 복잡해졌다. 의미있는 결과물을 만들어 내기 위해서는 여러 단계의 작업을 거쳐야 한다. 일반적으로 데이터를 추출하고, 추출한 데이터들을 연결하고, 의미있는 계산을 수행한 다음, 결과를 보기 좋게 표시하는 작업이 이어지게 된다.
그런데 이런 일련의 작업을 한방에 다 되게끔 만드려는 시도가 있다. "한방쿼리"와 같은 단어가 대표적이다. 이는 중간 단계의 한 작업의 일부요소가 변경되는 경우에도 그 여파가 전체로 이어질 수 있는 위험한 설계이다. SRP를 유념하여, 프로그램을 나누어 가면서 작업할 필요가 있다.

3. 테스트 다했어요
사람은 불완전하기 때문에 모든 경우를 다 고려할 수 없다. 그런데 테스트를 다 했다고 표현하는 것은 상당히 오만한 자만심을 가진 경우이다. 1+1=2 수준의 프로그램을 만드는 경우조차 불완전한입력, 문자입력, null입력, overflow 등의 다양한 경우에 대해 신경을 써야 하고, 이보다 복잡한 프로그램은 그 경우가 더 많아질 것이다. 그만큼 요즘의 소프트웨어는 단순하게 테스트하기에는 복잡도와 난이도가 너무 높다.
아무리 테스트케이스를 다양하게 만든다고 하여도, 테스트케이스가 부족할 수 있다는 것을 언제나 잊지 말아야 한다. 또한 아직 발견되지 않은 결함이 존재한다는 것을 인정하고 부끄러워하지 말아야 할 것이다. 대신 그 결함을 발견할 수 있는 테스트케이스를 어떻게 만들 것인지를 고민해야 할 것이다.

누군가 위의 3가지 중에 한가지라도 말한다면, 그의 말을 믿지 말아라. 대신 언제든지 바뀔수 있는 요구사항과, 생각보다 복잡하고 어려운 현실세계와, 생각하지 못한 경우의 테스트가 있음을 잊지 말고 준비해라.

댓글 없음:

댓글 쓰기