본문 바로가기
CS/운영체제

[소프트웨어 공학] 소프트웨어 공학이란?

by merona99 2021. 10. 16.
반응형

소프트웨어 공학이란?

 

 

모든 사물과 사람이 서로 연결되어 정보를 생성  -> SW가 중요한 사회

 

프로그래밍 언어: 소프트웨어 개발 과정에서 구현 부분 담당

 

 

프로젝트: 어떤 목표를 위해서 여러 사람이 팀을 이루어 소프트웨어 및 하드웨어로써 정해진 기간에 그 목표를 달성하는 일련의 과정

 

모듈 (Module) 모듈화 프로그래밍
▪ 프로그램을 구성하는 구성 요소
▪ 관련된 데이터와 함수들의 묶음
▪ 기능별로 나뉘어지는 프로그램 (코드 분할)
▪ 소프트웨어를 기능별로 파일로 나눠가며 프로그래밍
▪ 유지보수가 좋아짐
▪ 프로그램 수정시 빌드(Build)가 빨라짐

 

 

[단일 vs 다중 모듈화]

 

하드웨어: 컴퓨터를 구성하고 있는 전자회로 및 각종 장치 (입력, 출력, CPU(연산,제어), 기억)

소프트웨어: 하드웨어에게 입력을 정보로 바꾸도록 해주는 일련의 일처리 순서 집합

 

[소프트웨어]

협의의 정의 Pressman 정의
▪ 하드웨어를 동작시켜서 정보를 만들 수 있도록 하는 순서와 ▪ 방법을 지시하는 명령어의 집합인 프로그램 ▪ 실행할 때 원하는 기능과 성능을 제공해 주는 명령어들 (컴퓨터 프로그램)
▪ 프로그램이 정보를 적합하게 조작하도록 도와주는 자료구조
▪ 프로그램의 운영과 사용을 설명해 주는 문서

 

 

[좋은 소프트웨어 조건]

  • 유지보수 용이성
  • 사용자를 만족해야 함 -> (but 모든 요구를 만족시키는 완벽한 시스템을 얻기는 어려움)
  • 소프트웨어를 구성하는 서브 시스템들이 제대로 작동되어야 함
  • 제품에 대한 신뢰도 등
  • 고장 허용과 정보의 기밀 유지

 

 

[소프트웨어의 종류]

 

 

소프트웨어 제품 생애주기: 신제품이 시장에 도입하면 그 판매량과 이익이 일정한 패턴을 따라서 증가하였다가 안정된 후, 감소하기 시작해서 사라짐

 

 

[소프트웨어 위기]

  • 유능한 프로그래머에 의존
  • 소프트웨어가 점점 복잡해지고 규모가 큰 소프트웨어를 제작할 필요가 있음
  • 해결방법 -> 소프트웨어 공학

 

 

[소프트웨어 공학]

  • 공학적 원리를 적용
  • 1968년 NATO에서 처음 사용
소프트웨어 공학 목표 ▪ 제한된 비용과 자원의 테두리 안에서 우수한 품질의 소프트웨어를 정해진 기간 내에 생산
▪ 품질과 생산성
정의 ▪ 소프트웨어 개발의 모든 단계에서 보다 체계적인 방법과 순서를 적용하여 이러한 목표를 이루고자 하는 공학적 접근
▪ 질 좋은 소프트웨어를 경제적으로 생산하기 위하여 공학, 과학 및 수학적 원리와 방법을 적용하는 것 - Watts Humphrey, SEI
▪ 소프트웨어의 개발, 운용, 유지보수 및 소멸에 대한 체계적인 접근 방법 - IEEE Computer Society
▪ 품질, 효율, 비용, 인정에 관한 공학적인 접근 원리 - F.Brooks

 

[소프트웨어 품질]

품질의 정의 ▪ 제품이나 서비스가 가지고 있는 명시적 또는 묵시적 요구를 만족시키는 능력에 관한 특성 및 특징의 전체
▪ 목적에 대한 적합성
▪ 요구사항에 일치
품질의 목표 ▪ 무결함
▪ 시정보다는 예방에 중점을 두는 시스템을 추구
품질 측정 ▪ 품질 확보 또는 유지에 필요한 자원 투입량

 

[소프트웨어 품질 특성]

  • 기능성 - 완전성, 정확상, 보완성, 호환성, 접속성
  • 신뢰성 - 무결합성, 에러허용성, 가용성
  • 사용성 - 이해성, 배움의 용이성, 조작성, 대화성
  • 효율성 - 시간경제성, 자원경제성
  • 보수성 - 수정용이성, 확장성, 테스트 용이성
  • 이식성 - 하드웨어 독립성, 소프트웨어 독립성, 도입용이성, 재이용성

 

 

[소프트웨어 생산성]

  • 생상과정(process)에 크게 영향 - Process improvement
  • 개발 경험의 성숙도에 의해 좌우 - CMM(Capability Maturity Model): Level 1~5 
  • 생산성에 영향을 미치는 요소 - 프로그래머의 능력, 팀 의사 전달, 제품의 복잡도, 기술 수준, 관리 기술

 

 

 

분야 의미 사례 요리 비유
방법(method) ▪ 소프트웨어 제작에 사용하는 기법이나 절차 ▪ 구조적 분석, 설계 방법
▪ 객체지향 분석, 설계방법
▪ 익히는 방법
(구이, 찜, 훈제 등)
도구(tool) ▪ 자동화된 시스템 ▪ 설계 도구
▪ 프로그래밍 도구
▪ 테스트 도구
▪ 요리 도구
(프라이팬, 압력 솥, 오븐 등)
프로세스(process) ▪ 도구와 기법을 사용하여 작업하는 순서 ▪ Unified Process Extreme Programming ▪ 조리 순서(recipe)
패러다임(paradigm) ▪ 접근 방법, 스타일 ▪ 구조적 방법론
▪ 객체지향 방법론
▪ 음식 스타일
(한식, 일식, 중식, 퓨전 등)

 

방법(Method)

  • 어떤 결과를 생성하기 위해 적용하는 기법과 절차
  • 소프트웨어 설계, 프로그래밍, 테스트, 유지보수 작업을 효과적으로 할 수 있는 방법을 연구
  • 작업과정과 밀접한 관계 가짐

 

도구(Tool)

  • 더 좋은 방법으로 작업하기 위한 기구 또는 자동화된 시스템
  • 분석도구, 설계도구, 프로그래밍 도구, 테스트 도구, 프로젝트 관리 도구 등
  • CAD(Computer Aided Design) 등
  • 사용만으로 품질 좋은 소프트웨어 보장 못함

 

프로세스(Process)

  • 소프트웨어 만드는 과정의 활동을 정의
  • 소프트웨어 개발, 운영, 유지보수 등의 활동을 정의
  • 활동과 작업으로 됨
  • CMM(Capability Maturity Model)
  • ISO 15504(SPICE)

 

패러다임(Paradigm)

  • 소프트웨어를 구축하기 위한 특별한 접근법이나 철학
  • 개발 스타일
  • 객체지향 방법
  • 구조적 방법

 

 


 

 

// 소프트웨어 공학 1주차

 

반응형

댓글