정보관리기술/소프트웨어공학

소프트웨어와 소프트웨어 공학

아이티신비 2024. 1. 5. 08:30

문제1) 다음의 개념에 대하여 설명하시오.

 

가. 소프트웨어의 주요 특성과 공학의 발전 원리

나. 소프트웨어 공학이 다루는 주제와 그 목표

다. 좋은 소프트웨어의 조건들과 개발에 영향을 미치는 요인들

 

답)

 

 

1. 소프트웨어의 주요 특성과 공학의 발전 원리

가. 소프트웨어의 주요 특성(Brooks, 1871)

특성
설명
비가시성(Invisibility)
  • 소프트웨어의 생산물 구조가 외부에 노출되지 않고 코드에 내재되어 있음
복잡성
(Complexity)
  • 정형적 구조가 없어 개발과정이 복잡하고 전산화 대상 업무, 소프트웨어 시스템 자체가 난해함
  • 비규칙적, 비정규적
유연성
(Changeability)
  • 필요에 따라 항상 수정이 가능(진화성), 수학이나 물리학에서 볼 수 있는 규칙적이고 정형적인 구조가 없음
  • 요구나 환경의 변화에 따라 적절히 변경
무형
(Intangible)
  • 매우 중요하나 사실 형체가 없는 무형성 때문에 FP(Function Point) 등으로 유형화하려는 노력
장수
(Longevity)
  • 소프트웨어는 외부의 환경에 의해서 마모되는 것이 나니라 품질이 나빠지는 것(비마모성)
복제 가능
(Duplicability)
  • 소프트웨어는 간단하고 쉬운 방법으로 복제 가능, 다양한 경로와 노력으로 복제가 가능
  • 시스템 대규모화에 따라 소프트웨어의 신뢰성 저하, 개발비의 증대, 계획의 지연 등의 현상이 현저히 발생하여 소프트웨어 위기 발생

 

나. 소프트웨어 공학의 발전 원리

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

 

2. 소프트웨어 공학이 다루는 주제와 그 목표

가. 소프트웨어 공학이 다루는 주제

주제
의미
사례
방법 (Method)
  • 소프트웨어 제작에 사용하는 기법이나 절차
  • 구조적 분석, 설계 방법, 객체지향 분석, 설계 방법
도구 (Tool)
  • 자동화된 시스템
  • 설계도구
  • 프로그래밍 도구
  • 테스트 도구
프로세스 (Process)
  • 도구와 기법을 사용하여 작업하는 순서
  • Unified Process
  • eXtreme Programming
페러다임 (Paradigm)
  • 접근방법, 스타일
  • 구조적 방법론
  • 객체지향 방법론
  • 소프트웨어 공학의 적용을 통해 QCD(Quality, Cost, Delivery)의 만족을 목표로 함

 

 

나. 소프트웨어 공학의 목표

목표
필요 기법
고품질(Quality) 소프트웨어의 생산
요구사항 관리, 품질관리
사용자 만족도 증진
요구사항 관리, 품질관리
정해진 비용, 기간, 자원으로 소프트웨어 생산
정해진 비용, 기간, 자원으로 소프트웨어 생산
소프트웨어 생산 프로세스 수행능력 개선
요구사항 관리, 적정한 SDLC
생산성(Productivity) 향상
요구사항 관리, 부품화, 모듈화, 패턴화 기법
  • 소프트웨어 공학의 목표는 좋은 품질과 생산성의 향상에 있음

 

3. 좋은 소프트웨어의 조건들과 개발에 영향을 미치는 요인들

가. 좋은 소프트웨어의 조건들

좋은 소프트웨어 조건
설명
정확성(Corretness)
  • 기능적으로 맞게 동작하는가, 표준에 적합한가
  • 요구 분석서의 기능과 일치하는지 점검
신뢰성(Reliability)
  • 소프트웨어가 주어진 기간 동안 바르게 작동할 확률
  • 오류 발생 확률에 반비례
  • 정확성 제공하기 위한 필요조건
강인성(Robustness)
  • 요구 명세에 표시하지 않는 상황(오류 입력)에서도 제대로 작동하는 성질
성능(Performance)
  • 수행 속도, 데이터/트랜잭션 처리량
  • 알고리즘의 시간 복잡도
  • 시뮬레이션, 스트레스 테스트
사용 용이성(Usability)
  • 시스템을 친근하게 느낄 수 있는 성질
  • 사용 대상에 따라 달라질 수 있음
  • 사용자 인터페이스, Human Factor
유지 보수성(Maintainability)
  • 보수성 : 정해진 기간에 소프트웨어 결함을 해결할 수 있는 성질
  • 진화성 : 잠재적 발전 가능성(추가 요구사항에 따라 기능이 진화할 수 있어야 함)
재사용성(Reusability)
  • 소프트웨어 부품(라이브러리, 클래스 등)의 성질
  • 확장 가능성(Openness)
  • 적응성(Adaptbility)
  • 이용 용이성(Closeness)
  • 좋은 소프트웨어는 '사용자의 요구사항을 만족'하고 '정확하게 동작'하며 '쉬운 사용방법'과 '좋은 코드'로 개발된 소프트웨어임

 

나. 좋은 소프트웨어의 개발에 영향을 미치는 요인들

구분
영향 요인
설명
관리 측면
프로젝트 관리 기술
  • 소프트웨어 개발 관리(프로그래밍 경험, 관리 능력)
  • 소프트웨어 프로세스 관리(일정, 예산, 인력, 형상, 품질 관리 등)
  • CMM(Capability Maturity Model) 모델
  • 소프트웨어 품질 관리(Quality Aassurance)
프로젝트의 성격
  • 응용분야에 따라 성격이 달라짐(자료처리 중심, 제어중심, 시스템 소프트웨어, 인공지능)
  • 크기, 복잡도(소규모, 중규모, 대규모, 초대규모)
인력 측면
의사소통(Communication skill)
  • 발주자는 컴퓨터 및 소프트웨어에 대한 지식이 부족하고, 개발자는 발주자의 전문 분야에 대한 지식이 부족(인터뷰 기술, 프로토타입)
  • 요구 취합 방법(설문지, 유저 그룹, 워크숍 등)
  • 정형적 방법
프로그래머의 역량
(Maturity)
  • (미숙한 프로그래머가 작성한 모듈은) 전체 품질이나 일정에 영향
  • 프로그래머의 능력(프로그래밍, 커뮤니케이션, 응용분야에 대한 이해, 프로세스/도구에 대한 이해와 경험)
  • 소프트웨어 공학의 체계적이고 조직적인 접근법을 통하여 일정 부분 상쇄가 가능

 

 

4. 좋은 소프트웨어 개발을 위한 제언

  • 다양한 공학적 기법과 방법론, 관리체계를 기반으로 표준화를 통한 일관성과 호환성을 확보하고 자동화 툴을 사용하여 생산성 향상을 꾀하며 개발수명기간 품질보증체계를 적용하여 개발초기부터 고품질 소프트웨어를 생산하도록 촉진하여 소프트웨어 위기라는 문제에 근본적 대응 필요