CS/소프트웨어개발방법론 29

객체지향 설계와 원리

객체와 클래스 - 객체는 독립적으로 존재하는 실세계의 사물 (Ex-학생, 물건, 도시) - 클래스는 유사한 객체들의 모임 - 클래스(학생) 내의 객체들은 같은 속성(학번, 전공, 성적)을 가지고, 고유한 속성값(김영희: 13학번,컴공,4.3, 이영철:14학번,경영,4.2)을 가진다 캡슐화(encapsulation) - 모듈별로 정보은닉을 하여 모듈간의 독립성을 보장해주는것 - 단위 모듈의 처리 완전성을 높히고 타 모듈과의 종속성을 최소화 - 이를 통해 이해하기 쉽고, 수정이 쉬운 소프트웨어 개발 가능 상속(inheritance) - 클래스를 계층화하고 상위 클래스의 속성과 기능을 하위클래스에서 사용할 수 있게 하는것 - 높은 수준의 코드 재활용성을 제공 다형성(polymorphism) - 동일한 이름이라..

소프트웨어 세가지 관점

기능 관점 - 소프트웨어가 어떠한 기능을 수행하는가 관점에서 시스템을 기술 - 유스케이스 다이어그램 : 행위자가 어떤 용도로 시스템을 사용하는가를 나타내는 사용 예. 사건의 흐름과 과정대로 시나리오를 작성. - 예시 정보 관점 - 소프트웨어의 정적인 정보구조를 포착하는 경우 사용 - 시스템에 사용되는 정보 객체를 찾아내고 객체의 툭성, 객체 사이의 관계와 연관성 규명 동적 관점 - 소프트웨어 동작과 제어에 초점을 맞추어, 시스템의 상태와 상태가 변하는 사건과 시간들을 묘사 - 예시

소프트웨어 아키텍처 스타일

저장소 구조 - 한 서브시스템에서 데이터를 생성하고, 다른 서브시스템에서 데이터를 사용하는 경우, 모든 공유데이터를 한곳에 보관하여 모든 서브 시스템들이 데이터를 공유할 수 있도록 만든 구조 - 중앙자료구조와 독립된 컴포넌트로 구성된 아케틱쳐, 컴포넌트간의 통신은 이뤄지지 않는다. - 그림 MVC(Model-View-Controller)구조 - 모델(Model) : 애플리케이션의 핵심 기능을 포함, 상태 변화시 컨트롤러와 뷰에 전달 - 뷰(View) : 결과물 생성을 위해 모델로 부터 정보를 수신 - 컨트롤러(Controller) : 사용자로부터 입력을 받아 모델과 뷰에 명령을 전달 클라이언트 - 서버 모델 - 클라이언트 : 서비스를 요구, 서버 : 서비스를 제공 - 분산시스템으로 구현, 네트워크 시스..

모듈 독립성의 평가 (응집도(cohesion), 결합도(coupling))

응집도(cohesion) - 모듈 내부가 얼마나 강한 연관성으로 뭉쳐져 있는가를 나타내는 모듈 성숙도의 측정치 - 모듈 내의 각 구성요소들이 공통의 목적을 달성하기 위해 서로 얼마나 관련있는지 연관정도를 나타냄 - 모든 요소들이 단일 기능을 수행하고, 그 상위 모듈을 위해 수행되는 기능적 응집도가 가장 높은 응집도이며 아무 관련없는 처리요소들로 모듈이 형성되는 우연적 응집도가 가장 낮은 응집도 - 하나의 논리적 기능을 수행하거나 하나의 논리적 엔티티를 나타내는 것이 바람직하다. 결합도(coupling) - 모듈 사이의 상호 연관성의 복잡도를 의미 - 모듈간의 상호 교루가 많고, 의존이 많을수록 결합도가 높아진다 - 인터페이스가 정확히 설정되어 있지 않거나, 기능이 정확히 나누어져 있지 않을 때 불필요..

소프트웨어 설계 원리

추상화(abstraction) - 상세한 수준의 구현 고민이 아닌, 상위수준에서 제품의 구현을 먼저 생각하는것(필수적인 것만). - data 추상화, control 추상화, procedure 추상화로 나뉨. - 시스템을 분할하여 컴포넌트가 어떻게 상호작용 하는지, 컴포넌트의 구현 방법을 생략하고, 외부 인터페이스에 초점을 맞추는 것이 추상화의 개념 - ex) print()라는 함수가 있을 때, print함수의 내부 구조 및 내부적인 동작과정을 생각하지 않고, print()함수가 "출력함수이다" 라고 이해하는 것. 정보은닉(information hiding) - 각 모듈의 내부 내용을 감추고, 인터페이스를 통해서 메세지를 전달할 수 있도록 하는 개념 - 내부 정보 접근을 제한하여 한 모듈이 다른 모듈의 구..

순차자료구조, 연결자료구조

순차자료구조 연결자료구조 메모리 저장 방식 메모리 저장 시작위치부터 빈자리 없이 자료를 순서대로 연속적으로 저장하는 방식 메모리에 저장된 물리적 위치나 순서에 상관없이 링크에 의해 논리적인 순서를 표현하는 방식 논리/물리 순서 일치 여부 논리적인 순서와 물리적인 순서가 일치하는 방식 논리적인 순서와 물리적인 순서가 일치하지 않음 삽입, 삭제 삽입, 삭제 시 연속적인 물리주소를 유지하기 위해 원소들을 이동, 오버헤드 발생 삽입 삭제되어도 물리적인 순서는 변경되지 않음 탐색 데이터 탐색시 즉각적으로 접근 가능 데이터 탐색시 O(n)의 복잡도를 가짐 프로그램기법 배열(동적배열, 정적배열) 포인터

