티스토리 뷰
61. 소프트웨어 프로젝트 관리의 주요 구성 요소인 3P에 해당하지 않는 것은?
프로젝트 관리를 위한 3P
- 사람(People) : 프로젝트 관리에서 가장 기본이 되는 인적 자원
- 문제(Problem) : 사용자 입장에서 문제를 분석하여 인식함
- 프로세스(Process) : 소프트웨어 개발에 필요한 전체적인 작업 계획
Power는 하드웨어 관리쪽이 아닐까??
정답은 4번 Power.
62. 소프트웨어 재공학의 주요 활동 중 역공학에 해당하는 것은?
일단 "소프트웨어 재공학의 주요활동"에 대해서 알아보자.
- 분석(Analysis)
: 기존 소프트웨어 명세서를 확인하여 소프트웨어 동작을 이해하고, 재공학 대상을 선정.
- 개조(재구조, 재구성)
: 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 형태로 바꿈.
기존 소프트웨어를 향상시키기 위하여 코드를 재구성하므로 기능과 외적인 동작은 바뀌지 않음.
- 역공학(Reverse Engineering)
: 기존 소프트웨어를 분석하여 설계도를 추출하거나 다시 만들어내는 작업.
정공학과 반대의 개념으로 기존 코드를 복구하는 방법.
역공학의 가장 간단하고 오래된 형태는 재문서화.
- 이식(Migration)
: 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있도록 반환.
보기의 1번은 "분석", 보기의 2번은 "개조", 보기의 4번은 "이식"이 되겠다.
정답은 3번.
63. 소프트웨어 프로젝트 측정에서 신뢰할만한 비용과 노력 측정을 달성하기 위한 선택사항이 아닌 것은?
[신뢰할만한 비용과 노력측정을 달성하기 위한 선택사항들]
- 프로젝트의 정확한 측정을 위해 충분한 시간을 갖고 측정
- 상대적으로 간단한 분해기술을 이용
- 실험적 모델을 형성
- 하나 이상의 자동화 측정도구를 이용
정답은 1번. 간단한 분해기술을 이용해야한다. 복잡한 분해기술이라니 누가 좋아하겠어?
64. 소프트웨어 위기를 가져온 원인으로 가장 옳지 않은 것은?
소트웨어 위기의 원인은 아래와 같다.
-
소프트웨어 규모의 대규모화, 복잡화에 따른 개발비용 증대
-
하드웨어 비용에 대한 소프트웨어 가격 상승폭 증가
-
유지보수의 어려움과 개발정체 현상 발생
-
프로젝트 개발 및 소요예산 예측의 어려움
-
신기술에 대한 교육 및 훈련의 부족
그리고 증상은 아래와 같다.
-
프로젝트 예산이 초과되었다.
-
프로젝트 일정이 지연되었다.
-
소프트웨어가 비효율적이었다.
-
소프트웨어 품질이 낮았다.
-
소프트웨어가 요구 사항을 만족시키지 못하는 일이 빈번히 일어났다.
-
프로젝트는 관리 불가능했고 코드 관리는 힘들었다.
-
소프트웨어가 고객의 손에 전달 되지 못했다.
결국 정답은 4번 "수요의 감소"는 원인이 아니다.
65. 객체 지향 개념 중 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미하는 것은?
객체지향개념에 대해서 들여다보고 가자.
- 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때도 객체들을 조립해서 작성할 수 있도록 하는 기법을 말함
[객체(Object)]
필요한 자료 구조와 이에 수행되는 함수들을 가진 하나의 소프트웨어 모듈(Attribute + Method)
[어트리뷰트(Attribute)]
객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄
데이터, 속성, 상태, 변수, 상수, 자료 구조라고도 함
[메소드(Method)]
객체지향 시스템에서 전통적 시스템의 함수(Function) 또는 프로시저(Procedure)에 해당하는 연산 기능
객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산을 정의한 것
[클래스(Class)]
공통된 속성과 연산(행위)을 갖는 객체의 집합으로 객체의 일반적인 타입(Type)을 의미
하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미
모든 객체들은 더 큰 클래스의 멤버이고, 그 클래스에 대하여 이미 정의된 개별 자료구조와 연산이 상속이 되며, 그 때문에 개별 객체는 클래스의 인스턴스가 됨
[메시지(Message)]
메시지는 객체(Object)들 간에 상호작용을 하는데 사용되는 수단
객체(Object)의 메소드(동작, 연산)를 일으키는 외부의 요구 사항임
(메시지의 구성요소)
- 메시지를 받는 객체(수신자)의 이름
- 객체(Object)가 수행할 메소드 이름
- 메소드를 수행할 때 필요한 인자(속성값)
정답은 2번 클래스가 되겠다.
66. 객체들 간에 메시지를 주고받을 때 각 객체의 세부내용은 알 필요가 없으므로 인터페이스가 단순해지고 데이터와 데이터를 처리하는 함수를 하나로 묶는 것을 의미하는 것은?
이것의 정답은 encapsulation인데 이 문제를 풀기위해서는 "객체지향 기법의 기본 원칙"에 대해서 알아야한다.
[캡슐화(Encapsulation)]
- 캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶은 것
- 객체지향 시스템에서 자료부분과 연산(또는 함수)부분등 정보처리에 필요한 기능을 한 테두리로 묶는 것
- 객체지향의 기본 원리인 정보은폐와 가장 밀접한 관계가 있음
- 객체지향 개념에서 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들고 필요한 인터피이스만을 밖으로 드러내는 과정
- 서로 관련 있는 데이터와 연산자를 하나로 묶어서 프로그램의 컴포넌트로 재사용 할 수 있는 개념
- 캡슐화 개념이 갖는 장점
-- 재사용이 용이
-- 인터페이스 단순화
-- 변경이 발생할 때 오류의 파급효과가 적음
[정보은닉(Information Hiding)]
- 다른 객체에서 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것
- 정보은닉 목적
-- 고려되지 않은 영향(Side Effect)들을 최소화 하기 위하여
[추상화(Abstraction)]
- 추상화는 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화 하는 것
[상속성(Inheritance)]
- 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체(Object)와 클래스의 재사용
[다형성(Polymorphism)]
- 객체지향 시스템에서 서로 다른 Class들이 같은 의미의 응답을 하는 특성
- 한 메시지가 객체에 따라 다른 방법으로 응답할 수 있는 것
- 많은 상이한 클래스들이 동일한 메소드명을 이용하는 능력
67. 소프트웨어 재공학은 어떤 유지보수 측면에서 소프트웨어 위기를 해결하기 위한 방법인가?
- 수정적 유지보수(Corrective Maintenance) : 내재된 결함들을 제거
- 완전적 유지보수(Perfective Maintenance) : 응답시간 감소와 같은 프로덕트의 효율성 개선작업
- 적응적 유지보수(Adaptive Maintenance) : 변경된 운영환경을 적응시키기 위한 변경작업
- 예방적 유지보수(Preventive Maintenance) : 기존 소프트웨어의 기능을 개조하거나 개선하는 예방 측면 작업
소프웨어 재공학(Software Reengineering)
- 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하는 문제를 염두에 두어 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시키려는 기술
- 유지보수 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법
- 기존 소프트웨어의 기능을 개조하거나 개선하므로, 예방 유지보수 측면에서 소프트웨어 위기를 해결하는 방법
- 소프트웨어 재공학도 자동화된 도구를 이용하여 소프트웨어를 분석하고 수정하는 과정을 포함
- 스프트웨어에서 발생할 수 있는 오류가 줄어 들고, 비용이 절감 됨
정답은 Preventive Maintenance가 되겠다.
68. 자료흐름도(DFD)의 작성 지침이라고 볼 수 없는 것은?
[작성지침]
- 자료 흐름(Flow)은 처리(Process)를 거쳐 변환될 때마다 새로운 이름을 부여함
- 처리(Process)가 출력 자료를 산출하기 위해서는 반드시 입력 자료가 발생해야함
- 최하위 처리(Process)는 소단위명세서를 갖는다.
- 처리(Process)와 하위 자료 흐름도의 자료 흐름은 서로 일치되어야 함
- 자료 저장소에 입력 화살표가 있다고 하여 반드시 출력 화살표가 표시될 필요는 없음
"배경도"와 관련된 지침은 없다. 3번 정답
69. 소프트웨어 생명주기 모형 중 Spiral Model에 대한 설명으로 가장 옳지 않은 것은?
나선형 모델(Spiral Model)이란?
나선형 모델은 4가지 섹션들로 구성되며, 소프트웨어가 완성될 때 까지 이들이 반복되는 모델.
점증모델, 반복적 모델과 마찬가지로 이 모델에서도 프로세스들이 반복적.
다른 점은 위험을 분석하는 프로세스가 명시되어 있다는 점.
[개발단계]
- 계획 및 정의
- 위험 분석
- 구축
- 고객평가
- 고객과의 의사소통
[장점]
- 비용, 시간이 많이 드는 큰 시스템 구축시 효과적
- 테스트에 소비되는 비용, 제품의 보급이 늦어지는 문제를 해결
- 각 순환 주기를 나선형 모델의 특별한 경우로 간주하며, 근본적으로 유지보수와 개발간 큰 차이가 없다.
[단점]
- 고객과 개발자가 같은 조직에 있는 내부 프로젝트의 경우, 위험 분석 단계에서 프로젝트의 수행을 중단해야한다고 결정되었다면, 프로젝트를 위해 구성된 인원을 다른 프로젝트에 다시 할당해야함
- 규모가 큰 프로젝트에만 유용하므로 위험분석을 수행하는데 드는 비용이 상당하다면 위험 분석을 수행하는 것이 의미가 없음
- 위험을 정확하게 분석하지 못했다면 엄청난 문제를 야기할 수 있음
선형 모델이 아니고 점증, 반복적 모델이다. 정답은 4번.
70. 소프트웨어 공학에 대한 설명으로 가장 옳지 않은 것은?