소프트웨어 공학
[소프트웨어 공학] 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
테스트 프로세스 ISO/IEC/IEEE 29119 테스트 프로세스 조직 테스트 프로세스 조직 수준의 테스트 정책 및 전략 수립 테스트 목표, 원칙, 접근 방식 1년 동안 심각도 레벨1 오류 수를 5% 줄인다. 테스트 관리 프로세스 테스트 계획에 따른 수행여부 모니터링, 대응 진행 상태 측정/통제, 자원 재분배, 우선순위 조정 동적 테스트 프로세스 테스트 케이스 설계, 테스트 환경 구축하여 테스트 이슈 발생 시 레포팅 개발 단계에 따른 테스트 분류 단위 테스트(JUnit, 구글테스트, Python) 모의(Mock) 객체 사용(클래스의 객체 의존성 배제) 통합 테스트 모듈 간 상호 작용 테스트 빅뱅 통합 전략 단위 테스트 후에 한꺼번에 모듈의 통합 테스트 오류 원인 찾기 곤란 점진적 통합 전략 하향식(스텁 ..
[소프트웨어공학] 소프트웨어 테스트 - 1
소프트웨어 테스트의 중요성 소프트웨어는 일상생활을 편리하게 하지만 문제가 발생하면 위험 사전에 문제 발생 최소화를 위한 충분한 시험 필요 소프트웨어 테스트의 정의 정적 테스팅 오류 발견 및 방지 목적의 프로그램, 문서 분석과정 동적 테스팅 오류를 발견하기 위해 프로그램을 실행하는 과정 품질 평가, 향상을 위해 프로그램을 실행하는 과정 신뢰성, 성능, 편의성, 접근성, 보안성, 안전성 등 테스트 진화 과정 오류, 결함, 오작동 용어 정의 실수(mistake): 요구사항 잘못 파악 / 오해, 철자 오류 오류(error): 프로그램의 올바르지 않은 내부 상태 선행 및 후속 조건, 무결성 위배 상태 기대 값과 실제 계산 값의 차이 결함(fault): 오류를 발생시키는 프로그램 부분 잘못된 정보 반영, 올바른 정..
[소프트웨어 공학] 디자인 패턴 Design Pattern
디자인 패턴 전형적인 문제들에 대한 재사용 가능한 해결책 축적된 경험 활용, 불필요한 시행착오 감소 이름을 부여해서 설계 문제와 해법 및 결과 기술 문제: 고려할 제약 사항 기술 해법: 구성 요소, 요소 간 관계 및 책임, 협력관계 기술 결과: 패턴을 적용해서 얻는 결과, 장단점 기술 공통 언어 역할, 효율적인 협업 가능 디자인한 시스템의 안정성과 성능 향상 GoF (Gang of Four) 패턴 (생성/구조/행동 패턴) Factory Method 어떤 객체를 생성할 지를 기반 클래스로부터 분리하여 파생 클래스에서 결정 (캡슐화하여 분리처리) Singleton 어디서든 참조할 수 있는 객체를 하나만 생성 Adapter 클래스의 인터페이스를 다른 인터페이스로 변환 Composite 복합 객체와 단일 객체를..
[소프트웨어 공학] 디자인 원칙 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
클래스 간의 의존관계 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() ..