소프트웨어 공학 내용 정리(2)

안희수·2021년 3월 17일
0
post-custom-banner

서두

소프트웨어 공학 추가 정리

정보처리기사 내용이 개정 되었다고는 하지만
구)정보처리기사 내용과 비교해 보니
출판사와 저자의 차이일 뿐 내용은 크게 다르지 않아 추가적으로 정리한다

신)정보처리기사 의 내용은 영진 출판사 이고
구)정보처리기사 의 내용은 길벗 출판사 이며
출판사를 상업적으로 언급하는 것이 아님을 밝힌다


소프트웨어란?

소프트웨어의 특징

  • 상품성

    개발된 소프트웨어는 상품화 되어 판매된다

  • 견고성

    일부 수정으로 소프트웨어 전체에 영향을 미칠 수 있다

  • 복잡성

    개발 과정이 복잡하고 비표준화되어 이해와 관리가 어렵다

  • 순응성

    사용자의 요구나 환경 변화에 적절히 변경할 수 있다

  • 비가시성

    소프트웨어의 구조가 외관적으로 나타나지 않고 코드 속에 숨어있다

  • 비마모성

    사용에 의해 마모되거나 소멸되지 않는다

  • 비제조성

    하드웨어처럼 제작되지 않고 논리적인 절차의 맞게 개발된다

  • 비과학성

    소프트웨어 개발 자체는 수학적이거나 과학적인 것이 아니라
    조직, 인력, 시간, 비용, 절차 등이 중심이 된다


소프트웨어 와 시스템의 차이

  • 소프트웨어

    하드웨어를 동작시켜 사옹자가 작업을 퍈리하게 수행하도륵 하는
    프로그램과 자료 구조등을 총칭하며, 프로그램 자체뿐만 아니라
    프로그램 개발, 운용 및 유지보수에 관련된 모든 문서와 정보를 포함함

  • 시스템

    공통의 목적이나 목표를 달성하기 위하여
    여러 가지 상호 관련된 요소들을
    유기적으로 결합한 것으로
    구성 요소는 입력, 처리, 출력, 제어, 피드백으로 나눌 수 있다

    • 피드백 (Feedback)
      출력된 결과가 예정된 목표를 만족 시키지 못할 경우
      목표 달성을 위해 반복 처리하는 것

소프트웨어의 위기

  • 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해
    사용자들의 요구사항을 처리할 수 없는 문제가 발생

소프트웨어 위기의 원인과 결과

원인

  • 소프트웨어의 특성에 대한 이해 부족
  • 소프트웨어의 관리 부재
  • 프로그래밍에만 치중
  • 소프트웨어 개발 기술에 대한 교육 부족

결과

  • 개발 인력의 부족과 그로 인한 인건비 상승
  • 성능 및 신뢰성의 부족
  • 개발 기간의 지연 및 개발 비용의 증가
  • 유지보수가 어렵고 이에 따른 비용 증가
  • 소프트웨어의 생산성 저하, 소프트웨어의 품질 저하

소프트웨어 공학의 개념

  • 소프트웨어 공학 (SE, Software Engineering)
    소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문이며
    여러가지 방법론과 도구, 관리 기법들을 통하여
    소프트웨어의 품질과 생산성 향상을 목적으로 한다

IEEE 의소프트웨어 공학 표준 용어사전

소프트웨어의 개발, 운용, 유지보수, 폐기 처분에 대한
체계적인 접근방안

Fairley
지정된 비용과 기간 내에 소프트웨어를 체계적으로 생산하고
유지보수하는데 관련된 기술적이고 관리적인 원리
Boehm
과학적인 지식을 소프트웨어 설계와 제작에 응용하는 것이며
이를 개발, 운용, 유지보수 하는데 필요한 문서 작성 과정

  • 소프트웨어 공학 은 제품을 단지 생산하는 것이 아니라
    가장 경제적인 방법으로 양질의 제품을 생산하는 것이다

  • 소프트웨어 공학 은 안정적이고 효율적으로 작동하는
    소프트웨어를 생산하고 유지보수 활동을 체계적이고
    경제적으로 수행하기 위해 계층화 기술을 사용한다


소프트웨어 공학의 기본 원칙

  • 현대적인 프로그래밍 기술을 계속적으로 적용해야 한다
  • 개발된 소프트웨어의 품질이 유지되도록 지속적으로 검증해야 한다
  • 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록을 유지해야 한다

좋은 품질의 소프트웨어

  • 사용자가 요구하는 대로 동작해야 함
  • 하드웨어 자원을 효율적으로 이용해야 함
  • 일정 시간 내에 주어진 조건에 맞는 기능을 실행할 수 있어야 함
  • 처리 절차에 맞게 수행되어 정확하게 결과가 산출되어야 함
  • 소프트웨어의 개발, 유지보수 등이 초기 예상 비용 내 수행되어야 함
  • 적당한 사용자 인터페이스 제공으로 사용하기 편리해야 함
  • 유지보수가 용이해야 함
  • 가능한 잠재적인 에러가 적어야 함
  • 신뢰성이 높고 효율적이여야 함


소프트웨어의 생명 주기

1) 정의 단계

'무엇 (What)'을 처리하는 소프트웨어를 개발할 것인지 정의하는 단계`
관리자와 사용자가 가장 많이 참여하는 단계

  • 타당성 검토 단계
    개발할 소프트웨어가 법적, 경제적, 기술적으로 실현 가능성이 있는지 조사하는 단계

  • 개발 계획 단계
    소프트웨어 개발에 사용될 자원과 비용을 측정하는 단계

  • 요구사항 분석 단계
    사용자가 요구한 문제를 보다 상세하고 정확히 분석하는 단계

2) 개발 단계

'어떻게 (How)'의 초점을 두고 실제적으로 소프트웨어를 설계하는 단계

  • 설계 단계
    소프트웨어의 구조, 알고리즘, 자료 구조 등을 작성하는 단계로 에러가 가장 많이 발생하는 단계

  • 구현 단계
    설계 단계에서 작성된 문서를 기초로 하여 코딩하고 번역하는 단계

  • 테스트 단계
    구현된 소프트웨어에 내제되어 있는 오류를 찾는 단계

3) 유지보수 단계

소프트웨어를 직접 운용하며, 변경 (Change)에 초점을 두고 여러 환경 변화에 따라 소프트웨어를 적응 및 유지 시키는 단계로 시간과 비용이 가장 많이 투입되는 단계

profile
9년차 소프트웨어 개발자 (2024년 재 개편 예정입니다)
post-custom-banner

0개의 댓글