역공학(reverse engineering)

역공학의 정의 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일. 시스템을 이해하여 수정하는 소프트웨어 유지보수 단계에 수행하는 일련의 활동. 소프트웨어 생명주기의 마지막 단계에서 얻어지는 프로그램 또는 문서 등을 이용하여 생명주기 초기 단계의 산출물에 해당하는 정보 또는 문서를 만들어 내는일. 리버스 엔지니어링 input : 원시코드, 목적코드, 라이브러리, 문서 output : 구조도, 자료 흐름도, 제어 흐름 그래프, 개체 관계도 역공학이 필요한 경우 - 기 가동중인 시스템의 유지보수가 어려운 경우 - 변경이 빈번하여 시스템 효율이 저하된 경우 - 파일 시스템으로 개발된 업무를 관계형 데이터베이스로 재구축 하려는 경우 - 기본 메인 프레임을 다운 사이징 하는 ..

소프트웨어 재사용

소프트웨어 재사용 - 기존의 소프트웨어 또는 지식을 이용하여 새로운 소프트웨어를 구축하는 일 - 설계, 요구명세, 검사, 아키텍쳐 등도 포함. 소프트웨어 재사용의 목적 - 신뢰성 : 기능, 안정, 속도 등의 사전 상능 검증 - 확장성 : 검증된 기능 기반으로 upgrade 용이 - 생산성 : 비용, 시간, 위험 등 전체적 개발 프로세스 향상 소프트웨어 재사용의 대상 1. 일반적 지식 - 환경정보 : 교육 및 활용을 통해 얻어진 지식 - 외부지식 : 개발 및 특정분야의 참여를 통해 얻은 지식 2. 설계 정보 - 기본설계 - 상세설계 3. 데이터정보 - 시스템 데이터 - 시험사례 4. 프로그램 코드 - 모듈 - 프로그램 소프트웨어 재사용의 원칙 1. 범용성 : 특정 응용분야만이 아닌 일반적으로 활용될..

소프트웨어 개발 방법론 (구조적방법론 정보공학적방법론 객체지향방법론 CBD방법론)

1. 구조적 방법론 - 기능중심의 방법론 - 업무활동 중심의 방법론 - 프로그램 로직 중심 - ex) 파일을 불러오는 프로그램을 만들때 -> 파일을 가져오는 기능을 중심으로 프로그램 구현 2. 정보공학 방법론 - 데이터 중심의 방법론 - ex) 파일을 불러오는 프로그램을 만들때 -> ppt, excel, 등 데이터의 타입별로 프로그램 구현 3. 객체지향 방법론 - 객체, 클래스간의 관계를 식별하여 구현 - 프로그램 단위는 객체 - 주요 지원언어 : c++, java 4. CBD방법론 - 컴포넌트 중심의 개발 방법론 - 인터페이스 중시 * 인터페이스 : 사용자와 시스템가 맞닿는, 혹은 그 둘을 연결시켜주는 면으로써, 두개의 다른 데이터 타입을 연결시켜주는 것 - 객체방법론의 진화 - 주요 산출물 : 유스..

소프트웨어 개발 생명주기

1. 폭포수 모델 - 단계적 개발 방법론 2. 프로토타이핑 모델 - 요구분석 단계에서 나온 주요 요구사항을 바탕으로 프로토타입 설계 3. V모델 - 프로젝트 적용 관리 용이하다 - 프로젝터의 검증 및 확인을 강조한 모델. - 개발활동과 테스트 활동이 어떻게 연관되어 있는지 잘 설명, 전체 개발 주기동안 개별 활동과 이에 해당하는 테스트 활동이 병행 4. VP모델 - v모델에 프로토타이핑 기법을 추가, 프로젝트의 불확실성 요소, 리스크를 줄일 수 있음 5. 점증적 모델 - 고객이 원하는 날짜에 모든 기능을 가진 시스템 구현이 어려울때, 핵심 부분만 먼저 개발하여 동작하게 한 후, 나머지를 구현하는 방식 - 몇번의 확장을 통해 개발됨. - 각 단계의 버전은 몇 가지 제한된 기능에 한하여 동작, 추후 시스템 ..

소프트웨어 공학의 4가지 중요요소

1. 사람 - 사람과 조직에 의해 움직이므로 사람에 대한 의존성이 크다 - 다른 공학보다 다양한 이슈가 생기므로 소프트웨어 개발을 일목요연하게 정리하는것은 불가능 2. 도구 - 어떤일을 수행할 때 일관성을 목적으로 사용하는 방법이나 자동화 반자동화 시켜 놓는것을 말함 - 모델링, 형상관리, 요구관리 등 다양한 도구 존재 3. 방법 - 계획수립, 추정, 소프트웨어분석, 자료구조, 프로그램구조, 알고리즘, 코딩, 테스팅 등으로 구성 - 소프트웨어 품질에 대한 평가기준 도입 4. 절차 - 방법과 도구를 결합하여 소프트웨어를 합리적으로 적시에 개발할 수 있도록 하는것 - 진행을 평가해주는 마일스톤 등의 순서를 정의