본문 바로가기
IT★자격증/정보시스템감리사 기출문제 풀이

2022년 제 23회 정보시스템 감리사 기출문제 풀이 - 소프트웨어공학(26-30)

by 꼬모부 2024. 1. 15.
728x90
오늘부터 2022년 제 23회 정보시스템 감리사 소프트웨어공학 기출문제 풀이 26-30번까지 풀이를 진행하겠습니다.
도움이 되시길 바랍니다.

 

소프트웨어공학

 

문제 26
26. 소프트웨어 요구사항 정보의 형태는 비즈니스 요구사항, 비즈니스 룰, 제약사항, 외부 인터페이스 요구사항, 특성(Feature), 기능적 요구사항, 비기능적 요구사항, 품질 속성, 시스템 요구사항, 사용자 요구사항 등으로 구성될 수 있다. 이들 간의 연관관계를 그림으로 표현한 것 중 가장 적절하지 않은 것은?
(단, 점선은 다른 형태의 요구사항에 영향을 주거나 다른 형태의 요구사항의 원천이 되는 경우를 의미한다.)

① 가
② 나
③ 다
④ 라

 

출제의도

 

소프트웨어 요구사항은 소프트웨어가 어떻게 동작해야 하는지, 어떤 기능을 제공해야 하는지, 그리고 어떤 제약 조건 내에서 동작해야 하는지를 정의합니다. 여기서 언급한 요구사항의 형태들은 서로 밀접하게 연관되어 있습니다.

  • 비즈니스 요구사항: 이는 비즈니스 목표를 달성하기 위해 소프트웨어가 충족해야 하는 고수준의 요구사항입니다. 이는 특성, 기능적 요구사항, 비기능적 요구사항 등의 기반을 제공합니다.

  • 비즈니스 룰: 이는 비즈니스 요구사항을 충족하기 위해 소프트웨어가 따라야 하는 규칙이나 원칙입니다. 이는 제약사항과 밀접한 관련이 있습니다.

  • 제약사항: 이는 소프트웨어 설계와 구현에 영향을 미치는 제한사항입니다. 이는 비즈니스 룰에서 파생되며, 기능적 요구사항과 비기능적 요구사항에 영향을 미칩니다.

  • 외부 인터페이스 요구사항: 이는 소프트웨어가 다른 시스템과 상호작용하는 방식을 정의합니다. 이는 기능적 요구사항과 비기능적 요구사항에 영향을 미칩니다.

  • 특성(Feature): 이는 소프트웨어가 제공하는 주요 기능을 나타냅니다. 이는 비즈니스 요구사항에서 파생되며, 기능적 요구사항과 비기능적 요구사항을 포함합니다.

  • 기능적 요구사항: 이는 소프트웨어가 수행해야 하는 특정 기능을 정의합니다. 이는 특성, 비즈니스 요구사항, 비즈니스 룰, 제약사항 등에서 파생됩니다.

  • 비기능적 요구사항: 이는 소프트웨어의 성능, 보안, 사용성 등과 같은 품질 속성을 정의합니다. 이는 비즈니스 요구사항, 비즈니스 룰, 제약사항 등에서 파생됩니다.

  • 품질 속성: 이는 소프트웨어의 성능, 신뢰성, 사용성 등과 같은 특성을 나타냅니다. 이는 비기능적 요구사항과 밀접한 관련이 있습니다.

  • 시스템 요구사항: 이는 시스템이 충족해야 하는 전반적인 요구사항을 나타냅니다. 이는 기능적 요구사항, 비기능적 요구사항, 품질 속성 등을 포함합니다.

  • 사용자 요구사항: 이는 사용자가 소프트웨어로부터 기대하는 요구사항을 나타냅니다. 이는 특성, 기능적 요구사항, 비기능적 요구사항 등에 영향을 미칩니다.

이러한 요구사항들은 서로 상호 작용하며, 소프트웨어의 전반적인 설계와 구현에 영향을 미칩니다. 이들은 모두 소프트웨어 개발 프로세스의 중요한 부분을 이루며, 효과적인 소프트웨어 개발을 위해 반드시 고려해야 합니다. 이들 간의 연관관계를 이해하는 것은 소프트웨어 요구사항을 효과적으로 관리하고, 효율적인 소프트웨어 설계와 구현을 위한 기반을 마련하는 데 중요합니다.

 

각 항목에 대한 설명
정답은 ④ 라 입니다.

 

