카테고리 없음

소프트웨어 공학

Ho's log 2024. 3. 4. 16:13

 

 


야크의 털깍기란?


야크라는 가축은 몸을 뒤덮고 있는 털이 매우 많습니다. 여름이 되기 전에 털을 깎아주어야하는데 몸통의 털을 깎기까지 상당히 많은 양의 털을 깍아야합니다.

개발자가 하나의 문제에 몰두하다보면 마치 위와 같은 상황에 마주할 때가 있습니다. 어떤 문제를 해결하려고 봤더니, 다른 문제가 계속 나와 좀처럼 몸통에 해당하는, 해결하고자 하는 문제의 해결에 도달하지 못하려고 하는 상황입니다.

이를 막기 위해서는 복잡한 코드를 읽거나 쓸때는 메모해 가며 작업하는 것이 좋습니다. 혹은 시간이나 비용을 고려하거나 목적을 고려했을 때 맞지 않다면 작업을 멈추고 다른 길을 찾아보는 것도 방법입니다.


 


조슈아 나무의 법칙이란?


 

어떤 사람이 식물도감에서 조슈아 나무를 처음으로 알게 되었습니다. 책을 읽으며 그 사람은 자기가 오랫동안 살던 마을에서 전혀 본 적이 없는 나무라고 생각했습니다. 그런데 집 밖을 나오자 길목에 곳곳마다 조슈아 나무가 있는 것을 발했습니다.

사람은 이름을 아는 순간 비로소 보이게 됩니다. 이름이 없다면 보이지 않았을 것입니다.

디자인 패턴은 이미 존재하던 설계 노하우에 이름을 붙여 재사용할 수 있도록 만들었습니다.

팀 내에서 유비쿼터스 언어를 사용합니다. 즉 해당 문제 영역의 각 요소를 정확하게 표현하는 팀 공통 언어입니다. 이 언어가 없다면 모두 제멋대로 따로 단어를 만들어서 사용할 것이기 때문입니다.


 


엔트로피 증가의 법칙이란?


엔트로피란 물리학 용어로 무질서한 정도를 나타냅니다. 열역학 법칙에 의하면 우주의 엔트로피는 증가합니다.

소프트웨어 개발에 있어서 코드를 그대로 두면 무질서함이 증대됩니다.

엔트로피는 다음과 같은 이유로 증가합니다.

  1. 경직됨: 하나의 모듈 변경으로 인해 종속된 모듈을 연쇄적으로 수정해야하는 경우
  2. 깨지기 쉬움: 단 하나의 변경으로 인해 다른 많은 부분이 망가지거나 수정해야하는 경우
  3. 이식성 없음: 다른 환경으로 이식하기 어렵다.
  4. 다루기 어려움: 설계 구조에 유연성이 없다.
  5. 복잡함: 코드에 불필요한 요소 많음(ex. 앞으로의 사양 변경에 맞추어 너무 많은 장치를 넣은 경우)
  6. 같은 코드의 반복
  7. 불투명함: 코드를 이해하기 어려움

 


KISS 원칙이란?


Keep It Simple, Stupid / Keep it Short and Simple.

코드는 아무생각없이 수정하면 복잡해지고 무질서해진다. 이는 읽기 어렵고 수정하기 어려워진다.


 


브룩스의 법칙이란?


일정이 늦어지고 있는 소프트웨어 개발 프로젝트에서 지연을 막기 위해 후반에 사람을 추가하면 오히려 지연이 한층 더 초래된다.

프로젝트의 공수(일정한 작업에 필요한 인원수를 노동시간 또는 노동일로 나타낸 수치)는 맨먼스로 환산된다. 몇 명(men)이 몇 개월(month) 투입외서 일하는지를 계산하므로 man * month 공식이 성립된다.

그렇다면 month를 줄이기 위해서 더 많은 man을 투입한다고 month가 줄어들지는 않는다.

 

 

수레바퀴의 재발명이란?


어떤 기능을 구현한 코드나 라이브러리가 이미 존재하는데도 직접 다시 똑같은 기능을 프로그래밍하는 경우이다. 이미 세상에 존재하는 수레바퀴를 일부러 수고를 들여 다시 한번 발명하는 것과 같은 작업이다.

수레바퀴가 존재하는지 몰라서(해당 라이브러리 존재성 부지), 개발자가 수레바퀴를 만들고 싶은 마음때문에 발생한다.