본문 바로가기
La Lecture

그림으로 배우는 프로그래밍 구조 chapter5

by hxunz 2022. 6. 16.

chapter 5 설계부터 테스트까지

 

5-1
코멘트(주석) : 컴퓨터가 읽고 실행하지 않도록 특수한 표기법으로 프로그램 동작에 영향을 주지 않는다.
인덴트 : 소스 코드를 보기 편하게 할 목적으로 조건분기나 루프 등의 제어구문 안쪽에 있는 행의 시작을 같은 수의 공백이나 탭을 넣어 들여쓴다.
네스트(중첩구조) : 조건분기 안에 루프가 있는 등 몇 단계로 제어구문이 나올 경우, 인덴트를 깊게 하는 방법

 

5-2
코딩 규약 : 프로그램의 보수성과 품질을 높이기 위해 프로젝트별로 기술하는 규칙

 

5-3
단위 테스트 : 함수나 프로시저, 메소드 등의 단위로 테스트하는 방법으로 프로그램 각각의 부분이 문제없이 구현되어 있는지 확인하기 위해서 사용된다.
결합테스트 : 복수의 프로그램을 결합해서 실시하는 방법으로 단위 테스트를 마친 프로그램 간에 인터페이스가 일치하는지 등을 확인하기 위해서 실시한다.

 

5-4
시스템 테스트는 실제로 사용하는 하드웨어로 시스템 전체를 테스트한다. 즉, 발주자가 요구한 기능이나 성능을 만족하는지 검증하기 위해서 실시된다.
사용자 승인 테스트는 이용자 측에서 실시하는 테스트로 요건정의 단계에서 설정한 요건을 충족하는지 확인하고 문제가 없으면 검수된다.

 

5-5
블랙박스 테스트란 소스 코드를 보지 않고 프로그램의 입출력에만 주목해, 프로그램이 사양대로 동작하는지 판정하는 방법이다.
화이트박스 테스트는 소스 코드의 내용을 살펴보고 각 처리에 사용되는 명령이나 분기, 조건 등을 망라하는지 확인하는 방법이다.

 

5-6
동치 분할이란 입력이나 출력을 동일하게 취급할 수 있는 그룹으로 값을 나누고 각각의 대표적인 값을 사용해 테스트하는 방법이다.
경곗값 분석은 입력과 출력을 동일하게 다룰 수 있는 그룹으로 값을 나누고, 그 경계가 되는 값을 이용해 테스트하는 방법이다.

 

5-7
버그란 프로그램이 예상한 대로 움직이지 않는 것이다
디버그란 버그를 제거하고 바르게 움직이도록 수정하는 것이다.
디버거는 프로그램의 버그를 찾아내는 작업을 지원하는 소프트웨어이다.
BTS(버그 트래킹 시스템)이란 버그를 관리하는 소프트웨어이다.

 

5-8
문서나 소스코드를 눈으로 체크하는 것을 인스펙션이라고 한다.
컴퓨터로 소스 코드를 진단하는 정적 해석 방법이 있는데 소스 코드를 전혀 실행하지 않고 소스 코드에 포함된 여러 가지 문제를 발견하는 방법이며 훨씬 빠르다. 
정적 해석에 사용되는 지표로는 소스 코드의 규모나 복잡도, 보수성 등을 정량적으로 나타내는 소프트웨어 매트릭스가 있다.

 

5-9
소프트웨어 기획에서 이용 종료 까지의 전체 흐름을 소프트웨어 라이프 사이클이라고 한다.
DevOps는 운용의 신뢰성을 높일 뿐만 아니라 개발에서 보수까지 일관되게 대응함으로써 생산성 향상으로 연결하는 경향이 있다.

 

5-10
CI는 세밀하게 소스 코드를 커밋하고 커밋한 단계에서 자동으로 빌드나 테스트를 실행해, 실패할 경우 즉시 피드백되는 구조이다.
문제가 발견될 때까지의 시간을 단축할 수 있어, 원인을 조사하기 쉬워지고 팀 생산성 향상에 좋다.
CD는 소프트웨어를 언제든지 출시할 수 있는 상태로 해 두는 것이다. 

 

5-11
프로그램의 동작을 바꾸지 않고 소스 코드를 더 나은 형태로 수정하는 것을 리팩토링이라고 한다.

 

5-12
테스트 주도 개발에서는 테스트를 저넺로 개발을 추진한다. 구현할 코드가 테스트를 통과하는지 확인하면서 작업을 진행한다. 
테스트 코두부터 작성하기 시작하는 방법을 테스트 퍼스트라고 한다. 
이는 테스트 코드가 실패하지 않도록 코드를 수정해나간다.
XP(익스트림 프로그래밍)은 변경이 발생하는 것을 당연하게 여기고 적극적으로 대응하는 개발 기법이다.

 

5-13
ER 다이어그램은 엔티티와 관계를 모델화해서 표현한 것이다.
DFD는 정보시스템 전체에서 데이터가 어떻게 흘러가는지, 데이터가 어디에서 오가고 저장되는지를 나타내는 그림이다.

 

