[문제 제시]
"임의의 문장을 입력 받아 해당 문장에서 한글 단어만 추출하려면 어떻게 해야 할까요?
문장 부호, 공백 문자, 특수 문자 등 한글 이외의 문자를 모두 제외해야 합니다.
이러한 프로그램을 가장 효율적(빠르거나, 메모리를 적게 쓰거나)으로 동작하게 하려면, 무엇을 고려해야 할까요?"
[프로그램 개발 절차]
위와 같은 문제를 아래의 4단계에 걸쳐 개발하려고 합니다.
분석 > 설계 > 개발 > 성능/기능 테스트
[소프트웨어 개발에서 분석이란? 그리고 어떻게?]
소프트웨어 개발에서 '분석'은 '무엇(what)'을 만들 것인지를 정의(파악)하는 단계입니다. 머리가 좋거나, 지식을 많이 쌓은 사람만이 할 수 있는 것은 아닙니다. 분석이라는 단어부터 어렵게 느껴질 수 있는데, 영어 단어인 analysis의 어원을 살펴봅시다.
analysis는 'ana(up to)'와 'lysis(untie)'가 결합하여 얽히고 뭉쳐 보이지 않던 것을 물러지게(lys) 하면 그 속에 무엇이 있는지'를 알게 됩니다.
출처 - lose 에 대하여
분석 (分析) : 한자로는 '나눌 分', '쪼갤 析' 영어의 어원과 크게 다르지 않습니다. 분석이란, 주어진 과제(혹은 문제)를 좀 더 잘게 쪼개서 문제를 명확히 이해하는 과정입니다. 잘게 쪼개다 보면 미쳐 생각하지 못했던 부분들이 드러나기도 합니다. 그리고 분석 과정에서 새로운 의문점이 드러나기도 합니다. 분석 과정은 문제를 쪼개보고, 의문점이 발생하면 이해를 위해 문제를 다시 검토하거나, 심하면 문제를 재정의합니다.
개발이나 설계를 하기 전에 분석하는 이유는 "구현"할 수 있는 문제인지를 파악하고, 처음 문제에서 미쳐 드러나지 않은 숨은 위험요소를 찾아내며 구현할 수 없다면 문제를 재정의하거나, 주어진 자원(시간, 비용)으로 풀 수 없다면 전체 계획을 수정하기 위한 작업입니다. 또한, 분석 결과는 설계와 구현하는데 필요한 사양(specification)으로 활용됩니다.
["한글 단어 추출" 문제 분석]
먼저, 주어진 문제를 한 문장씩 나누어 봅니다.
1. 임의의 문장을 입력 받아 해당 문장에서 한글 단어만 추출한다.
2. 문장 부호, 공백 문자, 특수 문자와 한글 이외의 문자를 모두 제외해야 한다.
3. 가장 효율적(빠르거나, 메모리를 적게 쓰거나)으로 동작해야 한다.
다시 쪼갤 수 있다면 쪼개 봅니다. 모호한 것들을 제거해 나갑니다. 새로운 의문점이 드러날 수도 있습니다.
1. 임의의 문장을 입력 받아 해당 문장에서 한글 단어만 추출한다.
: 임의의 문장을 어떻게 입력 받을 것인가? 사람이 직접 입력하는지, 웹 사이트의 주소를 입력 받는지, 아니면 파일을 선택하는지?
: 한글 단어는 정확히 명사를 추출한다는 것인지? 아니면, 문장성분(예를 들어 주어+조사)을 의미하는 것인지?
2. 문장 부호, 공백 문자, 특수 문자 등 한글 이외의 문자를 모두 제외해야 한다.
: 영어, 숫자 문자도 제외하는가?
3. 가장 효율적(빠르거나, 메모리를 적게 쓰거나)으로 동작해야 한다.
: 빠른데 메모리를 많이 쓰거나, 느린데 메모리를 적게 쓴다면 둘 중 어느 쪽이 나은 결과인가?
문제에서 제기되지 않았지만, 다른 의문도 발생할 수 있습니다.
- 입력 텍스트의 다양한 텍스트 인코딩(UTF-8, EUC-KR)을 지원해야 하는가?
- 형태소 분석기를 적용해야 하는가?
- 어떤 언어를 개발해야 하는가?
- 어떤 플랫폼 (웹, PC 어플리케이션, 모바일)에서 동작해야 하는가?
- 처리 결과는 데이터베이스에 저장해야 하는가?
위와 같은 의문점에 대한 답을 구한 후에, 요구사항(세부 문제 항목)을 나열하면 간단한 '요건 분석'을 마쳤다고 할 수 있습니다.