소프트웨어 공학

    [소프트웨어 공학] 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() ..

    [소프트웨어 공학] Maven

    [소프트웨어 공학] Maven

    Maven 이란? 빌드 자동화 도구(프로젝트 관리, 라이브러리 관리) 일반적인 빌드 과정 절차 소스코드 컴파일 테스트 프레임워크를 이용한 테스트 배포 가능한 형태(.jar, .war)로 패키징 지역/원격 저장소로 배포 빌드 결과 등의 레포트 생성 Maven의 빌드 라이프 사이클 처음 단계부터 해당 단계까지 순차적으로 실행 골(Goal): 각 단계(Phase)에서의 수행 작업 (플러그인:골) 플러그인(plug-in): 각 단계에 연결되어 골들을 실행 pom.xml(project object model): 프로젝트 root에 존재하는 파일로, 프로젝트 정보 및 의존성 관리, 단계별 골 설정 Maven의 표준 라이프 사이클 default: 기본적인 빌드 절차 report: 프로젝트 문서와 사이트 작성 clea..

    [소프트웨어 공학] 객체지향 개발 프로세스

    [소프트웨어 공학] 객체지향 개발 프로세스

    요구사항 설문, 인터뷰, JPR (Joint requirement planning) 등을 이용하여 이해 관련자로부터 수집, 용어집으로 용어 표준화 기능적 요구사항(유스케이스 다이어그램) 문제 해결을 위해 시스템이 제공해야 할 서비스 비기능적 요구사항 (부가사항 명세서) 시스템 품질: 신뢰성, 가용성, 성능, 편의성, 접근성, 보안성 제약사항 설계,구현/하드웨어/인터페이스 등의 제약사항 국제 (표준) 구격 요구사항 검증 기준 명확성: 일치된 해석 완전성: 모든 정보 기술 일관성 요구사항 간의 모순이 없어야 함 실현할 수 없을 정도의 많은 제약사항 회피 추적 가능성: 추적할 수 있도록 각 요구사항에 id 부여 검증 가능성: 정량화, 명확한 계량적 기준 사용자 관점 (WHAT o HOW x) 사용/구현 기술보..