문제 27
27. 소프트웨어 요구사항의 표준화를 위하여 소프트웨어 요구사항 패턴을 정의하였다. 다음 요구사항에 가장 적절한 소프트웨어 요구사항 패턴은?

선택한 고객에 대해 금액 조정(인출 또는 대출)을 할 수 있다. 금액 조정은 다음과 같은 정보를 가진다.

- 고객 ID 
- 조정 금액 
- 조정 이유

각 계좌 금액 조정에 유일한 ID가 자동으로 부여된다.
극소수의 직원만이 계좌 금액 조정을 할 수 있다.
① Chronicle Requirement Pattern
② Living Entity Requirement Pattern
③ Transaction Requirement Pattern
④ Configuration Requirement Pattern

 

출제의도

소프트웨어 요구사항 패턴에 대한 이해도를 확인하고, 특정 요구사항이 어떤 패턴에 가장 잘 맞는지 판단하는 능력을 평가하는 것일 것입니다. 이 문제를 통해 학습자는 소프트웨어 요구사항의 표준화와 패턴화에 대해 배울 수 있습니다.

 

각 항목에 대한 설명
이 요구사항은 고객의 계좌에 대한 금액 조정(인출 또는 대출)을 다루고 있습니다. 이러한 조정은 특정 정보(고객 ID, 조정 금액, 조정 이유)를 포함하며, 각 조정에는 유일한 ID가 자동으로 부여됩니다. 또한, 오직 소수의 직원만이 이러한 조정을 수행할 수 있습니다.

이러한 요구사항은 거래 요구사항 패턴(Transaction Requirement Pattern)에 가장 잘 맞습니다. 

거래 요구사항 패턴은 시스템이 사용자의 요청에 응답하여 특정 작업을 수행하도록 설계된 경우에 사용됩니다. 이 패턴은 일반적으로 사용자의 입력을 받아 처리하고, 결과를 반환하는 과정을 포함합니다.


① Chronicle Requirement Pattern:
시스템이 시간에 따라 변화하는 정보를 추적하고 기록해야 하는 경우에 사용됩니다.

② Living Entity Requirement Pattern:
시스템이 실제 세계의 개체나 엔티티를 모델링하고 관리해야 하는 경우에 사용됩니다.

④ Configuration Requirement Pattern:
시스템의 동작이 구성에 따라 달라지는 경우에 사용됩니다.

따라서 정답은 ③입니다.

 

문제 28
28. 다음은 리팩토링 목록(Catalog of Refactoring)에서 정의된 리팩토링 방법 중 하나를 설명하는 코드이다. 다음 코드 변경을 잘 설명하고 있는 리팩토링 방법의 이름으로 가장 적절한 것은?

변경 전
let defaultOwner = {firstName: "Martin", lastName: "Fowler"};
변경 후
let defaultOwnerData = {firstName: "Martin", lastName: "Fowler"};
export function defaultOwner() {return defaultOwnerData;} 
export function setDefaultOwner(arg) {defaultOwnerData = arg;}
① Inline Variable
② Encapsulate Variable
③ Split Variable
④ Rename Variable

 

출제의도

리팩토링 기법에 대한 이해도를 확인하고, 특정 리팩토링 기법을 코드에 적용하는 방법을 이해하는 것일 것입니다. 이 문제를 통해 학습자는 코드의 가독성과 유지보수성을 향상시키는 데 도움이 되는 리팩토링 기법에 대해 배울 수 있습니다. 

 

각 항목에 대한 설명
이 코드는 변수의 직접적인 접근을 제한하고, 대신 함수를 통해 변수에 접근하도록 변경하였습니다. 이러한 리팩토링 방법은 변수 캡슐화(Encapsulate Variable)라고 합니다. 

변수 캡슐화는 변수에 대한 직접적인 접근을 제한하고, 대신 getter와 setter 함수를 통해 변수에 접근하도록 하는 리팩토링 기법입니다. 이를 통해 변수의 값 변경 로직을 한 곳에서 관리할 수 있게 되며, 이는 코드의 유지보수를 용이하게 합니다.

① Inline Variable:
변수를 그 값으로 대체하는 리팩토링 기법입니다.

③ Split Variable:
하나의 변수가 두 가지 이상의 역할을 하는 경우, 각 역할에 대해 별도의 변수를 생성하는 리팩토링 기법입니다.

④ Rename Variable:
변수의 이름을 더 명확하게 이해할 수 있는 이름으로 변경하는 리팩토링 기법입니다.

따라서 정답은 ②입니다.

 

