소프트웨어 생명 연장을 위한 원칙.. Code Simplicity

이 책의 저자는 버그질라 프로젝트를 유지하면서 쌓아온 소프트개발의 방향에 관해서 이야기를 하고 있다. 역자가 서문에 밝혔듯이 다 알고 있는 내용을 담고 있다. 이 책은 소프트웨어 엔지니어들이 일상의 업무에서 느끼고 있는 소프트웨어 개발을 잘 하고 오래 유지하기 위해서 필요한 것들을 체계적으로 정리를 했다.

여러 가지 개념에 대해서 나오지만, 제일 중요한 개념으로 “가치”를 들 수 있겠다. 책에서 가치는 “어디서든 누구에게나 변경이 도움을 줄 수 있는 정도”라고 정의하고 있다. 책의 전체적인 흐름은 소프트웨어 개발이나 유지보수가 과연 가치를 가져올 수 있는가에 초점을 맞추고 있다.

그래서, 소프트웨어 개발이나 유지보수가 가치와 어떤 관계를 가져야 하는지에 대한 정의를 보면 아래와 같이 정의하고 있다.

1. 변경에 대한 바람직함의 정도는 변경의 가치에 비례하고, 변경에 필요한 노력에 반비례한다.
위 정의를 좀 더 세분화해서, 아래와 같이 정의하고 있다.
2. 변경의 바람직함의 정도는 현재와 미래에 대한 가치와 정비례하며, 구현과 유지에 필요한 노력에 반비례한다.

소프트웨어 설계에서 미래에 정확히 어떤 일이 벌어질지 예측하지 않아도 지금 알고 있는 정보를 기반으로 좀 더 나은 미래를 위한 의사결정을 할 방법을 조합해서 소프트웨어를 발전시켜야 한다고 말하고 있다.

저자는 변경은 필연적이라 보고 있으며, 이것을 위해서 미래를 예측하고 소프트웨어를 개발하는 것이 도움이 되는 것이 아니라 위의 알고 있는 정보를 기반으로 합리적인 설계를 하고 구현하는 것이 다가올 미래의 대응을 위해서 충분하다고 말하고 있다.

소프트웨어 설계자들이 범하는 3가지 예를 나열하고 있다.

1. 필요 없는 코드를 작성한다.
2. 변경하기 어렵게 코드를 작성한다.
3. 아주 포괄적으로 작성한다.

내 경험상 필요 없는 코드까지 친절히 개발해 놓는 경우나 아주 포괄적으로 작성한 경우는 별로 보지 못했지만, 변경하기 어렵게 코드를 작성한 경우는 아주 많이 봤다. 그리고 유지보수를 하면서 점점 더 변경하기 어려운 코드로 변모해 가는 것을 자주 봐 왔다. 결국, 지속적인 노력(예로, 리펙토링과 같은 구조와 코드의 개선)이 없이는 소프트웨어는 죽어가고 있다.

그래서, 저자는 “점진적인 개발”과 “점진적인 설계” 방법을 조합해서 소프트웨어를 발전시켜야 한다고 말하고 있다.

6장 단순화에서 코드의 결점을 줄이기 위해서는 변경을 범위를 최소화해야 하는데, 최소화하는 방안으로 소프트웨어의 부분이 단순해야 한다고 말하고 있다. 단순화를 위해서는 설계의 일관성이 필요하고, 코드는 가독성이 높아야 한다고 한다. 어디서 많이 들어본 이야기다. OOP의 설계원칙을 잘 준수하고 코딩규약만 잘 지키면 달성할 수 있겠다.

7장 복잡성에서는 소프트웨어의 목적을 확대하려는 노력을 거부해야 한다고 한다. 이 내용은 소프트웨어의 목적과 위배가 되는 기능들의 추가를 막을 수만 있다면 복잡을 줄일 수 있다고 한다. 저자도 말하고 있지만, 개인적으로 제대로 이해를 하지 못하는 소프트웨어를 유지하면서 복잡성만 증가시킨 경험도 있고 해서, 개인적으로 소프트웨어의 개발은 리드 프로그래머의 역할이 매우 중요하다고 생각한다.

복잡성을 다루는 절에서는 부분을 단순하게 만들고, 고칠 수 없는 복잡성은 숨기라고 한다. 요건 OOP의 관점에서 인터페이스 기반의 설계를 통해서 인터페이스를 단순하게 만들고, 복잡성을 인터페이스 뒤에 숨기라고 이해를 했다.

재작성은 기존의 소프트웨어를 제대로 개선할 수 있다든가 리소스가 충분해서 여력이 있는 등의 조건을 만족하면 하고, 그렇지 않으면 하지 말라고 가이드를 하고 있다.

이 책을 한마디로 정의하면, “소프트웨어 엔지니어들이 필드에서 느끼는 설계/구현/유지보수와 같은 일상업무의 지침서”라고 할 수 있겠다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.