[Site Map]  [소프트웨어목차]

 

연관토픽

  1. [상위] 소프트웨어(Software)

 

출제

관리123-2   

 

 

개념[각주:1]

  • 과학적 지식을 소프트웨어 설계와 제작에 응용하는 것이며 이를 개발, 운영, 유지보수 하는데 필요한 문서화 과정(Boehm)
  • 고품질의 소프트웨어를 경제적으로 생산하기 위하여 공학, 과학 및 수학적 원리와 방법을 적용하는 것(SEI)
  • 소프트웨어에 대한 개발, 운용, 유지보수에 대한 체계적이고 엄격하고 한정적인 접근 방법으로 소프트웨어에 공학을 적용하는 접근 방법

 

 

 

소프트웨어 개발에 공학적 접근이 필요한 이유

  • 무형성, 진화성, 복잡성 등의 소프트웨어 특성과 제조가 아닌 개발 과정이므로 일반 제조공정보다 측정과 관리가 어려움
  • 수시로 변경되는 요구사항과 사람에 의존하여 개발되는 특성, 프로젝트 규모에 따른 인력, 비용,의사소통, 복잡도 등이 기하급수적으로 증가
  • 소프트웨어는 닳지는 않지만, 요구사항의 변경과 주변 환경의 변화에 따라 수정되고 진화됨
  • 최종 산출물이 개발 과정에서 확인이 되지 않기 때문에 오류를 발견해야 할 시기를 놓치거나 오류에 대한 해결책을 못 찾는 경우가 발생하여 프로젝트가 지연되고 예상 범위가 초과하여 프로젝트가 실패 가능

 

 

 

소프트웨어 공학의 목표 [관리123-2]

목표 필요기법
고품질(Quality) 소프트웨어의 생산(품질관리) 요구사항 관리, 품질관리
사용자 만족도의 극대화(요구사항 관리) 요구사항 관리, 품질관리
적정비용, 기간, 자원으로 소프트웨어 생산(프로젝트 관리 기법) 정해진 비용, 기간, 자원으로 소프트웨어 생산
소프트웨어 생산 프로세스 개선(SDLC 적용) 요구사항 관리, 적정한 SDLC
생산성(Productivity) 향상 요구사항 관리, 부품화, 모듈화, 패턴화 기법

 

 

 

소프트웨어 공학의 발전원리 [관리123-2]

  • 소프트웨어 위기 극복을 위해 공학적 접근, 표준화, 자동화 도구, 품질보증체제 적용

 

 

 

소프트웨어 공학의 구성요소/소프트웨어 공학이 다루는 주제 [관리123-2]

  • 소프트웨어 공학의 적용을 통해 QCD(Quality, Cost, Delivery)의 만족을 목표로 함
구성요소 내용 사례
방법
(Method)
- 목표로 하는 결과를 얻기 위하여 적용하는 기법과 절차
- 소프트웨어 설계, 구현, 테스트, 유지보수 작업을 효율적으로 수행할 수 있는 방법을 연구
- 구조적 분석/설계방법,
- 객체지향분석/설계방법
도구
(Tool)
- 도구는 효율적이고 생산성과 품질을 높이며 작업 용이성을 극대화 하기 위한기구 및 자동화된 시스템
- 예를 들면 설계도구, 프로그래밍도구, 테스트 도구, 프로젝트 관리 도구 등
- 설계 도구 
- 프로그래밍 도구
- 테스트 도구
프로세스
(Process)
- 프로세스는 기법과 도구를 이용하여 효율적으로 진행할 수 있는 순서를 지칭
조직의 개발 성숙도는 프로세스의 효율성과 연관관계
- RUP 
- eXtreme Programming
패러다임
(Paradigm)
- 패러다임은 스타일과 유사하며 접근 방향과 철학을 의미
- 소프트웨어 개발 패러다임은 여러 가지 엔지니어링 스타일 유형이 존재
- 구조적 방법론
- 객체지향 방법론

 

 

 

 

소프트웨어 공학의 영역

  • 소프트웨어 공학은 생산성을 높이는 여러가지 방법론과 도구, 관리기법 등이 연구되고 있으며 요구공학, 테스팅, 개발방법론, 아키텍처 등 여러 영역으로 나누어짐
