소프트웨어를 단순히 컴퓨터 프로그램이라고 생각하는 경우가 많은데 소프트웨어는 프로그램의 개발과 운영 및 유지 보수에 관련된 모든 정보와 작업을 포함한다. 소프트웨어나 프로그램의 개발 프로젝트에서 원하는 결과물을 얻었다고 해서 프로젝트가 성공했다고 할 수는 없다. 결과물의 출력은 물론, 얼마나 정확하고 효율적으로 개발 및 사용, 관리가 이루어질 수 있는가 하는 것도 중요하다. 이는 더 나은 삶의 질을 추구하는 현대인의 생활 방식과도 유사하다.
정확하고 효율적인 소프트웨어를 개발하기 위해서는 개발할 소프트웨어를 정확히 이해하고, 사용할 자료와 자료 간의 연산 관계를 분석하여 자료구조를 정의하고, 이에 대한 가장 효율적인 구조를 고려해야 한다. 결국 자료구조에 대한 이론적, 실제적 고려가 없다면 좋은 소프트웨어도 개발할 수 없다. 소프트웨어 개발 단계와 방법을 이해하고, 체계적인 개발, 관리를 위해서 소프트웨어의 개발 과정을 몇 단계로 구분한다. 이를 소프트웨어 생명 주기 또는 소프트웨어 개발 주기라고 하며, 일반적으로 요구 분석, 시스템 명세, 설계, 구현, 테스트, 유지 보수의 6단계로 구분한다. 각 작업 단계마다 테스트를 해서 수정이 필요한 경우 이전 단계나 오류가 발생한 단계로 피드백하여 완성도를 높인다.
1. 요구 분석 단계
소프트웨어 개발의 첫 단계는 요구 분석이다. 요구 분석은 문제 분석이라고도 하는데, 이 단계에서는 개발할 소프트웨어의 기능과 제약 조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의한다. 또한 개발해야 할 소프트웨어의 설격을 이해하고 개발 방법과 필요한 자원, 예산을 예측해야 한다. 요구 분석 단계에서 요구 사항 명세서를 작성하는데, 요구 사항 명세서는 소프트웨어의 개발 완료 여부를 결정짓는 근거가 되므로 정확하게 작성해야 한다.
2. 시스템 명세 단계
시스템 명세 단계에서는 시스템이 무엇을 수행해야 하는가를 정의한다. 이 단계에서 시스템기능 명세서를 작성하여 소프트웨어의 입력 자료를 정의하고 입력 자료로 처리하는 내용과 그 결과 생성되는 출력물을 정의한다. 시스템 기능 명세서는 개발 과정에서 의견 차이나 오류로 인해 재개발 작업이나 사용자의 불만이 발생하지 않도록 가능한 정확하게 작성해야 한다.
3. 설계 단계
설계 단계에서는 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 그 수행 방법을 논리적으로 결정한다. 이 단계에서 개발 목표 기능을 어떻게 구현할 것인지 구체적으로 정의한다. 설계는 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계로 구분할 수 있다.
1) 시스템 구조 설계 : 시스템을 구성하는 내부 프로그램이나 모듈 간의 관계와 구조를 설계한다.
2) 프로그램 설계 : 프로그램 내의 각 모듈에서의 처리 절차나 알고리즘을 설계한다.
3) 사용자 인터페이스 설계 : 시스템을 사용하는 사용자에게 보여지는 프로그램을 설계한다.
시스템 설계 방법에는 하향식 설계 방법과 상향식 설계 방법, 그리고 객체지향 설계 방법이 있다.
1) 하향식 설계 방법 : 무엇을 수행할 것인지를 정의하는 단계에서 시작하여 각 단계를 내려갈수록 수행방법을 구체적으로 정의하고 세분화하는 방법이다. 하향식 설계 방법은 하위 단계로 갈수록 구체적인 세부 문제를 정의한다. 마지막 최하위 단계로 분할된 작은 단위의 문제들을 각각 처리함으로써 전체 문제를 해결한다. 이러한 방식을 분할 정복이라고 한다.
2) 상향식 설계 방법 : 하향식 설계 방법과 반대로, 최하위 단계에 있는 작은 단위를 먼저 결정하고 이를 이용하여 좀 더 큰 단위인 상위 단계의 문제를 해결하는 방법이다. 최하위 단위의 문제들에 대해 기존에 개발되어 있는 문제 해결 도구를 재사용하는 경우에는 개발 기간과 비용을 단축하고 신뢰성을 확보할 수 있다.
3) 객체지향 설계 방법 :객체지향 설계 방법에서는 작은 단위의 문제 해결을 위한 자료와 처리 방법을 하나로 묶어서 객체를 만들과, 객체를 연결하여 재사용한다. 하위 단위의 문제 해결 도구를 재사용한다는 점에서 상향식 설계 방법과 유사하나 자료와 처리 방법이 하나의 객체로 만들어진다는 차이가 있다.
'mandle.Making > 로봇' 카테고리의 다른 글
같이 만들랩? DIY LED키트 (0) | 2017.12.16 |
---|---|
로봇의 역사 (2) (0) | 2017.07.22 |
미래를 준비하는 소프트웨어 코딩교육 (0) | 2017.07.20 |
작지만 강력한 코딩교구 마이크로비트 (0) | 2017.07.19 |
로봇의 역사 (1) (0) | 2017.07.17 |