본문 바로가기

IT개념/소프트웨어공학

[소프트웨어 공학]1-1. 소프트웨어 개념과 공학 소개

728x90

소프트웨어의 정의 및 특징

소프트웨어가 사용되는 곳

  • 컴퓨터를 작동시키는 프로그램으로 하드웨어의 동작을 제어하는 수많은 명령어로 구성
  • 하드웨어를 이용해 데이터를 처리하고 정보를 제공하여 여러 응용분야의 업무를 자동화함
  • 컴퓨터 외에도 다양한 장비와 장치에서 사용됨

소프트웨어(software)란?

  • 프로그램 + 프로그램 개발, 운영, 보수에 필요한 정보 일체
  • 프로그램, 자료구조, 문서를 총칭
프로그램 산술, 논리적인 계산을 신속하게 처리하기 위한 명령어들과 데이터들의 집합
자료구조 자료의 형성 과정에서 컴퓨터 기억 장치 안에 자료 표현이나 처리 방법 등을 분석, 연구 등 데이터의 관계 처리 알고리즘 등
문서 각 단계마다 생산되는 문서, 메뉴얼, 계획서, 평가서, 분석서 등..

소프트웨어의 특징

  • 논리성(비가시성): 보이지 않는 것의 표현, 디스크에 저장은 되지만 코드로 숨겨짐
  • 개발성: 제조되거나 생산되지 않고 논리적으로 짜여짐
  • 비마모성: 논리적이므로 사용에 의해 마모되거나 소멸되지 않음
  • 유연성: 요구나 환경의 변화에 따라 적절히 변형될 수 있음, 문자로 구성된 프로그램이므로 쉽게 변경할 수 있고 개발 과정이 자주 변경됨
  • 상품성: 개발되어 판매됨
  • 견고성: 일부 수정은 전체 영향을 줄 수 있음
  • 비정형적: 규칙적이고 정형적인 구조가 없음

소프트웨어의 분류

  • 관리 소프트웨어: 자료를 받아들여 정보를 제공, 주로 DB를 통해 제공됨
    (인터넷 뱅킹, 종합정보 시스템, 예약 시스템)
  • 제어 소프트웨어: 각종 센서를 이용하거나 기기들의 동작을 제어
    (교통 신호 제어, 의료기기 제어, 공장장비 제어 등)
  • 임베디드 소프트웨어: 장비나 기기에 내장된 소프트웨어
    (가전제품 내 소프트웨어, 공정제어 소프트웨어)
  • 패키지 소프트웨어: 패키지화 하여 상업적으로 판매되는 소프트웨어
    (오피스, 주문 관리, 회계 관리)
  • 주문형 소프트웨어: 특정 기업, 고객의 요구를 위해 제작한 소프트웨어
    (웹 사이트)

정보처리에 따른 분류

일괄 처리

  • 자료를 일정 기간 모았다가 한번에 처리하는 방법
  • 급여 계산, 통계 처리

온라인 처리

  • 단말기와 원격 컴퓨터가 통신 회선을 통해 자료를 처리하는 방식
  • 은행업무, 항공사좌석 예약관리 시스템, 백화점의 거래 처리 시스템

실시간 처리

  • 처리 결과를 사용자 원하는 시간 내에 받아 볼 수 있는 방식
  • 전화 교환 시스템, 공장 자동 제어 시스템, 은행 안전 감시 시스템, 항공 관제 시스템

위상에 따른 분류

응용 소프트웨어

  • 사용자의 목적에 따라 개발된 소프트웨어
  • 업무 관리, 급여 계산, 회원 관리

시스템 소프트웨어

  • 응용 프로그램을 지원하기 위해 개발된 소프트웨어로 하드웨어 측면이 강함
  • 운영체제, 유틸리티

기능에 따른 분류

  1. 계산 중심 기능
  • 소프트웨어 기능이 수학, 통계적 처리에 중점으로 개발됨
  • 엑셀, SPSS
  1. 정보처리 중심
  • 데이터의 가공을 통해 정보를 얻기 위한 소프트웨어
  • 업무용 소프트웨어, 워드프로세서, dBASE 등
  1. 절차 중심
  • 일괄 처리, 실시간 처리 처럼 자료 가공보다는 사용자 문제 영역이 제한된 시간 내 처리되는것에 중점된 소프트웨어
  1. 인공지능
  • 비 수치적인 알고리즘을 이용해 계산이나 분석이 용이하지 않는 지문 인식, 로봇 등 아직은 연구대상인 소프트웨어

개발 목적에 따른 분류

프로토 타입

  • 개발된 소프트웨어의 일부를 미리 제작하여 사용자 요구를 받아들일 수 있도록 함

프로젝트

  • 주문형 소프트웨어로 단일 사용자를 대상으로 개발
  • 업무용, 급여관리, 직원관리 프로그램 등

