정보시스템감리/소프트웨어 공학

(제 15회) 소프트웨어 공학 / (26)~(50)

아이티신비 2024. 1. 11. 09:00

26. 다음은 Java 언어의 DivideByZero 예외처리를 다루는 소스 코드이다. 정의된 함수를 processing(10,2)로 호출하였을 경우, 화면에 출력되는 값으로 가장 적절한 것은?

void processing(int a, int b)
{
try {
System.out.print(a/b +“ ”);
} catch ( ArithmeticException e1) {
System.out.print(“DivideByZero ”);
} catch ( Exception e2) {
System.out.print(“Exception ”);
} finally {
System.out.print(“Done ”);
}
}

① 5 DivideByZero

② 5 DivideByZero Exception Done

③ DivideByZero Done

④ 5 Done

 

27. 다음은 C 언어로 작성된 int recur_compute(int num) 재귀함수의 소스 코드이다. 이 재귀함수를 실인자

5로 호출한 recur_compute(5)의 수행결과로 가장 적절한 것은?

int recur_compute(int num)
{
int sum = 0;
if (num <= 1 )
return 1;
sum = num + recur_compute(num-1);
return sum / 2;
}

① 1 ② 2

③ 3 ④ 4

 

28. 다음은 UML 2.0의 상태 다이어그램을 나타내고 있다. 만약 e1, e2, e3, e4, e5 순으로 수행되었을 때 최종 상태로 가장 적절한 것은?

① S12, S22 ② S11, S21

③ S11, S22 ④ S12, S21

 

29. 다음은 관점지향 프로그래밍(Aspect-Oriented Programming)의 주요 구문을 설명한 것이다. (가)-(나)-(다)에 가장 적절한 것은?

(가) 관심사를 구현한 소스 코드를 말한다.
(나) 관심사를 구현한 코드를 끼워 넣을 수 있는 프로그램의 이벤트를 말하며, 예로는 call events, execution events, initialization events 등이 있다.
(다) 관심사가 주프로그램의 어디에 횡단될 것인지를 지정하는 문장이며, 예로는 before: call (public void update*(...)) 등이 있다.

① aspect – pointcut – join point

② advice – pointcut – join point

③ aspect – join point – pointcut

④ advice – join point – pointcut

 

30. 접수(receiving), 물품(product), 매입주문(purchase order), 재고목록(inventory), 사용자 인터페이스(ui)컴포넌트를 사용하는 클래스를 구현한 컴포넌트 다이어그램에 대한 설명으로 가장 적절하지 않은 것은?

① 접수 컴포넌트(receiving.exe)는 물품 컴포넌트(product.dll) 를 참조하여 물품의 상태를 수정할 수 있다.

② 접수 컴포넌트(receiving.exe)와 매입주문 컴포넌트 (purchaseorder.dll), 물품 컴포넌트(product.dll), 재고목록 컴포넌트(inventory.dll) 사이에는 의존 관계가 존재하므로 점선 화살표로 표시하였다.

③ 사용자 인터페이스 애플리케이션(ui.exe) 컴포넌트와 매입주문 인터페이스 사이의 화살표는 UI가 접수 컴포넌트(receiving.exe)에 접근해야 할 경우, 반드시 매입주문 인터페이스를 거쳐야 한다는 것을 나타낸다.

④ 매입주문 컴포넌트(purchaseorder.dll)가 접수 컴포넌트 (receiving.exe)를 참조하기 때문에 화살표의 방향은접수 컴포넌트(receiving.exe)에서 매입주문 컴포넌트 (purchaseorder.dll) 쪽을 향하고 있다.

 

31. 다음과 같은 문제를 해결하는데 가장 적절한 디자인 패턴은?

인터넷 주문 시스템에서 Order의 저장에 대하여 생각해 보자. 개발 초기 단계에는 디버깅과 테스트 목적으로 객체 시리얼화를 기초로 한 간단한 저장 서브시스템을 고안했었다. 저장소의 성능에 대하여 확신하지 못하여 파일 기반의 저장소와 데이터베이스 기반의 저장소를 모두 구현하기로 하고 디자인 패턴을 이용하여 다음과 같이 설계하였다. OrderStore는 패턴에 대한 인터페이스 클래스이며, 저장에 관한 높은 추상 수준의 인터페이스를 제공한다. 또한 OrderStoreImplementor는 세 가지 구현을 위한 공통 인터페이스를 제공한다.