문제 29
29. 다음 의사 코드(Pseudo Code)에 대하여 McCabe의 Complexity Number를 계산한 것 중 가장 적절한 것은?
(단, 코드 실행에 대한 오류는 없는 것으로 가정함)

i = 0;
n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1;
while (j<n) do if A[i]<A[j] then swap(A[i], A[j]);
end do;
i=i+1;
end do;
① 4
② 5
③ 6
④ 7

 

출제의도

McCabe 코드의 복잡성을 이해하고 이를 측정하는 방법을 알아보는 것일 것입니다. McCabe의 복잡성 수는 코드의 복잡성을 정량화하는 데 도움이 되며, 이는 코드의 테스트 가능성, 유지 관리성 및 신뢰성에 중요한 영향을 미칩니다. 이 문제를 통해 학습자는 이러한 개념을 이해하고 적용하는 능력을 향상할 수 있습니다. 

 

각 항목에 대한 설명
버블 정렬 알고리즘과 유사하며, 배열의 각 요소를 비교하고 필요한 경우 위치를 바꿉니다.
이 코드의 McCabe의 복잡성 수를 계산하려면, 코드의 선형적 독립 경로의 수를 세어야 합니다.

이는 코드의 복잡성을 측정하는 데 사용되는 메트릭입니다. 복잡성 수는 결정 구조의 수에 1을 더한 값으로 계산됩니다. 결정 구조는 if, while, for, case 등의 조건문을 포함합니다.

이 코드에서는 두 개의 while 루프와 하나의 if 문이 있으므로, McCabe의 복잡성 수는 2 (while 루프 수) + 1 (if 문 수) + 1 = 4가 됩니다.

따라서 정답은 ①입니다.

 

문제 30
30. 다음은 검색 알고리즘에 관한 JAVA Code 문제이다. 숫자 배열 {1, 2, 3, 4}와 정수 k는 3으로 입력되었을 때, 출력 결과로 가장 적절한 것은?

public class Search { public static int search(List<Integer> list, int k) { int left = 0, right = list.size() -1, result = -1;
while(left <= right) { int mid = left + ((right - left) / 2);
if (list.get(mid) > k) { right = mid -1;
} else if (list.get(mid) == k) { result = mid;
right = mid -1;
} else { left = mid+1;
} } return result;
}
public static void main(String[] args) { Integer[] intArr = {1, 2, 3, 4};
List<Integer> list = Arrays.asList(intArr);
System.out.println(search(list, 3));
} }
① 1
② 2
③ 3
④ 4

 

출제의도

이진 검색 알고리즘의 작동 방식을 이해하고, 이를 코드로 구현할 수 있는지 확인하는 것일 것입니다. 이 문제를 통해 이진 검색의 핵심 개념인 ‘분할 정복’ 전략을 연습할 수 있습니다. 이는 큰 문제를 작은 하위 문제로 나누고, 이 하위 문제를 해결하여 원래 문제를 해결하는 방법입니다. 이진 검색은 이 전략을 효과적으로 활용하는 좋은 예입니다. 

 

이 알고리즘은 O(log n)의 시간 복잡도를 가지므로, 큰 데이터 세트에서도 효율적으로 작동합니다. 이는 선형 검색(O(n))보다 훨씬 빠릅니다. 이러한 이유로 이진 검색은 컴퓨터 과학에서 중요한 개념입니다.

 

각 항목에 대한 설명
이 코드는 이진 검색 알고리즘을 구현한 것입니다. 이진 검색은 정렬된 배열에서 특정 값을 찾는 데 사용되며, 이 경우에는 배열 {1, 2, 3, 4}에서 값 3을 찾습니다.

이진 검색 알고리즘은 배열의 중간 요소를 확인하고, 찾고 있는 값이 중간 요소보다 작으면 왼쪽 하위 배열에서 검색을 계속하고, 찾고 있는 값이 중간 요소보다 크면 오른쪽 하위 배열에서 검색을 계속합니다. 이 경우에는 찾고 있는 값이 중간 요소와 같으면 해당 인덱스를 결과로 설정하고, 오른쪽 경계를 중간 인덱스보다 하나 작게 설정하여 왼쪽 하위 배열에서 계속 검색합니다.

이 코드를 실행하면, 3이라는 값은 배열의 인덱스 2에 위치하므로, 2가 출력됩니다.

따라서 정답은 ②입니다.

다음 시간에는 소프트웨어 공학 기출문제 풀이 31-35번까지 풀이를 진행해 보겠습니다.
오늘도 읽어 주셔서 감사합니다.

 

반응형
LIST