[정보처리기사]4단원 소프트웨어공학 오답노트
4단원 소프트웨어공학 오답노트
- 시스템
- 구성요소
- 입력
- 처리 : 입력된 데이터를 처리방법과 조건에따라 처리
- 출력
- 제어 : 처리과정이 올바르게 진행되는지 감독
- 피드백
- 상태 X
- 구성요소
- 프로젝트 관리 3P
- 사람 (Person)
- 문제 (Problem)
- 프로세스 (Process)
- 소프트웨어 개발에 필요한 전체적인 작업계획 및 Framework 구조를 고려
CPM (Critical Path Method)
대단위 계획의 조직적인 추진을 위해 자원의 제약하에 비용을 적게 사용하면서 최단시간 내 계획 완성을 위한 프로젝트 일정 방법
- 임계 경로(최장경로) (프로젝트 개발 기간을 결정) 제공
- 시작부터 완료까지 가장 오래걸릴 수 있는 길을 찾으면 됨
- 개별 작업에 대한 가장 근접한 시간 측정 기준이 됨
- 각 작업에 대한 시작시간 정의
- 작업에 필요한 소요기간을 예측
- 작업들 간 경계시간을 계산
- 작업간의 관계를 파악할 수 있게 함
- 정확한 시간예측 X
- 한 이정표에서 다른 이정표에 도달하려면 이전의 작업이 모두 완료되어야 함
- 각 작업 = 원형 노드
- 각 작업 이름과 소요기간을 표시
- 간선은 작업사이의 의존관계를 나타냄
- 프로젝트 내
- 작업이 수행되는 시간
- 작업 사이의 관계 파악가능
- 경영층의 과학적인 의사결정을 지원
- 효과적인 프로젝트 통제가 가능
- 막대그래프 X
- 임계 경로(최장경로) (프로젝트 개발 기간을 결정) 제공
- 브룩스(Brooks) 법칙
새로운 개발인력이
진행 중인 프로젝트에 투입될 경우
작업 적응 기간과 부작용
- 비용 산정 기법 (COCOMO 기법)
- LOC 기법
- 두명의 개발자가 5개월에 걸쳐 = (5x2)
- 10000 라인의 코드
- 10000 / (5x2)
- LOC 기법
- 분석
- 자료흐름도 (DFD, Data Flow Diagram)
- 버블차트 = 자료의 흐름을 기술하는 방법 (시간 흐름 개념 X)
- 제어의
순서
흐름은 알 수 있지만,제어
에 대한 정보는 X- 문제를 정확히 읽을 것 (순서 O 제어 X)
- 각각의 프로세스에 대하여
- 개발적인 상세화 및 계층화가 가능
- 최하위 단계 프로세스의
처리 절차를 기술
한 Mini-Spec
- 구조적 분석 기법에 이용
- 하향식 분석(Top-down Analysis)의 유용한 도구
- 표기법
- 프로세스 (Process) - 원 (ㅇ)
- 자료의 흐름 (Data Flow) - 화살표
- 자료 저장소 (Data Store) - 등호(=), 직선(평행선)
- 단말 (terminator) - 사각형 (ㅁ)
- 정형 기술 검토 (FTR)
- 목적
- 해당 요구사항과 일치하는 지 검증
- 기능과 로직에 오류가 있는지 확인
- 소프트웨어가 균일한 방식으로 개발
- 용이하게 관리
- 지침사항
- 제품 검토 집중
- 논쟁과 반박 제한
- 문제영역 명확표현
- 의제와 참가자의 수를 제한
- 사전준비 강요
- 체크리스트
- 자원, 시간, 일정 할당
- 재검토
- 적정 인력 투입 확인 X
- 목적
- 품질 평가 기준 항목
- 정확성 (Correctness)
- 신뢰성
- 효율성 (Effciency)
- 요구된 기능을 수행하기 위한 시스템 능력
- 필요한 자원의 소요 정도
- 무결성
- 사용용이성 (Usability)
- 유연성 (Flexibility)
- 새로운 요구사항에 접하여 쉽게 수정될 수 있는 시스템 능력
- 이식성 (Portability)
- 재사용성
- 상호 운용성
- 검토 회의 : 워크 스루(Walk-through)
- 소프트웨어의 품질을 검토하기 위한 기술적 검토 회의
- 제품 개발자가 주최
- 검토자료는 사전에 배포
- 오류의 조기 검출을 목적
- 오류의 문제 해결이 목적이 아님
- 인스펙션(Inspection)
위험 관리
프로젝트 추진 과정에서 예상되는 각종 돌발상황(위험)을 미리 예상 이에대한 적절한 대책을 수립하는 일련의 활동
- 위험요소
- 인력부족
- 예산관리
- 일정관리
- 사용자 요구변경
- 유지보수 X
- 소프트웨어 위험의 대표적 특성
불확실성
손실
- 위험요소
- 프로젝트 팀
- 분산형 팀
- 참여도와 만족도를 높이고 이직률을 낮게함
- 팀 구성원 각자가 서로의 일을 검토
- 구성원이 같이 책임
- 장기프로젝트에 적합
- 의사 결정 시간이 늦어질 수 있음
- 중앙집중형 팀 (= 책임 프로그래머 팀, Chief Programmer Team)
- 한명의 고급프로그래머
- 몇명의 중급 프로그래머
- 책임 프로그래머
- 요구분석 및 설계
- 판단
- 지시
- 배분
- 프로그래머 역할
- 코드 작성
- 테스트
- 디버깅
- 문서 작성
- 프로그램 사서 역할
- 프로그램 리스트
- 설계 문서
- 테스트 계획
- 보조 프로그래머
- 업무 지원
- 품질 보증 담당자 섭외
- 분산형 팀
- 정보시스템 개발 단계 중 프로그래밍 언어 선택시 고려사항
- 개발 정보시스템의 특성
- 사용자의 요구사항
- 컴파일러의 가용성
- 독창성 X
- 모듈화 평가 기준
- 결합도 줄임 = 독립성 높임 = 응집도 높임
- 결합도
- 의존하는 정도 (결합도가 약할수록 좋음)
- 두 모듈간의 상호작용
- 자스(잤으)니까 합격제외 공부는 나(내)처럼 (내려갈수록 점점 강해짐)
- 자료(데이터) 결합도
- 데이터에 대한 처리결과
- 제일 약하니까 제일 좋음
- 스탬프 결합도
- 자료 구조 공유 정도
- 제어 결합도
- 제어 신호 공유 정도
- 상위 모듈에게 권리 전도
- 외부 결합도
- 공통 결합도 (Common Coupling)
- 전역데이터 접근
- 내용 결합도 (Comtnet Coupling)
내부
기능 공유 정도- 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조
- 자료(데이터) 결합도
- 요구사항 분석 (Requirements Analysis)
- 사용자와의 면담
- 설문조사
- 각종 문서검토를 통해
- 사용자의 요구사항을 찾음
응집도 (Cohesion)
기엽고 순진한 교회오빠는 절은 시러 노우
- 요소들 간 기능적 연관도
독립적인 기능으로 정의
- 기능적 응집도 (Functional)
- 제일 강하니까 제일 좋음
- 순차적 응집도 (Sequential)
- 교환(통신)적 응집도 (Communication)
- 절차적 응집도 (Procedural)
- 시간적 응집도 (Temporal)
- 논리적 응집도 (Logical)
- 우연적 응집도 (Coincidental)
- 처리상 연관이 없는
- 서로 다른 기능을 수행하는 경우
- 화이트 박스 (White Box) 테스트
- 내부 작업 검사 (자료구조 X)
모듈
안의 작동을 직접관찰- 원시코드의 모든문장을 한번이상 수행
- 논리적 경로를 제어
- 설계 절차에 초점을 둔 구조적 테스트
- 기초 경로 검사 (Basic Path Test)
- 조건 검사 (Condition Test)
- 루프 검사 (Loop)
- 데이터 흐름 검사 (Data Flow)
- 럼바우의 방법
ODF
- 객체(Object) 모델링
- 객체들 간의 관계를 규정
- 동적(Dynamic) 모델링
동상
- 상태도 이용
- 기능(Functional) 모델링
기자
- 자료 흐름도
- 설계 순서
입자기제
- 입출력 결정 - 자료흐름도 작성 - 기능의 내용을 기술 - 제약사항을 결정하고 최소화
- 객체(Object) 모델링
- 객체지향 기법의 주요 원칙
- 캡슐화 (Encapsulation)
- 데이터 + 함수
- 정보 은폐 = 오류 파급효과 적어짐
- 재사용 용이
- 인터페이스 단순
- 결합도 낮아짐
- 정보 은닉 (Information Hiding)
- Side Effect (고려되지 않은 영향) 최소화
- 상속성 (Inheritance)
- 상위클래스의 모든 속성과 연산을 하위클래스가 상속
- 추상화 (Abstraction)
- 불필요한 부분 생략
- 다형성 (Polymorphism)
- Integer, Float, Char에 따라 각각 다른 작업을 수행
- 하나의 메세지에 여러가지 형태의 응답
- 하나의 메세지에 대해
- 각 객체가 가지고 있는
- 고유한 방법으로 응답할 수 있는 능력
- 캡슐화 (Encapsulation)
- 객체지향 설계
- 객체를 명사로, 연산이나 객체 서비스를 동사로 표현
- 검증 검사 (Validation Test)
- 사용자의 요구사항을 충족시키는가
- 블랙박스 테스트 기법 사용
- 알파 검사
개발자
- 베타 검사
사용자
- 성능 검사
전 과정
- 블랙박스 테스트
- 외적인 부분 검사
- 기능 완전 작동 여부 입증
- 정확성 점검
- 검사 기법
- 동치 분할 검사 (Equivalence Partitioning Testing)
- 타당한 입력자료
- 타당하지 않은 입력자료
- 갯수를 균등하게 하여 검사
- 경계값 분석 (Boundary value analysis)
- 원인-효과 그래프 검사 (Cause-Effect Graphic Testing)
- 오류 예측 검사
- 비교 검사 (Compare, Comparison Testing)
- 여러 버전의 프로그램에
- 동일한 검사자료를 제공
- 동일한 결과가 출력되는지 검사
- 동치 분할 검사 (Equivalence Partitioning Testing)
- 부치 (Booach) 방법
- 미시적 (Micro) 개발 프로세스와
- 거시적 (Macro) 개발 프로세스 모두 사용
- 유지보수 유형
- 수정 보수 (Corrective Maintenance)
- 오류를 찾아 수정
- 적응 보수 (Adaptive Maintenance)
- 환경 변화에 대처
- 완전화 보수 (Perfecive Maintenance)
- 새로운 기능을 추가하거나 성능개선
- 가장 많은 비용을 차지
- 예방 보수 (Preventive Maintenance)
- 오류발생에 대한 대비 소프트웨어 위기를 해결
- 소프트웨어 재공학과 가장 관계
- 수정 보수 (Corrective Maintenance)
- Coad와 Yourdon 방법
E-R 다이어그램
- 객체지향기법의 요소
- 클래스 (Class)
- 유사한 객체들을 묶어 하나의 공통된 특성을 표현
- 메세지 (Message)
- 어떤 행위를 하도록 지시하는 명령
- 메소드 (Method)
- 메시지를 받아 실행해야 할 객체의 구체적인 연산 (Operation)
- 인스턴스 (Instance)
- 어떤 클래스에 속하는 구체적인 객체
- 클래스 (Class)
- McCabe의 복잡도
- 화살표 수 - 노드 수 + 2
- 상향식 통합 검사 (Bottom-Up Integration Test)
- 하위모듈을 Cluster 로 결합
- 제어 프로그램(Driver) 작성
- Cluster 검사
- Driver 을 제거하고 Cluster를 상위로 결합
- CASE (Computer Aided Software Engineering)
- 소프트웨어 개발 과정에서 사용되는
요구분석
설계
구현
검사
디버깅
- 자동화
- 개발 도구 + 개발 방법론
- 아닌 것
- 구현과 유지보수만 중심제공 X
- 소프트웨어 사용방법 제공 X
- 다른환경에서 사용할 수 있도록 변환 X
- 새로운 기술 적용 X
- 언어번역 X
- 도형목차, 총괄도표, 상세도표 X
- 생명주기 모형 X
- 장점
- 개발기간 단축
- 품질향상
- 유지보수 용이
- 재사용성 향상
- 생산성 향상
- 개발주기의 표준화
- 시스템 수정 및 유지보수 확대 X
OMA (Object Management Architecture)
OMG (Object Magement Group) 의 활동방향과 목적에 부합하는 모델
- 구성요소
- 공통 기능 (Common Facilities)
- 응용 인터페이스 (Application Interface)
- 도메인 인터페이스 (Domain Interface)
- 유저 인터페이스 (User Interface) X
- 구성요소
소프트웨어 재공학 (Reengineering)
유지보수
기존에 있던 소프트웨어를 파기하지 않고 새로운 기능을 추가하여 예방 유지보수 측면에서 문제를 해결
- 비용 절감
- 수정 유지보수 측면 X
- 효율적 X
- 재사용 (Reuse) X
- 재개발은 재공학 활동에 포함 X
- 소프트웨어 재사용
- 소스코드를 제일 많이 사용
- 소프트웨어 크기가 작을수록 재사용률이 높음
개발시간
비용
단축품질
생산성
향상- 프로젝트 실패위험 감소
- 시스템 구축방법에 대한 지식공유
- 개발 시 작성된 문서
- 교육적 효과
- 고급 프로그래머 배출 X
- 종속 X
- 보안 X
- 새로운 개발 방법 X
- 분석 (Analysis)
- 기존 소프트웨어의 명세서 확인
- 소프트웨어 동작 이해
- 재공학 대상 선정
- 개조 (Restructuring)
- 하나의 표현을 다른 표현형태로 바꾸는 것
- 역공학 (Reverse Engineering)
- 기존 소프트웨어를 분석하여 재발견하거나 다시 만듬
- 기본 코드를 복구
- 원시 코드로부터 설계정보 추출 및 절차 설계 표현
- 프로그램 및 데이터 구조 정보 추출
- 재문서화
- 이식 (Migration)
- 새로운 하드웨어 환경에서 사용할 수 있도록 변환
- 재구성
- 소프트웨어를 형태에 맞게 수정하는 활동
- 상대적으로 같은
- 추상적 수준에서
- 하나의 표현을
- 다른 표현 형태로 바꿈
UML
객체지향 모델의 표준
- 여러가지 유형의 다이어그램 제공
- 개발자와 고객간 원활한 의사소통
- OMG에서 만든 통합 모델링 언어
- 실시간 시스템 및 분산 시스템의
- 시스템 분석과 설계에
- 효율적으로 사용