728x90
반응형
SMALL

현실에서 프로그래밍은 대규모로 이루어짐

이때 사용되는 전략

  1. 무엇을 해야 할지 파악
  2. 넓은 명세부터 시작해서 작은 부분으로 해야 할 일을 나누기
  3. 각 부분을 작업하며 전체적으로 일관되어 있는지 확인

프로그래밍에서 작업 하나의 크기 == 보통 한 사람이 프로그래밍 언어로 정확한 처리 단계를 작성할 수 있는 정도

다른 프로그래머들의 작업과 함께 잘 작동하는지 확인하는 일은 어려움

ex. 1999년 NASA의 화성 기후 궤도선이 고장난 사건(미터법 단위 vs 야드파운드법 단위)

아무튼 필자의 첫 번째 ‘진짜’ 프로그램도 약 1000줄 정도

작가가 교수로 있는 학생들이 학교를 다니며 작성하는 프로젝트(8 ~ 10주)도 약 2000 ~ 3000줄

컴파일러나 웹 브라우저는 코드가 수십만에서 수백만 행

대규모 시스템은 수백만, 수천만 행로 같이 일하는 사람도 수백에서 수천 명 정도, 시스템의 수명도 수십년

구글은 2015년 행사에서 프로그램의 규모를 밝히기로 전체 코드 규모가 약 20억 행 (필자의 추측으로 지금은 두 배 이상 됐을 가능성이 있다고 함)

이 정도 규모의 소프트웨어를 개발하려면 프로그래머, 테스트 담당자, 문서 작성자로 이루어진 팀이 여럿이 필요하고 회의가 끊임없이 있고 대충 매우 바빴을거라 한다.

라이브러리, 인터페이스, 개발 키트

프로그래밍도 집 짓는 것과 마찬가지로 다른 사람들이 만들어 놓은 여러 가지 구성 요소를 바로 구해서 사용할 수 있음

프로그래밍 언어는 가장 단순한 수준의 함수 메커니즘을 제공

함수 메커니즘 : 어떤 프로그래머가 유용한 작업을 수행하는 코드를 작성하면 다른 프로그래머가 그 내부 작동 방식을 모르더라도 프로그램에 사용할 수 있는 형태로 코드를 패키지화할 수 있게 해줌

연관된 함수들의 모음을 보통 라이브러리라고 함

함수 라이브러리가 제공하는 서비스는 API로 프로그래머에게 제공

API는 포함하는 함수, 함수의 용도가 무엇인지, 어떻게 사용해야 하는지, 어떤 입력 데이터를 요구하는지, 어떤 값을 만들어 내는지 나열

또 API는 시스템 내부에서 주고받는 데이터의 구조를 의미하는 자료 구조와 기타 세부 사항도 기술할 수 있음

결론적으로 API는 함수 + 함수의 정보 + 지원 문서

요즘 대규모 시스템은 프로그래머들이 복잡한 소프트웨어 라이브러리를 잘 다룰 수 있도록 소프트웨어 개발 키트(SDK)도 포함

ex. 애플 ⇒ 아이폰, 아이패드 코드를 위한 Xcode, 구글 ⇒ 안드로이드용 SDK 안드로이드 스튜디오, 마이크로소프트 ⇒ 윈도우 코드를 위한 폭넓은 개발환경

버그

컴퓨터의 시키지 않은 엉뚱한 일, 오답 ⇒ 프로그램의 결함

  • 발생할 수 있는 경우를 깜박하고 처리하지 못함
  • 어떤 조건을 평가하기 위한 논리 테스트나 산술 테스트를 잘못 작성
  • 잘못된 공식을 사용
  • 프로그램이나 프로그램의 특정 부분에 할당된 영역 밖에 있는 메모리에 접근
  • 특정 종류의 데이터에 잘못된 연산
  • 사용자 입력이 적합한지 검사하지 못함

⇒ 다양한 문제들을 모두 버그라고 할 수 있음

이런 문제를 위해 테스트는 프로그래밍에서 큰 부분을 차지

소프트웨어를 개발하는 기업에는 구현 코드의 양 < 테스트 코드의 양, 프로그래머 < 테스터

요새는 테스터가 테스트 코드를 작성하진 않고 공고만 봐도 테스트 코드를 습관화하고 이해하고 있는 개발자를 많이 뽑는 것 같음

버그는 시스템을 공격에 취약하게 만들기도 하고 종종 공격자가 메모리 악성코드를 심어 놓기도 쉬워지기도 함

업데이트가 잦다는 것은 취약점이 널리 퍼져있다는 것 ⇒ 웹 브라우저처럼 해커의 타겟이 자주 되는 중요한 프로그램이 그러함

소프트웨어가 패치될 때마다 취약점이 수정되기 때문에 사용자들은 소프트웨어를 최신 상태로 유지하는 것이 중요

소프트웨어 개발이 복잡해지는 것은 버그 뿐만 아니라 급변하는 환경에도 있다.

새로운 법이나 기타 요구사항이 등장하면 프로그램의 사양이 바뀜

ex. 터보택스는 서로 다른 관할권에서 세법이 바뀔 때마다 대응해야 함

뿐만 아니라 컴퓨터 기종, 각종 툴, 프로그래밍 언어, 물리적 장치, 데이터 형식 등이 구식이 되면 교체되어야 함

끊임없는 변화에 뒤처지지 않고 따라가는 것이 소프트웨어 유지보수에 매우 중요, 반드시 수행해야 하는 일

그렇지 않으면 프로그램은 ‘비트 부식’을 겪게 되어

재컴파일을 할 수 없게 되거나 몇몇 라이브러리가 너무 많이 바뀌어 작동하지 않거나, 업데이트 할 수 없는 상태가 됨

728x90
반응형
LIST

+ Recent posts