영역 내용
요구공학 소프트웨어 개발에서 수행되는 첫번째 작업으로써, 개발된 시스템에 대한 고객의 요구를 이해하고 목표와 제약사항을 확립하여 시스템을 만족시킬 기능, 성능과 다른 시스템과의 인터페이스 등을 정의하는 과정
아키텍처 시스템의 주요 기능 또는 서비스를 제공하는 기능 또는 서비스를 제공하는 구성요소와 구성요소들 간의 관계, 그리고 시스템의 기능, 속성 및 제약 사항 등을 적절히 반영하는 구조가 서로 조직화되어 목표 시스템의 전체적 형태를 표현
개발방법론 시스템을 개발하기 위해 어떤 방법으로 진행할 것인지, 어떠한 방법으로 진행할 것인지 다루는 분야로 어떻게 구조화 할 것인지, 어떤 단위를 사용하여 분석할 것인지, 어떤 산출물이 나와야 할 것인지 등을 결정
테스팅 소프트웨어의 결함을 발견하기 위한 활동으로 모듈 단위의 단위 테스틩, 시스템 통합 시에 사용되는 통합 테스팅, 요구사항을 검증하는 시스템 테스팅 등이 있는데 개발방법론에 따라 다양한 테스팅 방법들이 연구
프로세스 소프트웨어의 개발 및 진화에 사용되는 활동, 방법 및 실무 활동들의 집합으로 최종 산출물을 생산하기 위해 요구되는 인력, 절차, 방법, 장치 및 도구들의 통합 수단
형상관리 소프트웨어 개발 산출물(문서, 소스코드 등)의 형상항목들의 배열의 변화를 관리하는 것으로 개발 중 작성되는 산출물이 공동 작업으로 인해 중복되거나 삭제되는 것을 방지하고 변경 발생 시 추적이 가능하도록 하는 활동
품질 소프트웨어 분야에서의 품질은 제품 자체가 가지는 제품품질과 제품이 프로세스를 통해 생산되는 것과 연관된 프로세스 품질로 구분. 프로세스 품질은 소프트웨어를 개발하는 프로세스가 정확하고 우수하면 좋은 품질의 소프트웨어를 생산할 가능성이 높다는 것을 의미
재사용 소프트웨어의 재사용는 단순 코드의 재사용뿐만 아니라 응용분야에 대한 지식, 개발 경험, 설계에 관한 지식, 시스템 구조에 대한 지식, 요구 분석 사항, 설계, 문서 등도 포함 가능. 코드 재사용의 한계를 극복하기 위해 코딩단계 이전의 재사용에 대한 노력이 계속 되고 있음
프로젝트 관리 프로젝트를 총체적으로 관리하고 각각의 업무를 분담 및 관리하는 영역역으로 프로젝트의 일정 및 인력, 예산 등을 관리하는 활동
정형기법 소프트웨어의 결함을 줄이고 품질을 높이기 위해 수학과 논리학에 기반을 둔 정형기법을 하드웨어나 소프트웨어 시스템을 명세하거나 검증할 때 활용하는 기법으로 정형명세와 정형검증이 있음
유지보수 소프트웨어가 고객에게 인도된 후에 폐기될 때까지

 

 

 

 

소프트웨어 공학 프로세스

단계 관점 설명
정의단계 무엇(What) 처리되는 정보, 성능과 기능, 인터페이스, 설계 제약 조건, 검증 기준 등의 기술하는 단계로 시스템과 소프트웨어의 주요 요구사항 결정단계
개발단계 어떻게(How) 데이터 구조화, 소프트웨어 기능 및 설계, 개발, 테스트에 대한 기술 단계로 소프트웨어 설계, 코드생성, 소프트웨어 테스트 단계
지원단계 변화(Change) 오류수정, 소프트웨어 사용환경 변화에 따른 변화, 사용자 요구에 따른 변경 수행
기존 소프트웨어의 성질은 변화시키지 않은 범위에서 적용

 

 

 

 

 

소프트웨어 프로세스 프레임워크

  • 소프트웨어 프로젝트의 크기나 복잡도에 관계없이 모든 프로젝트에 적용 가능한 프레임워크 액티비티를 찾아 소프트웨어 공학 프로세스가 완전하도록 기반을 확립
액티비티 내용
커뮤니케이션
(Communication)
프로젝트에 대한 이해관계자들의 목표를 이해하고 소프트웨어의 특징과 기능을 잘 정의할 수 있도록 요구사항을 수집하는 활동
계획
(Planning)
수행해야 하는 기술적인 태스크, 발생할 수 있는 위험, 요구되는 자원, 작업 산출물, 작업 스케줄 등을 묘사하여 소프트웨어 공학 작업 정의
모델링
(Modeling)
소프트웨어 요구사항과 요구사항을 달성해 주는 설계를 더 잘 이해하기 위해 모델을 생성하여 작업 수행
구축
(Construction)
코드 생성과 코드에 있는 에러를 찾아내기 위한 테스팅을 결합한 활동
배포
(Deployment)
소프트웨어가 고객에게 전달되어 고객은 프로덕트를 평가하고 평가를 바탕으로 피드백을 제공

 

 

 

 

공학과 과학의 차이

  • 과학이 자연 자체를 대상으로 법칙을 탐구하는 것에 반해 공학은 실제적 문제(Practical Problem) 를 해결하거나 실제적인 산출물을 생산해내기 위해 자원과 비용을 효과적으로 활용하면서 과학적 지식을 적용하는 것 
  • 공학은 업무 분양에서 문제가 발생하였을 때 실무자가 적절한 해답을 찾을 수 있도록 체계적으로 정리된 기술적 지식을 제공
  • 소프트웨어 개발에서의 공학의 적용은 과거에 사용했던 소프트웨어 개발 기술, 절차 그리고 도구의 우수한 사례(Best Practices)들을 정리하여 지침을 만들고, 이러한 공학적 지식이 개발자들을 도울 수 있도록 함

 

 

 

 

 

  1. 소프트웨어 공학 : 1986년 독일에서 개최된 NATO Conference에서 소프트웨어 공학이라는 말이 처음 제안 [본문으로]

+ Recent posts