Software-Engineering
[Software-Engineering] 소프트웨어 공학 개요 / 요구 분석 / 설계
8기_이지정
2024. 5. 30. 10:15
beyond day 13
소프트웨어 공학 개요
- 소프트웨어에서 소프트는 '부드럽다'라는 뜻으로 딱딱하고 변경하기 어렵다는 '하드'와 반대되는 개념
- 소프트웨어란 입력된 자료를 처리하여 결과를 출력하는 프로그램과 프로그램의 개발, 운용, 보수에 필요한 자료 일체
- 공학적 원리를 소프트웨어 개발에 적용하는 것이 소프트웨어 공학
- 공학이란 과학과 수학을 기초로 하여 구조나 기계, 시스템 등을 생산하는 데 체계적인 방법을 적용하는 것
- 무엇을 개발할지 결정하는 작업
- 사용할 수 있는 기술을 이용하여 요구 사항을 어떻게 구현할 것인지 결정하는 작업
- 설계한 내용을 구현하는 작업
- 프로그램을 구현한 후 기능이 원하는 대로 작동하는지 테스트하는 작업
- 개발된 소프트웨어를 완벽해질 때까지 계속 발전시켜나가는 작업
요구 분석
- 요구 분석은 무엇을 하는 시스템을 개발할지 결정하는 것
- 도메인 분석은 소프트웨어 엔지니어가 개발하려는 분야의 배경지식을 알아가는 과정
- 도메인이란 말은 소프트웨어를 사용할 것으로 예상되는 고객이 일하는 분야의 비즈니스나 기술을 의미
- 도메인 분석으로 얻을 수 있는 장점으로는 빠른 개발, 좋은 시스템, 확장 예견이 존재
- 문제를 이해하기 위해 정보를 수집하고 사용자에게 무엇이 필요한지 찾아내는 것
- 기능적 요구는 시스템이 무엇을 하는지, 즉 사용자나 다른 시스템을 위해 제공하는 서비스가 무엇인지 기술한 것
- 비기능적 요구는 소프트웨어를 개발하는 동안 고수해야 할 제약 조건으로, 사용하는 하드웨어의 제약, 소프트웨어 품질의 특성에 대한 수준의 범위를 정해놓은 것
- 문제와 현재의 상태를 파악하고 요구를 도출한 후 해결책을 제시하고 소프트웨어가 어떤 기능을 가져야 하는지 정확히 기술하는 단계
- 도출한 요구 사항이 적절한지 검토하고, 수정이 필요하면 다시 요구 추출 단계로 돌아감
- 요구 사항을 검토할 때는 관련자들이 모두 참석한 가운데 리뷰 회의를 진행
설계
- 소프트웨어의 구조 설계는 품질 좋은 소프트웨어 시스템을 개발하기 위한 중요한 단계
- 만약 소프트웨어 구조가 잘 설계되지 않으면 구현, 테스트, 유지보수에 큰 어려움이 뒤따를 것
- 가장 높은 수준의 구조부터 시작하여 점차 낮은 수준의 구조로 내려오면서 각종 설계 이슈에 관한 의사 결정을 하는 방법
- 소프트웨어 구조와 사용될 데이터베이스의 종류를 먼저 결정한 후 특정 데이터 아이템의 형태와 사용될 개별 알고리즘을 결정하는 것을 예로 들 수 있음
- 재사용이 가능한 낮은 수준의 기능을 먼저 정한 다음, 높은 수준의 구조를 만들기 위해 이것들을 어떻게 배치할지 결정
- 아키텍처 설계
- 클래스 설계
- 사용자 인터페이스 설계
- 데이터베이스 설계
- 알고리즘 설계
- 프로토콜 설계
- 본격적인 설계를 시작하기 전에 여러 가지 품질 측면에 대해 목표와 우선순위를 수립해야 함
- 목표와 우선순위를 정할 때 고려할 품질은 메모리 효율성, CPU 효율성, 유지보수성, 이식성, 사용성
- 설계할 때 고려해야 할 중요한 점은 비용을 줄이고 효과를 높이는 방법을 찾는 것
- 새로운 기능이나 설계안에 대한 비용을 추정하기 위해 다음과 같은 요소를 고려
- 소프트웨어 엔지니어링 작업에 드는 추가 비용
- 특정 개발 기술에 드는 추가 비용
- 사용자 및 제품 지원 인력에 드는 추가 비용
- 소프트웨어 엔지니어링 작업 시 절약 시간
- 매출 향상이나 사용자의 금전적 이익