정보시스템 감리 기출해설/소프트웨어공학 해설

(제 23회) 소프트웨어 공학 / (28)~(29) 해설

아이티신비 2024. 9. 13. 09:00

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(변수 캡슐화하기)

  • 데이터가 사용되는 범위가 클수록 캡슐화를 하는 것이 더 중요해진다.
  • 메소드는 점진적으로 새로운 매소드로 변경할 수 있으니, 데이터는 한 번에 모두 변경해야 한다.

=> 아래와 같이 변경

Inline Variable

  • 변수에 담긴 표현식이 변수명과 다를 바 없을 경우나, 변수가 주변 코드를 리팩터링하는데 방해가 될 때에는 변수를 인라인 하는 것이 좋다.

 

 

정답 : ②

 

 

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 의 회전복잡도(Cyclomatic Complexity)

  • McCabe 는 프로그램의 이해 난이도는 주로 그 프로그램에 대한 제어 흐름 그래프의 복잡도에 의해서 결정된다는 사실을 관찰[MCC 76]
  • 접속 그래프 G의 사이클로메틱 수는 그래프 내에 있는 일차 독립 경로의 수이며,

V(G) = E- N + 2 ☞ E = 연결선의 수, n = 노드의 수

 

  • 복잡도 계산 방식

- 복잡도 = 폐쇄영역수 + 1(제어흐름 그래프를 통해 파악 가능)

- 복잡도 = 화살표수 - 노드수 +2 (제어흐름 그래피를 통해 파악 가능)

- 복잡도 = 단일조건의 수 + 1(프로그램 코드상에서 파악 가능)

(단일조건 : 참과 거짓으로 판별되는 원자적 조건이며 AND,OR로 연결된 복합 조건이 아니라 단일조건이란 뜻,

예) - if/else if/for/while/do white/try catch : 단일조건

- switch 문 내의 case 문 하나당 : 단일조건

- else/switch default/try finally : 단일조건 아님)

 

복잡도 = 단일조건의 수 + 1

아래 코드에 단일조건은 총 3개이므로 복잡도는 4

 

 
i = 0;
n = 4; // N-Number of nodes present in the graph
white (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;

정답 : ①

 




 

공감과 댓글은 아이티신비에게 큰 힘이 됩니다.

블로그 글이 유용하다면 블로그를 구독해주세요.♥