CS

    객체 지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜야 한다.

    객체 지향 프로그래밍을 설계할 때는 SOLID 원칙을 지켜야 한다.

    목차 SOLID 원칙은 누가 만들었을까? 단일 책임 원칙 SRP Single Responsibility Principle 개방/폐쇄 원칙 OCP Open Closed Principle 리스코프 치환 원칙 LSP Liskov Substituion Principle 인터페이스 분리 원칙 ISP Interface Segregation Principle 의존관계 역전 원칙 DIP Dependency Inversion Principle SOLID는 아직도 유효한가? SOLID 원칙은 누가 만들었을까? 2000년대 초 로버트 마틴이 주장한 객체지향 5원칙을 마이클 페더스가 두문자어 기억술로 소개한 것이라고 한다. 이러한 SOLID 원칙들은 시간이 지나도 유지보수와 확장이 쉬운 시스템을 만들고자 할 때 적용하면 좋은..

    [컴퓨터 구조] 시스템 버스(System Bus) 및 동작 방식

    [컴퓨터 구조] 시스템 버스(System Bus) 및 동작 방식

    목차시스템 버스(System Bus) 란?제어 버스 (Contol Bus)주소 버스 (Address Bus)데이터 버스 (Data Bus)CPU와 기억 장치간의 통신CPU와 I/O 장치간의 통신전체 시스템 구성시스템 버스(System Bus) 란?시스템 버스란 컴퓨터의 구성요소(CPU, 기억장치, I/O장치)간의 Data/신호 교환을 위한 통로입니다.제어 버스 / 주소 버스 / 데이터 버스 라는 하부 버스로 이루어집니다.쉽게 이해하자면 시스템 버스라는 버스 터미널 안에 버스가 지나다니고, 데이터와 신호들이 각 버스를 타고 이동한다고 이해하면 쉽습니다. 제어 버스 (Control Bus)제어 버스는 CPU가 시스템 내의 각종 요소들의 동작을 제어하는데 필요한 신호들을 전달하는 통로입니다.제어 선의 개수는 ..

    [소프트웨어 공학] 블랙박스 테스트-1

    [소프트웨어 공학] 블랙박스 테스트-1

    블랙박스 테스트 명세 기반 테스트(ISO/IEC/IEEE 29119) 명세에 따른 올바른 구현여부 테스트 명세 정보 등을 이용하여 테스트 케이스 설계 요구사항 분석 / 시스템 인터페이스 / UI 명세 원시 코드 정보를 이용하지 않음 사용자 입장에서 테스트 케이스 설계 가능 개발 초기 단계부터 테스트 케이스 설계 가능 단위, 통합, 시스템, 인수 테스트 전 과정에 사용 동일 명세로 구현된 여러 시스템에 재사용 가능 기능 (누락) 오류 / 명세 오류 검출 예시 입력이 1024 이하이면 입력 값, 크면 1 증가 값 반환 // BlackBoxTest.java public class BlackBoxTest { public int bTest(int x) { return x; } } 명세에 따라 1024 이하인 경우..

    [소프트웨어 공학] JUnit

    [소프트웨어 공학] JUnit

    JUnit 이란? 자바 프로그램의 단위 테스트 프레임워크 어노테이션으로 쉽고 간결한 테스트 코드 테스트를 위해 코드에 출력문을 삽입할 필요 없음 예시 src/main/java(kr.se) 폴더에서 Calc 클래스 생성 -> File -> New -> Class 선택 package kr.se; public class Calc { //Calc.java private int res=0; public void add(int x, int y) { res=x+y; } public void sub(int x, int y) { res=x-y; } public int getResult( ) { return res; } } src/test/java(kr.se) 폴더에서 CalcTest 클래스 생성 -> Flie -> N..

    [소프트웨어 공학] 소프트웨어 테스트 - 2

    [소프트웨어 공학] 소프트웨어 테스트 - 2

    테스트 프로세스 ISO/IEC/IEEE 29119 테스트 프로세스 조직 테스트 프로세스 조직 수준의 테스트 정책 및 전략 수립 테스트 목표, 원칙, 접근 방식 1년 동안 심각도 레벨1 오류 수를 5% 줄인다. 테스트 관리 프로세스 테스트 계획에 따른 수행여부 모니터링, 대응 진행 상태 측정/통제, 자원 재분배, 우선순위 조정 동적 테스트 프로세스 테스트 케이스 설계, 테스트 환경 구축하여 테스트 이슈 발생 시 레포팅 개발 단계에 따른 테스트 분류 단위 테스트(JUnit, 구글테스트, Python) 모의(Mock) 객체 사용(클래스의 객체 의존성 배제) 통합 테스트 모듈 간 상호 작용 테스트 빅뱅 통합 전략 단위 테스트 후에 한꺼번에 모듈의 통합 테스트 오류 원인 찾기 곤란 점진적 통합 전략 하향식(스텁 ..

    [소프트웨어공학] 소프트웨어 테스트 - 1

    [소프트웨어공학] 소프트웨어 테스트 - 1

    소프트웨어 테스트의 중요성 소프트웨어는 일상생활을 편리하게 하지만 문제가 발생하면 위험 사전에 문제 발생 최소화를 위한 충분한 시험 필요 소프트웨어 테스트의 정의 정적 테스팅 오류 발견 및 방지 목적의 프로그램, 문서 분석과정 동적 테스팅 오류를 발견하기 위해 프로그램을 실행하는 과정 품질 평가, 향상을 위해 프로그램을 실행하는 과정 신뢰성, 성능, 편의성, 접근성, 보안성, 안전성 등 테스트 진화 과정 오류, 결함, 오작동 용어 정의 실수(mistake): 요구사항 잘못 파악 / 오해, 철자 오류 오류(error): 프로그램의 올바르지 않은 내부 상태 선행 및 후속 조건, 무결성 위배 상태 기대 값과 실제 계산 값의 차이 결함(fault): 오류를 발생시키는 프로그램 부분 잘못된 정보 반영, 올바른 정..

    [소프트웨어 공학] 디자인 패턴 Design Pattern

    [소프트웨어 공학] 디자인 패턴 Design Pattern

    디자인 패턴 전형적인 문제들에 대한 재사용 가능한 해결책 축적된 경험 활용, 불필요한 시행착오 감소 이름을 부여해서 설계 문제와 해법 및 결과 기술 문제: 고려할 제약 사항 기술 해법: 구성 요소, 요소 간 관계 및 책임, 협력관계 기술 결과: 패턴을 적용해서 얻는 결과, 장단점 기술 공통 언어 역할, 효율적인 협업 가능 디자인한 시스템의 안정성과 성능 향상 GoF (Gang of Four) 패턴 (생성/구조/행동 패턴) Factory Method 어떤 객체를 생성할 지를 기반 클래스로부터 분리하여 파생 클래스에서 결정 (캡슐화하여 분리처리) Singleton 어디서든 참조할 수 있는 객체를 하나만 생성 Adapter 클래스의 인터페이스를 다른 인터페이스로 변환 Composite 복합 객체와 단일 객체를..

    [소프트웨어 공학] 디자인 원칙 SOLID

    [소프트웨어 공학] 디자인 원칙 SOLID

    로버트 마틴 5가지 원칙 SRP, OCP, LSP, ISP, DIP SRP(Single Responsibility Priciple) 단일 책임 원칙 클래스는 하나의 책임(수행 작업)만 부여 하나의 작업을 모두 수행 클래스 변경(수정) 씨 변경 이유도 하나 OCP(Open Closed Priciple) 개방 폐쇄 원칙 기존 코드의 변경 없이 새로운 기능 추가 독립적인 작업 단위를 클래스로 분리, 캡슐화 LSP(Liskov Substitution Priciple) 리스코프 치환 원칙 기반 클래스와 파생 클래스에서 제공하는 연산은 일관성 있는 행위(behavior) 여야 함 기반 클래스 인스턴스를 파생 클래스 인스턴스로 대체해도 프로그램의 의미 불변 Pre -> Pre` & Post` -> Post (if P..

    [소프트웨어 공학] 의존성 주입과 IoC

    [소프트웨어 공학] 의존성 주입과 IoC

    클래스 간의 의존관계 1 한 클래스가 실행할 때 다른 클래스의 서비스가 필요 public class Driver { // Driver.java private Car m; public Driver() { m = new Car(); } // 생성자 public void drive( ) { m.engineOn(); m.go(); m.stop(); m.engineOff(); } } // ↕ 높은 결합도 public class Car { // Car.java public void engineOn( ) { System.out.println(“Car engine started.”); } public void go() { System.out.println(“Car goes.”); } public void stop() ..