① Bridge Pattern ② Builder pattern

③ Singleton Pattern ④ Strategy Pattern

 

32. 새로운 프로젝트를 수행하기 위하여 COCOMO 모델을 적용하여 측정한 결과, 노력(Man Month) 값이 500 이었고, 프로젝트 전체 기간 중에 개발자 10명이 고정 투입되었다. 프로젝트 전체 기간과 구현단계에서 비용이 바르게 짝지어진 것은? (단, 개발자 연봉은 3,000만원, 구현 단계는 총 노력의 40%를 차지하며, 기타 비용은 제외한다.)

 

① 40개월, 3억 원 ② 40개월, 4억 원

③ 50개월, 5억 원 ④ 50개월, 6억 원

 

33. 일반화 관계로 표현된 다음의 다이어그램에 따라 코딩한 코드가 컴파일 오류는 발생하지 않지만 실행 오류가 발생하는 것은? (2개 선택)

 
class Animal{
public void move(){
System.out.println("move() of Animal Class");
}
public void sleep() {
System.out.println("sleep() of Animal Class");
}
}
class Dog extends Animal {
public void run(){
System.out.println("run() of Dog Class");
}
}
class Cat extends Animal{
public void sleep(){
System.out.println("sleep() of Cat Class");
}
public void run(){
System.out.println("run() of Cat Class");
}
}
class Bird extends Animal{
public void move(){
System.out.println("move() of Bird Class");
}
public void fly(){
System.out.println("fly() of Bird Class")
}
}
public class PolymorphismExam {
public static void main(String[] args) {
Animal ani_1 = new Dog();
Animal ani_2 = new Cat();
Animal ani_3 = new Bird();
ani_1.move();
ani_1.run(); // ①
ani_2.sleep(); // ②
ani_2.run();
ani_3.move(); // ③
ani_3.sleep();
ani_3.fly(); // ④
}
}

① ani_1.run(); ② ani_2.sleep();

③ ani_3.move(); ④ ani_3.fly();

 

 

34. 다음 중, 디자인 패턴에 대한 설명으로 가장 거리가 것은?

 

① 여러 객체가 한 객체에 의존하여 이것이 변경될 때 영향을 받아 작업을 수행할 경우 옵저버 패턴이 권장된다.

② 관련된 객체들의 패밀리를 스타일 선택에 의해서 생성할 때는 프로토타입 패턴이 권장된다.

③ 오직 하나의 객체만을 생성하는 클래스의 경우에는 싱글톤 패턴이 권장된다.

④ 동일한 역할은 하지만 다른 클래스의 객체를 생성할 때는 팩토리 패턴이 권장된다.

 

35. 다음의 코드에서 사용되고 있는 디자인 패턴으로 가장 적절한 것은?

class S {
public void foo() {
f1() ;
if ( f2() ) f3() ;
f4() ;
}
private void f1() { ... }
private void f4() { ... }
protected abstract boolean f2() ;
protected abstract void f3() ;
}
class C extends S {
protected boolean f2() { ... }
protected void f3() { ... }
}

① 팩토리 메소드(Factory Method) 패턴

② 스트래티지(Strategy) 패턴

③ 템플릿 메소드(Template Method) 패턴

④ 커맨드(Command) 패턴

 

36. 다음의 UML 시퀀스 다이어그램을 통해서 표현된 f0() 함수의 순환 복잡도(Cyclomatic Complexity)로 가장 적절한 것은?

① 3 ② 4 ③ 5 ④ 6

 

37. 다음 중에서 소프트웨어 테스팅에 대한 설명으로서 가장 거리가 것은?

 

① 테스팅은 시스템이 정해진 요구를 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 수동 또는 자동으로 검사하고 평가하는 일련의 과정을 말한다.

② 소스코드가 존재해야 테스트케이스를 설계할 수 있으므로 소스코드의 개발이 완료된 후에 테스팅은 시작될 수가 있다.

③ 발주자가 명시적으로 기술한 것뿐만 아니라 신뢰성 이나 완벽성(robustness) 등과 같이 묵시적으로 요구되는 것도 테스트될 필요가 있다.

④ 유지보수 단계에서는 회귀(regression) 테스팅이 중요한 역할을 한다.

 

