반응형
소프트웨어 공학이란?
모든 사물과 사람이 서로 연결되어 정보를 생성 -> 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주차
반응형
'CS > 운영체제' 카테고리의 다른 글
[면접을 위한 CS 전공지식 노트] 운영체제 (0) | 2023.07.28 |
---|---|
[쉘 스크립트] 기초_변수_테스트문 (0) | 2021.10.24 |
[쉘 스크립트] 기초 (0) | 2021.10.14 |
[소프트웨어의 역사] 유닉스 vs 리눅스 (0) | 2021.10.14 |
[리눅스] 명령어 (검색, 비교) (0) | 2021.10.14 |
댓글