| 방법 | 내용 |
|---|---|
| 동료 검토 | 요구사항 명세서 작성자가 설명, 동료들이 들으며 결함 발견 |
| 워크 스루 | 사전 검토 후, 짧은 검토 회의를 통해 결함 발견 |
| 인스펙션 | 다른 검토 전문가들이 확인하며 결함 발견 |
인터페이스 구현 검증 도구
| 도구 | 설명 |
|---|---|
| xUnit | Java, C++, .Net 등 언어를 지원하는 단위 테스트 프레임워크 |
| STAF | 다양한 환경 지원하는 프레임워크 데몬이 프로그램 테스트에 대한 응답을 대신함 |
| FitNesse | 웹 기반 테스트 케이스 설계, 실행 등을 지원하는 테스트 프레임워크 |
| NTAF | FitNesse의 협업기능과 STAF의 재사용 및 확장성 통합한 NHN의 테스트 자동화 프레임워크 |
| Selenium | 다양한 브라우저 및 개발 언어 지원하는 웹 애플리케이션 테스트 프레임워크 |
| Watir | Ruby 사용하는 애플리케이션 테스트 프레임워크 |
소프트웨어 품질 관련 표준
| 표준 | 설명 |
|---|---|
| ISO/IEC 9126 | 소프트웨어의 품질 특성과 평가를 위한 국제 표준 |
| ISO/IEC 25010 | ISO/IEC 9126에 호환성과 보안성 강화한 소프트웨어 제품에 대한 국제 표준 |
| ISO/IEC 12119 | 패키지 소프트웨어의 일반적인 제품 품질 요구사항 및 테스트를 위한 국제 표준 |
| ISO/IEC 14598 | 소프트웨어 품질의 측정과 평가에 필요 절차를 규정한 표준 |
| 특성 | 내용 |
|---|---|
| 기능성 | 사용자의 요구사항을 정확하게 만족하는 기능을 제공하는지 여부 |
| 신뢰성 | 제한 시간동안 주어진 기능을 오류없이 수행할 수 있는 정도 |
| 사용성 | 사용자가 정확히 이해하고 사용하며, 향후 재사용 희망 여부 정도 |
| 효율성 | 사용자가 요구하는 기능을 얼마나 빠르게 처리 가능한지 |
| 유지 보수성 | 환경변화 또는 새로운 요구사항이 발생했을 때 소프트웨어를 개선하거나 확장할 수 있는 정도 |
| 이식성 | 다른 환경에서 얼마나 쉽게 적용 가능한지 |
애플리케이션에 잠재되어 있는 결함을 찾아내는 일련의 행위 또는 절차
애플리케이션 테스트의 기본 원리
| 기본 원리 | 설명 |
|---|---|
| 완벽한 테스트 불가능 | 소프트웨어의 잠재적인 결함은 줄일 수 있지만, 결함이 없다고 증명은 불가 |
| 파레토 법칙 | 애플리케이션의 20%에 해당하는 코드에서 전체 결함의 80%가 발견된다는 법칙 |
| 살충제 패러독스 | 동일한 테스트 케이스로 동일한 테스트를 반복하면 더이상 결함이 발견되지 않는 현상 |
| 테스팅은 정황(Context)의존 | 정황에 따라 테스트 결과가 달라질 수 있으므로, 정황에 따라 테스트를 다르게 수행해야 함 |
| 오류-부재의 궤변 | 소프트웨어 결함을 모두 제거해도 사용자 요구사항을 만족시키지 못하면 품질이 높다고 말할 수 없음 |
| 테스트와 위험은 반비례 | 테스트를 많이 하면 할수록 미래에 발생할 위험을 줄일 수 있음 |
| 테스트의 점진적 확대 | 테스트는 작은 부분에서 시작하여 점점 확대하며 진행해야 함 |
| 테스트의 별도 팀 수행 | 테스트는 개발자와 관계없는 별도의 팀에서 수행해야 함 |
프로그램 실행 여부에 따른 테스트
| 종류 | 설명 |
|---|---|
| 정적 테스트 | - 프로그램을 실행하지 않고, 명세서나 소스 코드를 대상으로 분석하는 테스트 - 종류 : 워크스루, 인스펙션, 코드 검사 등 |
| 동적 테스트 | - 프로그램을 실행하여 오류를 찾는 테스트 - 종류 : 블랙박스 테스트, 화이트박스 테스트 |
화이트박스 테스트
| 검사 종류 | 설명 |
|---|---|
| 기초 경로 검사 | - 테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해줌 |
| 제어 구조 검사 | - 조건 검사 : 프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법 - 루프 검사 : 프로그램의 반복(loop) 구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법 - 데이터 흐름 검사 : 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 설계 기법 |
화이트박스 테스트의 검증 기준(=커버리지)
| 기준 | 설명 |
|---|---|
| 문장 검증 기준 | 모든 구문이 한 번 이상 수행 |
| 분기 검증 | 모든 조건문이 한 번 이상 |
| 조건 건증 | 모든 조건문에 대해 조건이 T인 경우와 F인 경우가 한 번 이상 수행 |
| 분기/조건 검증 기준 | 모든 조건문과 각 조건문의 개별 조건식에 결과가 T인 경우, F인 경우가 한 번 이상 수행 |
| 구문(문장) 커버리지 | 모든 명령문을 한 번 이상 수행 |
| 결정(선택, 분기) 커버리지 | 전체 조건식이 적어도 한번은 T와 F의 결과 수행 |
| 조건 커버리지 | 개별 조건식이 적어도 한 번은 T와 F의 결과 수행 |
| 조건/결정 커버리지 | 전체 조건식 뿐 아니라 개별 조건식도 T 한 번, F 한 번의 결과가 나오도록 수행 |
| 변경 조건/결정 커버리지 | 개별 조건식이 전체 조건식에 독립적으로 영향을 주도록 함 |
| 다중 조건 커버리지 | 결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지 |
블랙박스 테스트
| 종류 | 설명 |
|---|---|
| 동치 분할 검사 | - 입력 자료 개수를 균등하게 - 동등 분할 기법 |
| 경계값 분석 | - 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법 |
| 원인-효과 그래프 검사 | - 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 분석 |
| 오류 예측 검사 | 과거의 경험이나 확인자의 감각으로 테스트 |
| 비교 검사 | 여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트 |
시간 복잡도
| 종류 | 설명 |
|---|---|
| 빅오 표기법 (Big-O Notation) | 알고리즘의 실행시간이 최악일 때 표기법 |
| 세타 표기법 (Big-Θ Notation) | 알고리즘의 실행시간이 평균일 때 표기법 |
| 오메가 표기법 (Big-Ω Notation) | 알고리즘의 실행시간이 최상일 때 표기법 |
빅오 표기법 - 시간 복잡도
| 종류 | 예시 |
|---|---|
| O(1) | 스택의 삽입(push), 삭제(pop) 등 |
| O(logn) | 이진트리, 이진 검색 등 |
| O(n) | for 문 |
| O(nlogn) | 힙 정렬, 합병 정렬 등 |
| O(n^2) | 삽입 정렬, 선택 정렬, 버블 정렬, 퀵 정렬 등 |
| O(2^n) | 피보나치 수열 등 |
소스 코드 품질 분석 도구
| 종류 | 설명 |
|---|---|
| 정적 분석 도구 | 실행하지 않고 분석 - 종류 : pmd, cppcheck, SonarQube, checkstyle 등 |
| 동적 분석 도구 | 실행하여 분석 - 종류 : Avalanche, Valgrind 등 |
DDL(Data Define Language, 데이터 정의어)
| 명령어 | 기능 |
|---|---|
| CREATE | SCHEMA, DOMAIN, TABLE, VIEW, INDEX 를 정의 |
| ALTER | TABLE에 대한 정의를 변경하는데 사용 |
| DROP | SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제 |
CAD로 외움CREATE TABLE 학생
(이름 VARCHAR(15) NOT NULL,
학번 CHAR(8),
전공 CHAR(5),
성별 SEX,
생년월일 DATE,
PRIMARY KEY(학번),
FOREIGN KEY(전공) REFERENCES 학과(학과코드)
ON DELETE SET NULL
ON UPDATE CASCADE
CONSTRAINT 생년월일제약
CHECK(생년월일) >= '1980-01-01'));
CREATE VIEW 고객(성명, 전화번호)
AS SELECT 성명, 전화번호
FROM 고객
WHERE 주소 = '서울시';
// 학생 테이블에 최대 3문자로 구성되는 학년 속성을 추가하시오.
ALTER TABLE 학생 ADD 학년 VARCHAR(3);
// 학생 테이블의 학번 필드의 데이터 타입과 크기를 VARCHAR(10)으로 하고, NULL 값이 입력되지 않도록 변경하시오.
ALTER TABLE 학생 ALTER 학번 VARCHAR(10) NOT NULL;
DROP TABLE 학생 CASCADE;
DCL(Data Control Language, 데이터 제어어)
| 명령어 | 설명 |
|---|---|
| COMMIT | 수행 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료됨을 관리자에게 알려줌 |
| ROLLBACK | 비정상적으로 종료되었을 때, 원래대로 복구 |
| GRANT | 데이터베이스 사용자에게 권한 부여 |
| REVOKE | 데이터베이스 사용자의 사용 권한 취소 |
CRGR 로 외움// 사용자 PARK에게 테이블 STUDENT의 데이터를 갱신할 수 있는 시스템 권한을 부여하고자 함
GRANT UPDATE ON STUDENT TO PARK;
// 사용자 PARK에게 테이블을 생성할 수 있는 권한을 부여
GRANT CREATE TABLE TO PARK;
DELETE FROM 사원 WHERE 사원번호 = 40;
COMMIT;
ROLLBACK TO s2;
SAVEPOINT S1;
DELETE FROM 사원 WHERE 사원번호 = 20;
DML(Data Manipulation Language, 데이터 조작어)
| 명령어 | 설명 |
|---|---|
| SELECT | 테이블에서 튜플 검색 |
| INSERT | 새로운 튜플 삽입 |
| DELETE | 튜플 삭제 |
| UPDATE | 튜플 내용 갱신 |
SIDE로 외움// 제품(제품명, 단가, 제조사) 테이블을 대상으로
// H 제조사에서 생산한 제품들의 단가보다
// 높은 단가를 가진 제품의 정보를 조회하시오.
SELECT 제품명, 단가, 제조사
FROM 제품
WHERE 단가 > ALL
(SELECT 단가
FROM 제품
WHERE 제조사 = 'H');
SELECT 부서
FROM 사원
WHERE 이름 = (SELECT 이름 FROM 취미 WHERE 특기 = '춤');
GROUP BY
특정 속성을 기준으로 그룹화하여 검색
그룹 함수
| 함수명 | 설명 |
|---|---|
| COUNT(속성) | 그룹별 튜플 수 |
| SUM(속성) | 그룹별 합계 |
| AVG(속성) | 그룹별 평균 |
| MAX(속성) | 그룹별 최대값 |
| MIN(속성) | 그룹별 최소값 |
HAVING
집합 연산자
| 연산자 | 설명 |
|---|---|
| UNION (합집합) | - 두 SELECT 문의 조회 결과 통합 - 중복행은 한 번만 |
| UNION ALL (합집합) | - 중복된 행 그대로 출력 |
| INTERSECT (교집합) | 두 SELECT 문의 조회 결과 중 공통된 행만 출력 |
| EXCEPT (차집합) | 첫 번째 SELECT문 결과 - 두 번째 SELECT 문 결과 출력 |
INSERT INTO 부서 VALUES(10, '영업부');
//사원 테이블에 있는
//편집부의 모든 튜플을
//편집부원(이름, 생일, 주소) 테이블에 삽입하시오
INSERT INTO 편집부원(이름, 생일, 주소)
SELECT 이름, 생일, 주소
FROM 사원
WHERE 부서 = '편집';
DELETE
FROM 사원
WHERE 이름 = '김이박';
// 사원 테이블에서 박이김의 부서를 기획으로 변경하고, 기본급을 5만원 인상시켜라.
UPDATE 사원
SET 부서 = '기획', 기본급 = 기본급 + 5
WHERE 이름 = '박이김';
// 세 SELECT 문 모두 같은 역할
SELECT 학번, 이름, 학생, 학과명
FROM 학생, 학과
WHERE 학생.학과코드 = 학과.학과코드;
SELECT 학번, 이름, 학생.학과코드, 학과명
FROM 학생 NATURAL JOIN 학과;
SELECT 학번, 이름, 학생, 학과코드, 학과명
FROM 학생 JOIN 학과 USING(학과코드);
OUTER JOIN
SELECT 학번, 이름, 학생, 학과코드, 학과명
FROM 학생 LEFT OUTER JOIN 학과
ON 학생.학과코드 = 학과.학과코드;
SELECT 학번, 이름, 학생, 학과코드, 학과명
FROM 학생, 학과
ON 학생.학과코드 = 학과.학과코드(+);
묵시적 커서
| 종류 | 설명 |
|---|---|
| SQL%FOUND | 패치된 튜플 수가 1개 이상이면 TRUE |
| SQL%NOFOUND | 패치된 튜플 수가 0개이면 TRUE |
| SQL%ROWCOUNT | 패치된 튜플 수 반환 |
| SQL%ISOPEN | 커서가 Open 상태이면 TRUE |
명시적 커서
CURSOR 커서명(매개변수1, 매겨변수2, ...)
IS
SELECT문;
OPEN 커서명(매개변수1, 매개변수2, ...);
FETCH 커서명 INTO 변수1, 변수2, ...;
CLOSE 커서명
| 기술 | 특징 |
|---|---|
| JDBC (Java Database Connectivity) | Java 언어로 다양한 종류의 데이터베이스에 접속할 때 사용하는 표준 API |
| MyBatis | JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크 |
소프트웨어 개발 생명주기 (SDLC: Software Development Life Cycle)
| 요소 | 설명 |
|---|---|
| 기밀성 (Confidentiality) | 시스템 내의 정보와 자원은 인가된 사용자에게만 접근 허용 |
| 무결성 (Integrity) | 인가된 사용자만 수정 가능 |
| 가용성 (Availability) | 시스템 내 정보와 자원을 언제든지 사용 가능 |
| 인증 (Authentication) | 합법적인 사용자인지 확인하는 과정 |
| 부인 방지 (NonRepudiation) | 데이터를 송수신한 자가 송수신 사실을 부인할 수 없도록 송수신 증거를 제공 |
기무가(CIA)| 보안 약점 | 설명 |
|---|---|
| SQL Injection | SQL을 삽입하여 내부 DB 서버의 데이터 유출 및 변조 등을 수행 |
| XSS | 악의적인 스크립트를 삽입하여, 정보 탈취 및 비정상적 기능 수행 유발 |
| OS Command Injection | 시스템 명령어 실행을 유도함으로써 권한 탈취 및 시스템 장애 유발 |
| Memory Buffer Overflow | 메모리 공간의 범위를 오버하여 기존 프로그램의 의도와 다른 기능을 수행하도록 유발 |
접근 제어자
| 접근 제어자 | 클래스 | 패키지 | 하위클래스 | 패키지 외부 |
|---|---|---|---|---|
| Public | O | O | O | O |
| Protected | O | O | O | X |
| Default | O | O | X | X |
| Private | O | X | X | X |
대칭키 암호화(Symmetric Encryption) 기법
| 종류 | 설명 |
|---|---|
| 스트림 암호화 | 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화 하는 방식 종류 : LFSR, RC4 |
| 블록 암호화 | 한 번에 하나의 데이터 블록을 암호화 종류: DES, SEED, AES, ARIA |
| 알고리즘 종류 | 설명 |
|---|---|
| DES (Data Encryption Standard) | NIST에 의해 결정 64비트 블록 암호화 알고리즘 56비트 크기의 암호화 키 |
| AES (Advanced Encryption Standard) | DES의 한계를 커버 128비트 암호화 블록 다양한 키의 길이 |
| SEED | 한국인터넷진흥원과 국내 암호전문가들 128비트 블록 암호 알고리즘 |
| ARIA | 국가보안기술연구소 주도로 개발한 국가 암호화 알고리즘 128비트 블록 암호 알고리즘 |
| IDEA | 128비트의 키 사용, 64비트 평문을 8라운드를 거쳐 64비트의 암호문 생성 모든 연산이 16비트 단위로 이루어져 16비트 프로세서에서 구현이 용이 |
| RC5 | RSA 연구소 개발 입출력, 키, 라운드 수가 가변인 블록 암호 알고리즘 DES의 10배 속도 32/64/128비트 키 |
비대칭키 암호화(Asymmetric Encryption) 기법
| 알고리즘 종류 | 설명 |
|---|---|
| MD 알고리즘 | MIT, RSA 함께 개발 블록크기 512비트(=64bytes), 해시 결과값 길이 128비트(=16bytes) |
| SHA 알고리즘 | NSA에 의해 개발 160비트 값 생성, MD4가 발전한 형태 MD5보다는 느리지만 안전 입력 데이터 512비트 블록 |
서비스 거부(DoSL Denial of Service) 공격
| 공격 | 설명 |
|---|---|
| 스미싱 | 악성 피싱 링크가 포함된 SMS로 사용자의 개인 정보를 탈취하는 수법 |
| 스피어 피싱 | 사회공학 기법으로, 특정 대상에게 의도적인 메일을 지속적으로 발송하여 사용자의 개인 정보 탈취 |
| APT (Advanced Persistent Threats) | 조직적으로 특정 기업이나 네트워크에 침투해 활동 거점을 마련한 후, 보안을 무력화시키고 정보를 수집하여 외부로 빼돌리는 형태 -> 스턱스넷(Stuxnet)과 같이 악성코드가 담긴 USB 등으로 전파하는 형태 |
| Sniffing | 네트워크 중간에서 남의 패킷 정보를 도청하는 유형 |
| 공격 | 설명 |
|---|---|
| 웜 | 네트워크를 통해 자신을 복제 DoS 공격, 슬래머 등이 웜 공격의 형태 |
| 제로 데이 | 취약점의 존재가 알려지기 이전에 발견하여, 해당 취약점을 통해 공격하는 방법 |
| 랜섬웨어 | 사용자의 PC에 침투한 후, 암호화하여 금전을 요구 |
| 백도어 | 시스템 보안이 취약한 곳을 통해 만들어 놓은 통로 |
| 트로이 목마 | 정상적인 기능을 수행하는 프로그램으로 위장해 있다가, 동작할 때 활성화되는 기법, 자가 복제X |