38.“사용자는 로그인 화면을 통해서 로그인 정보를 입력한다. 시스템은 외부의 신용정보시스템을 접근해서 사용자 인증을 수행한다. 그리고 사용자 이름, 일시, 인증 여부 등 로그인 이력 정보를 데이터베이스에 기록한다.”의 요구사항을 바탕으로 객체지향 분석을 수행한 결과는 다음과 같다. 도출된 클래스의 유형으로서 가장 적절하지 않은 것은?

① 로그인화면 클래스

② 사용자인증 클래스

③ 신용정보시스템접근 클래스

④ 로그인이력정보 클래스

 

39. 다음 그림은 UML 다이어그램의 일부이다. 그림에 대한 설명으로 가장 거리가 것은?


① 여러 부서의 역할을 swim lane으로 표시하고 있다.

② fork와 join 노드가 사용되고 있다.

③ 객체 흐름이 잘 나타나 있다.

④ 객체가 가질 수 있는 상태의 변화를 잘 나타내고 있다.

 

40. 소프트웨어 개발 조직의 프로세스를 개선시키기 위한 참조모델로 사용되고 있는 CMMi 모델은 5단계의 성숙도 수준으로 구성된다. 다음 보기 중에서 2단계인 관리(Managed) 단계의 프로세스 영역과 가장 관련이 높은 것은?

 

① 조직 프로세스 정의(Organization Process Definition)

② 통합 프로젝트 관리(Integrated Project Management)

③ 형상관리(Configuration Management)

④ 위험관리(Risk Management)

 

41. 기능 점수 항목과 복합 가중값, 개발 예정인 소프트웨어의 기능 구성, 기능 점수와 코드 라인수와의 관계가 다음과 같이 주어졌을 때, 개발 예정인 소프트웨어의 예상되는 소스코드 라인 수를 가장 잘 추정한 것은?

① C 언어로 구현하면 24,000 SLOC(Source Line of Code)로 추정된다.

② Pascal 언어로 구현하면 19,000 SLOC로 추정된다.

③ C++ 언어로 구현하면 10,000 SLOC로 추정된다.

④ VB 언어로 구현하면 5,000 SLOC를 넘지 않을 것으로 추정된다.

 

42. 다음 표는 어떤 프로젝트를 수행하는데 필요한 작업, 작업 수행 기간, 작업들 간의 종속 관계(선후 관계)를 나타낸 것이다. T5 작업을 수행하는데 5일이 지연되어 15일이 소요되었다고 하자. 그렇지만 프로젝트의 전체 일정은 지연되지 않고 반드시 원래의 일정대로 종료되어야 한다면 T8 작업을 수행하는데 허락되는 최대 지연 시간은 얼마인가?

① 10일 ② 15일 ③ 20일 ④ 25일

 

43. 다음은 J2EE 플랫폼의 구성 요소에 대한 설명이다. 이 중에서 설명이 가장 적절하지 않은 것은?

 

① EJB – J2EE 애플리케이션의 비즈니스 로직을 구현 하며 홈 인터페이스, 원격 인터페이스를 제공한다.

② 컨테이너 – J2EE 플랫폼의 핵심 개념으로 컴포넌트의 생명주기 관리, 트랜잭션 관리, 보안, 지속성 등을 지원한다.

③ 메시지 드리븐 빈 – 비동기 통신을 지원하기 위해 제안되었으며 이 빈을 사용하는 클라이언트는 자바 메시지 서비스(JMS)를 사용하여 메시지를 전달한다.

④ 서블릿 – 프레젠테이션 로직을 구현하기 위해 사용되는 자바 클래스로서 웹 서버에 의해 JSP로 컴파일 된다.

 

44. 다음 C 프로그램에 대하여, 조건/결정 커버리지 (condition/decision coverage)를 100% 만족하기 위한 테스트 데이터 집합으로 가장 적절한 것은? (단, short-circuit evaluation은 수행하지 않음)

 
void foo(int x, int y) {
if (x < 50 || y >= 30)
printf(“%d\n”, x + y);
else
printf(“%d\n”, x – y);
}

① {<x = 0, y = 10>, <x = 5, y = 20>}

② {<x = 0, y = 40>, <x = 5, y = 60>}

③ {<x = 60, y = 10>, <x = 5, y = 60>}

④ {<x = 60, y = 40>, <x = 5, y = 20>}

 

 

