정보처리기사_4과목 소프트웨어공학
* 소프트웨어
하드웨어를 동작시켜 사용자가 작업을 편리하게 수행하도록 하는 프로그램과 자료 구조 등을 총칭하며, 프로그램 자체뿐만 아니라 프로그램의 개발, 운용 및 유지 보수에 관련된 모든 문서와 정보를 포함
* 소프트웨어 공학
소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문
여러 가지 방법론과 도구, 관리 기법들을 통하여 소프트웨어의 품질과 생산성 향상을 목적으로 함
가장 경제적인 방법으로 양질의 제품을 생산하는 것
안정적이며 효율적으로 작동하는 소프트웨어를 생산하고, 유지보수 활동을 체계적이고 경제적으로 수행하기 위해 계층화 기술을 사용
- 소프트웨어의 위기
여러 원인에 의해 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못해 소프트웨어에 대한 사용자들의 요구사항을 처리할 수 없는 문제가 발생한 것
* 소프트웨어 생명 주기 모형 종류
- 폭포수 모형
- 프로토타입 모형
- 나선형 모형
* 프로젝트 관리
주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동
* 프로젝트 관리 대상
계획 관리 : 프로젝트 계획, 비용 산정, 일정 계획, 조직 계획
품질 관리 : 품질 통제, 품질 보증
위험 관리 : 위험 식별, 위험 분석 및 평가, 위험 관리 계획, 위험 감시 및 조치
* 효과적은 프로젝트 관리를 위한 3대 요소(3P)
People / Problem / Process
* 브룩스의 법칙
프로젝트 진행중에 새로운 인력을 투입할 경우 작업 적응 기간과 부작용으로 인해
일정을 더욱 지연시키고, 프로젝트에 혼란을 가져오게 된다는 법칙
* 위험 관리
프로젝트 추진 과정에서 예상되는 각종 돌발 상황(위험)을 미리 예상하고 이에 대한 적절한 대책을 수립하는 일련의 활동
* 형상 관리 SCM
소프트웨어 개발 과정에서 소프트웨어의 생산물을 확인하고 소프트웨어 통제, 변경 상태를 기록하고 보관하는 일련의 관리 작업
목적 : 소프트웨어 개발의 전체 비용 감소 / 개발 과정의 여러 문제점을 해결해 방해 요인을 최소화
* 결합도 Coupling
- 모듈 간에 상호 의존하는 정도
- 독립적인 모듈이 되기 위해서는 각 모듈 간의 결합도가 약해야 하며 의존하는 모듈이 적어야 함
* 응집도 Cohesion
- 모듈 안의 요소들이 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도
=> 결합도는 줄이고 응집도는 높여서 모듈의 독립성을 높여야 한다!!
* 객체지향 기법
- 현실 세계의 개체 Entity 를 기계의 부품처럼 하나의 객체 Object 로 만들어
기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때도 객체들을 조립해서 작성할 수 있도록 하는 기법
- 소프트웨어의 재사용 및 확장을 용이하게 함으로써 고품질의 소프트웨어를 빠르게 개발할 수 있으며 유지보수가 쉬움
객체
- 데이터 : 객체가 가지고 있는 정보. 속성이나 상태, 분류 등을 나타냄
- 함수 : 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
클래스
공통된 속성과 연산(행위)을 갖는 객체의 집합으로 객체의 일반적인 타입을 의미
각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀
클래스에 속하는 각각의 구체적인 객체를 인스턴스라고 함
메시지
갳체들 간에 상호작용을 하는 데 사용되는 수단으로 객체에게 어떤 행위를 하도록 지시하는 명령
캡슐화
데이터와 데이터를 처리하는 함수를 하나로 묶는 것
캡슐화된 객체들은 재사용 용이
인터페이스가 단순해지고 객체 간의 결합도가 낮아짐
정보 은닉
다른 객체에게 자신의 정보를 숨기고 연산만을 통해 접근을 허용
각 객체의 수정이 다른 객체에게 주는 Side Effect를 최소화 하는 기술
상속
이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
다중 상속
한 개의 클래스가 2개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것
추상화
객체의 속성 중 가장 중요한 것만 중점을 두어 개략화 하는 것, 즉 모델화
다형성
메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해
각 객체(클래스)가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
객체(클래스)들은 동일한 메소드명을 이용하여 같은 의미의 응답을 함
* 소프트웨어의 재사용
이미 개발된 인정받은 소프트웨어의 전체 혹은 일부분을 다른 소프트웨어 개발이나 유지에 사용하는 것
소프트웨어 개발의 품질과 생산성을 높이기 위한 방법
기조에 개발한 소프트웨어와 경험, 지식 등을 새로운 소프트웨어에 적용
- 재사용 가능 요소
소스 코드, 응용 분야에 관한 지식, 논리적인 데이터 모형, 프로세스 구조, 시험 계획, 설계에 관한 결정, 시스템 구조에 관한 지식, 요구 분석 사항, 문서화, 전문적인 기술과 개발 경험, 품질 보증, 응용 분야 지식 등
- 재사용의 이점
개발 시간과 비용 단축, 소프트웨어 품질 및 생산성 향상, 프로젝트 실패 위험 감소, 시스템 구축 방법에 대한 지식 공유, 시스템 명세, 설계, 코드 등 문서 공유
- 문제점
어떤 것을 재사용 할지 선정
시스템에 공통적으로 사용되는 요소 발견 필요
프로그램의 표준화가 부족
새로운 개발 방법론 도입 어려움
기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움
* 역공학 Reverse Engineering
- 기존 SW를 분석하여 SW 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어내는 작업
- 기존 코드를 복구하는 방법
* CASE
- 소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것
- 소프트웨어 생명 주기의 전체 단계를 연결해 주고 자동화해 주는 통합된 도구를 제공하는 기술
+
컴퓨터공학 : 기초적인 학문부터 하드웨어/소프트웨어를 총괄적으로 배우며 프로그램을 제작하는 프로그래밍 언어를 배움
소프트웨어공학 : 전반적으로 소프트웨어를 분석/제작하는 것을 배움
.... 흐엏