5-14
컴파일이나 링크 등의 작업을 빌드라고 한다. 
make나 Ant등의 툴을 사용하면 복잡한 작업을 자동화할 수 있다.

 

5-15
객체 지향은 개개의 데이터에 존재하는 구체적인 정보를 제거하고 데이터의 공통점을 뽑아내 프로그램의 설계를 생각하는 것이다.
메모리 상에 확보해 개별적으로 다루는 수 있게 하는 것을 실체화라고 하는데 이 실체화한 것을 인스턴스라고 한다.
클래스에서 실체화한 것을 모아서 오브젝트라고 한다.

 

5-16
기존 클래스를 확장해 새로운 클래스를 만드는 것을 상속이라고 한다. 
상속을 사용하면 이미 구현되어 있는 처리를 재사용할 수 있어서 개발 효율이 높아진다.
어떤 클래스를 상속해서 만들어진 클래스를 서브 클래스라고한다.
복수의 슈퍼 클래스로부터 상속하는 것을 다중 상속이라고 한다.

 

5-17
오브젝트의 인스턴스마다 할당되는 데이터를 인스턴스 변수,
같은 클래스의 모든 인스턴스에서 같은 값을 공유하는 데아터를 클래스 변수라고 한다.
언어에 따라서 필드의 값을 가져오거나 설정하기 위한 수단을 프로퍼티라고 한다.

 

5-18
오브젝트의 내부 구조가 외부에서 보이지 않도록 하는 것을 캡슐화라고한다.
이는 오브젝트 내 필드에 대한 부주의한 접근을 방지하고 내부의 데이터 구조를 변경해도 호출에는 영향을 주지 않도록 구현한다.
접근지정자는 클래스나 서브 클래스에 접근할 수 있는 범위를 지정하기 위해서 사용된다.

 

5-19
폴리모피즘은 같은 이름의 메소드를 호출해도 그 오브젝트가 생성된 클래스에 따라 다른 메소드를 실행할 수 있는 것이다.
인터페이스에서는 클래스가 구현할 메소드를 정의하고 그 메소드의 구현은 각각의 클래스에 맡긴다. 
인터페이스는 클래스에 필요한 메소드를 정의할뿐 구체적인 처리는 구현하지 않는다.

 

5-20
UML(Unified Modeling Language)는 사람이나 언어에 따라 차이가 발생하는 것을 방지하고 표현을 통일하기 위해 사용된다.
디자인 패턴은 개발자들이 자주 부딪히는 문제와 그에 대한 좋은 설계를 정리한 것이다.

 

5-21
클래스로부터 생성된 인스턴스 사이의 관계를 나타내는 것은 연관이라고 한다.
여러 클래스나 오브젝트에 공통된 성질을 부모 클래스에 모아서 정의하는 것을 일반화라고 한다.
집약이란 전체와 부분의 관계를 표현하는 방법이다.
컴포지션이란 집약 중에서도 더욱더 강하게 결합한 경우이다.

 

5-22
이름공간은 다른 이름 공간에 있는 클래스 이름과 충돌하지 않게 설계한다.
모듈이란 다른 프로그램에서 재사용할 수 있게 만든 것이다.
패키지란 여러 모듈을 한꺼번에 취급할 수 있게 묶은 것이다.

 

5-23
AOP(어스펙트 지향 프로그래밍)이란 원래 하려는 처리 이외에 공통으로 필요한 것을 횡단적 관심사라고 부르고 이것을 분리하는 방법이다. 
이는 소스 코드를 변경하지 않고 실현하고 싶은 처리를 추가할 수 있다.
DI란 외부로부터 클래스를 넘겨주는 것이다.

 

5-24
DDD(Domain-Driven-Design)이란 도메인 모델을 그대로 코드로서 구현하는 설계 기법이다. 이를 도메인 주도 설계라고 한다.
도메인 모델을 중심으로 하여, 도메인 모델과 코드를 인체화 시키면서 반복적으로 진화시켜 나간다.

 

5-25
객체 지향 프로그래밍에서 클래스로 인스턴스를 생성할 때, 반드시 실행하려는 처리가 있는데 이러한 경우에 사용하는 것이 생성자이다. 인스턴스가 생성될 때 자동으로 호출되고 반환값이 지정되지 않는다.
인스턴스가 소멸될 때 반드시 실행할 처리를 작성하기 위해 사용하는 것은 소멸자라고 한다.
이는 인스턴스가 소멸되는 타이밍에서 반드시 한번만 실행된다. 

 

5-26
큰 프로젝트에서는 작은 단위로 분할해서 관리하는데 이 분해된 단위를 태스크라고 하며 태스크별로 진척도를 관리하는 방법으로 WBS(Work Breakdown Structure)가 자주 사용된다. 
WBS는 시간으로 관리하는데 비용으로 판단하는 방법으로 EVM(Earned Value Management)가 있다.
이는 프로젝트 진척 상황을 객관적으로 파악할 수 있으며 작업 계획의 정밀도를 향상 시킬 수 있다. 

댓글