프로덕트

  • 상품형 소프트웨어로 다수를 위해 개발됨
  • 엑셀, 오피스 등


소프트웨어 개발의 문제점

소프트웨어와 하드웨어의 비교

  1. 제조가 아닌 개발이다.

제조: 정해진 틀에 맞춰 일정하게 생산, 많은 인력이 필요하고 능력별 결과물 차이가 근소함

개발: 개인 능력별 결과물 차이가 매우 큼

  1. 소모가 아닌 품질 저하

H/W: 오래 사용하면 부품이 닳고 고장나며 기능이 떨어짐

S/W: 오래 사용해도 닳지 않음


하드웨어 실패 곡선

하드웨어 고장률 곡선 → 시간 흐름에 따른 하드웨어는 실패곡선

  1. 초기 실패율 높음
  2. 오류 해결
  3. 오랜 기간 동안 사용
  4. 주변 환경 문제 발생(먼지, 진동)
  5. 다시 실패율 증가

이상적인 소프트웨어 실패 곡선

  • 하드웨어는 주변환경으로 고장이 잦음
  • 소프트웨어는 시간에 따른 고장 빈도가 올라가지 않음
  • 개발 완료 후 변경 사항과 환경 변화가 없어야 함 (오래 사용 가능)
  1. 초기 실패율 높음
  2. 오류 해결
  3. 오랜 기간 동안 사용
  4. ~게속 사용

실제 소프트웨어 실패 곡선

  • 시작단계부터 사용자 요구가 계속 발생
  • 운영체제 등 설치 환경이 달라질 수 있음
  • 사용자의 요구를 모아 시스템에 반영
  1. 초기 실패율 높음
  2. 오류 해결
  3. 실패율 낮아짐
  4. 변경 발생
  5. 부작용
  6. 실패율 증가
  7. 4번으로 환류

품질 좋은 소프트웨어

관점에 따라 다름

  • 고객: 비즈니스 관련된 문제를 적절한 비용과 자원으로 해결함
  • 개발자: 설계 및 유지보수, 재사용이 쉬움
  • 사용자: 사용하기 쉬움, 효율적으로 사용가능, 업무기능 향상
  • 개발 관리자: 매출 신장, 개발과 유지보수 작업 비용을 줄여 소비자를 비싸게 함

구비조건

  1. 사용자 요구가 정확히 반영되어야 함
  2. 적정한 개발 비용이 산정되어야 함
  3. 잠재적 오류가 최소화되어야 함
  4. 안전성이 있어야 함
  5. 효율성이 있어야함
  6. 문서화가 되어야 함
  7. 사용이 용히해야함 (전문가, 초보자 등 사용자에 맞게 적합하게 개발)
  8. 객관성이 있어야 함(누구나 알아볼 수 있게)

소프트웨어 개발의 문제점

소프트웨어 개발의 느린 발전 속도

  • H/W의 발전: PC 및 스마트폰의 발전 속도
  • S/W 발전 속도: DOS ~ Window10
  • 하드웨어의 속도를 따라가지 못해 사용자 요구사항을 감당할 수 없음

새로운 소프트웨어에 대한 사용자 요구 증가

  • S/W 속도가 못따라감
  • H/W와 S/W 개발 방법의 근본적인 차이 때문
  • H/W: 검증받은 부품을 조립하는 형태의 생산
  • S/W: 처음부터 만들어가는 개발 형태
  • 해결 방안: CBD개발 방법론

관리 기술의 부분적 활용

  • S/W 개발에도 관리가 필요: 비용 관리, 일정 관리, 개발자 관리
  • PMBOK(프로젝트 관리지식체계)를 활용한 프로젝트 관리 기술 필요

결론

  1. 소프트웨어 규모가 커지며 복잡해짐 → 개발비용 증대
  2. 유지 보수 비용 증대
  3. 개발 인력 부재로 인건비 상승
  4. 개발 기간 지연 및 하드웨어 가격을 초과하는 소프트웨어 개발 비용 증가

소프트웨어 개발 규모에 따른 어려움

  • 개발 과정이 복잡함
  • 참여 인력이 많다. (의사소통에 문제가 많음)
  • 개발 기간이 길다

소프트웨어 개발 작업

  1. 명세화: 기능, 원가, 위험, 일정, 제약사항 포함
  2. 설계: 명세를 여건에 맞계 설계
  3. 코딩: 언어로 변환
  4. 검증: 고객 의도와 일치하는지 확인
  5. 유지보수: 결함이 있다면 수정, 요구 변화에 수정

소프트웨어 개발 작업의 어려움

  1. 명세화의 어려움 (사용 전까지 필요한 것을 정의하기 어려움)
  2. 재사용의 어려움 (미리 사용할 부품을 만들기 어려움)
  3. 예측의 어려움
  4. 유지보수의 어려움 (타인이 만든 것을 이해하기 어렵고 고치기 힘듬)
  5. 고품질의 어려움