Computer Science

프로그램 테스트는 프로그램이 의도한 대로 작동하고, 사용하기 전에 프로그램 결함을 발견하기 위해 수행되는 작업ㅇ디ㅏ. 테스트를 할 때는 인위적인 데이터를 사용하여 프로그램을 진행한다. 테스트의 결과를 확인하여 오류, 이상 현상 또는 프로그램의 비기능적 속성에 대한 정보를 확인한다. 오류의 존재를 확인할 수 있지만, 오류의 부재를 볼 수는 없다. 테스트의 주된 목표는 소프트웨어가 요구사항을 충족시키는지를 개발자와 고객에게 증명하기 위해서이다. 맞춤형 소프트웨어 요구 사항 문서에 기재된 각 요구사항에 대해 적어도 하나의 테스트가 있어야 한다. 일반소프트웨어 모든 시스템 기능과 이러한 기능들의 조합에 대한 테스트 결함테스트는 시스템 충돌, 다른 시스템과의 상호작용, 잘못된 계산 및 데이터 손상과 같은 원하지 ..
소프트웨어 설계와 구현은 소프트웨어 공학 프로세스의 단계로, 실행 가능한 소프트웨어 시스템이 개발되는 단계이다. 설계와 구현활동은 분리된 활동이 아닌, 항상 상호간섭되는 활동이다. 설계는 고객의 요구에 기반하여 소프트웨어 구성 요소와 그들의 관계를 식별하는 활동이고, 구현은 설계를 프로그램으로 구체화하는 과정이다. 즉 두 개를 분리할 수 없다. 객체지향 설계과정은 조직에 따라 다양한 방식으로 이루어지지만, 일반적인 활동은 다음과 같다. 시스템의 context와 사용 용도를 정함. 시스템 아키텍처를 설계 주요한 시스템 객체를 식별 설계 모델 개발 객체 인터페이스 명세 소프트웨어와 외부 환경 간의 관계를 이해하는 것은 필수적이다. 왜냐하면, 필요한 시스템을 제공하고, 외부환경과의 통신을 위해 어떻게 구성할지..
📕SOLID원칙 객체지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발 원칙을 말한다. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방 폐쇄 원칙 LSP(Listov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 역전 원칙 SOLID 객체 지향 원칙을 적용하면 코드를 확장하고 유지 보수 관리하기가 더 쉬워지며, 불필요한 복잡성을 제거해서, 프로젝트 개발의 생산성을 높일 수 있다. SOLID의 5가지 원칙들은 서로 개념적으로 연관되어..
우선 객체지향을 설명하기 전에 객체지향의 반대말인 절차적 프로그래밍에 대해서 설명하겠습니다. 그러는 편이 왜 객체지향을 사용하는지 이해하기 편할것입니다. 📕절차적 프로그래밍 📗절차적 프로그래밍의 정의 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 💡장점 컴퓨터의 처리 구조와 유사해 실행속도가 빠르다. 각 프로그램의 흐름을 쉽게 추적할 수 있다. 💡단점 각 코드가 매우 유기성이 높아 유지보수가 어렵다. 실행순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다. 절차적 프로그래밍에서 절차는 함수를 의미한다. 절차적 프로그래밍이란, 반복되는 동작을 함수 및 프로시저 형태로 모듈화하여 사용하는 방식이다. 말이..
Network Layer 이번글에서는 IP protocol에 대해서 써볼까 합니다. 인터넷프로토콜(IP, Internet Protocol) 송신호스트와 수신 호스트가 패킷을 교환할 때 사용되며, 데이터 패킷을 목적지로 전달하는 역할을 수행합니다. IP protocol은 비연결성 프로토콜로, 데이터의 신뢰성을 보장하지 않습니다. 하지만 이러한 IP 프로토콜은 Transport 계층에 TCP, UDP와 함께 사용될 수 있어, 부족한 점을 보완할 수 있습니다. IP Datagram format 기본적으로 IP header는 패킷을 어디로 어떻게 보낼지에 대한 정보를 담고 있습니다. ver IP 프로토콜의 버전 정보 ex) IPv4, IPv6 헤더 길이 IP datagram 헤더의 길이를 나타낸다. 일반적으로 ..
이번 글은 Network Layer에 대해서 설명해 보겠습니다. 우선 Network Layer는 Transport Layer 아래에 위치합니다. Network layer의 핵심 기능 Forwarding data plane이 담당 패킷이 들어왔을 때, 보내주는 기능 Routing control plane이 담당. 들어온 패킷을 어디로 보낼지 판단하는 기능 판단하는 과정을 Routing table을 보고 판단함. 간단하게 두 기능을 여행에 비유해 설명해 보자면, forwarding은 여행을 하는데 고속도로를 통과하는 것처럼 그저 나아가는 작업입니다. routing은 여행에서 출발지에서 목적지까지의 경로를 계획하는 과정입니다. 자 그러면 이러한 기능들을 해주는 Data plane과 Control plane은 ..
이전 글에서는 congestion control을 해야 하는 이유에 대해서 설명했습니다. 중요 단어를 짚고 넘어가자면, cwnd (congestion window) sender가 ack를 받기 전에 보낼 수 있는 패킷양을 의미합니다. cwnd값이 증가하면 더 빠르게 데이터를 전송할 수 있다. 이 값을 적절하게 잘 조절하는 것이 congestion control의 목표이다! 이번 글에서는 어떤 식으로 혼잡을 회피하는지에 대해서 설명하겠습니다. AIMD (Additive Increase & Multiplicative Decrease) 말 그대로 합 증가, 곱 감소 알고리즘이다. 패킷 로스가 발생하지 않는다면 전송률을 점진적으로 증가시키다가, loss가 감지되면 전송률을 반으로 감소시키는 방식이다. AIMD ..
Congestion이 무엇이냐? 사전적 의미는 혼잡, 과잉이라는 뜻을 가지고 있습니다. 네트워크에서 너무 많은 것들이 한정된 공간을 사용하려고 할 때 발생하는 상황을 가리킵니다. 네트워크에서 Congestion이 일어나면, 딜레이가 길어지고, 패킷이 유실되는 상황이 발생합니다. Congestion control과 flow control은 다른 개념입니다. Congestion control은 네트워크의 트래픽이 많아져 네트워크의 성능이 저하되는 혼잡 상태를 관리하는 기술이고, Flow control은 송신자와 수신자 간의 데이터 전송 속도를 조절하여 오버플로우를 방지하는 기술입니다. 각각은 다른 개념이지만 함께 사용되어 네트워크의 효율적인 데이터 전송을 가능하게 해 줍니다. Congestion의 원인과 비..
TCP는 신뢰성 있는 연결을 하는 프로토콜입니다. UDP랑 다르게 연결을 시작할 때도 복잡한 과정을 거칩니다. 연결을 시작하기전에, 송신/수신의 상태를 확인하는 과정이 필요합니다. 2-way handshake TCP 연결을 수립하는 방법 중 하나입니다. 클라이언트에서 연결을 하고싶다고 제안하면, 서버 측에서 승낙하는 방식입니다. 동작 방식 클라이언트가 서버에게 연결을 요청합니다. 이때 Headr의 SYN bit를 1로 설정하여 보냅니다. 서버가 연결이 가능할 경우, 클라언트에게 응답을 보냅니다. TCP header의 ACK,SYN bit를 1로 설정하여 보냅니다. 클라이언트가 서버로 부터 받은 ACK 패킷과, SYN 패킷을 확인하고, 데이터를 전송합니다. 설명의 편의를 위해서 왼쪽을 A, 오른쪽을 B라고..
재한
'Computer Science' 카테고리의 글 목록 (3 Page)