45. 다음 보기 중 서비스 컴포넌트 참조 모델(SRM)을 구성하는 서비스 도메인만으로 묶은 것은?

㉠ 고객 서비스 도메인
㉡ 프로세스 자동화 서비스 도메인
㉢ 서비스 지원 비즈니스 도메인
㉣ 디지털 자산(Digital Asset) 서비스 도메인
㉤ 비즈니스 분석 서비스 도메인
㉥ 정부 자원 관리 서비스 도메인

① ㉠, ㉡, ㉢

② ㉠, ㉡, ㉣, ㉤

③ ㉡, ㉢, ㉤, ㉥

④ ㉣, ㉤, ㉥

 

46. 서비스 지향 아키텍처(Service Oriented Architecture)의 라이프사이클을 구성하는 단계는 '관리(manage)', '모델(model)','배포(deploy)','조합(assemble)' 으로 구성된다. SOA 라이프사이클 단계의 순서를 가장 적절하게 나열한 것은?

 

① 관리 -> 모델 -> 배포 -> 조합

② 관리 -> 조합 -> 모델 -> 배포

③ 모델 -> 조합 -> 관리 -> 배포

④ 모델 -> 조합 -> 배포 -> 관리

 

47. 도서관 A에서 운영 중인 도서관리 시스템에 대하여 다음과 같은 작업을 수행하였다. 다음의 작업과 소프트웨어 유지보수 활동을 연결한 것 중, 가장 적절한 것은?

가. 운영 중인 도서관리 시스템에서 대출 빈도가 높은 도서 목록을 추출하는 기능을 추가한다.
나. Windows XP가 탑재되어 있는 PC에서 운영 중인 도서관리 시스템을 Linux가 탑재된 서버에서 운영 하도록 옮긴다.

① 가: 완전(perfective) 유지보수 나: 적응(adaptive) 유지보수

② 가: 수정(corrective) 유지보수 나: 완전(perfective) 유지보수

③ 가: 수정(corrective) 유지보수 나: 적응(adaptive) 유지보수

④ 가: 완전(perfective) 유지보수 나: 완전(perfective) 유지보수

 

48. 다음 보기 중 소프트웨어 형상 관리 대상인 소프트웨어 형상을 모두 묶은 것은?

㉠ 소프트웨어 요구사항 명세서
㉡ 설계 문서
㉢ 운영 및 설치 매뉴얼
㉣ 유지보수 문서

① ㉠, ㉡

② ㉠, ㉡, ㉢

③ ㉠, ㉡, ㉣

④ ㉠, ㉡, ㉢, ㉣

 

49. 다음과 같은 C 프로그램이 주어졌을 때, 모듈 abc와 모듈 def 간의 결합도와 모듈 def의 응집도를 가장

적절하게 나타낸 것은?

void abc(void) {
int a, b, in;
int res;
scanf("%d %d %d", &a, &b, &in);
res = def(a, b, in);
printf("result = %d\n", res);
}
int def(int x, int y, int v) {
if(v > 0) {
return(x+y);
} else {
return(x-y);
}
}

① 자료 결합도(data coupling), 교환적 응집도(communication cohesion)

② 공통 결합도(common coupling), 절차적 응집도(procedural cohesion)

③ 자료 결합도(data coupling), 절차적 응집도(procedural cohesion)

④ 제어 결합도(control coupling), 논리적 응집도(logical cohesion)

 

50. 정보시스템을 개발할 때 사용하는 소프트웨어 구조 스타일(software architecture style)에 대한 설명으로 가장 적절하지 않은 것은?

 

① 저장소 구조(repository architecture): 복잡한 자료가 계속 변경되는 업무를 처리하는 응용 시스템에 잘 적용된다.

② MVC(Model/View/Controller): 같은 모델에 대하여 한 가지 뷰가 필요한 상호작용 시스템을 위하여 적절한 구조이다.

③ 클라이언트/서버(client/server) 구조: 저장소 구조의 특수한 형태로 저장소 구조의 중앙데이터 구조는 한 프로세스에 의하여 관리되지만 클라이언트/ 서버 시스템에서는 단일 클라이언트가 여러 개의 서버로부터 데이터를 받을 수 있다.

④ 파이프/필터(pipe/filter) 구조: 사용자의 개입 없이 데이터의 흐름이 전환되는 경우에 사용된다.

 


 

정답)

26
27
28
29
30
31
32
33
34
35
①,④
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50