본문 바로가기
자바 , 기타 공부/정보처리기사 공부

2단원 소프트웨어 개발

by 임지혁코딩 2024. 1. 6.

인수테스트 ㅡ 사용자의 요구사항 확인 (알파 , 베타) 


1. 자료 구조 ****
 
선형 구조 
1. 배열
각 데이터마다 동일한 이름 변수를 사용한다.
 
2. 선형 리스트
연속 리스트 
배열과 굉장히 유사하다. 삭제와 삽입시 해당 빈 공간을 밀어주고 땡겨주기가 필요
연결 리스트(Linked list)
HEAD와 TAIL있는 [ ] 구조 기억하지? 바로 그것 .(검색은 느리고 중간 끊어지면 찾기가 힘듬)

하지만 삽입 삭제가 되게 쉬웠다. 
 
3. 스택 
LIFO. 꽉 채워진 상태에서 OVERFLOW . 삭제할 데이터 가 없어서 UNDERFLOW 
PUSH(삽입), POP(삭제) <TOP = 0 THEN -> OVERFLOW>
후위 표기, 깊이 우선 탐색에 사용.

작업스케줄링엔 사용 불가. 차라리 수식 계산은 가능 
TOP -> 이제 곧 나갈애 
 
4. 큐
FIFO 방식. 프런트 포인터(가장 먼저 삽입된 자료-> 이제 나갈것), 리어 포인터(가장 마지막에 들어온애 ). 
작업 스케줄링에 사용 
 
5. 데크(DEQUE)
삽입과 삭제가 양쪽 끝에서 발생 가능. 
 
비선형 구조
1. 트리
2. 그래프 
VERTEX, EDGE의 집합으로 이루어짐.  
 
29 트리 ***
LEVEL 1 - LEVEL4 까지 (0부터가 아닙니다) 
DEGREE - 각 노드의 가지 수 . LEAF NODE (단말노드)
 
차수란, level이 아니라 자식이 몇개인지를 의미. 
 
PREORDER -> ROOT LEFT RIGHT
INORDER LEFT ROOT RIGHT
POSTORDER LEFT RIGHT ROOT 
 
PREFIX - > 연산자 , LEFT , RIGHT + AB
INFIX -> LEFT 연산자 RIGHT A+B
POSTFIX -> AB+
 
INFLIX-> POSTFIX (우선순위대로 묶고, 그다음에 연산자를 괄호의 바깥으로 뺴주기 )
X = A/B * (C+D) + E -> 우선순위대로 묶고, PREFIX면 왼쪽 POSTFIX면 오른쪽으로 빼준다. 
POST,PREF -> INFIX . 괄호를 묶고, 순서대로 넣어주면 된다. 
 
30 정렬 ****
삽입정렬(INSERTION SORT) -> WORST,AVERAGE 모두 O(N제곱)
1부터 시작해서, 다음 INDEX가 자기 앞의 KEY와 비교하여 알맞은 순서에 삽입. 
<바꾸는게 아니고, 해당 위치에 자기가 들어가는 거임>
85264 -> 58264 -> 25864 -> 25684->24568
 
쉘정렬 -> 매개변수로파일 구성 (평군 N1.5승, 최악 N제곱)
 
선택정렬 SELECTION SORT  <자리가 고정 > 
평균 최악 모두 O(N제곱) 
한 자리를 정해놓고, ARRAY 전체를 돌면서 , 현재 그자리의 값 보다 작으면 그 값과 바꿔준다
85624 -> 58624 -> 28654->26854->25864->24865->24685->24586->24568
 
버블솔트 
앞뒤를 비교해서 계속 뽀글뽀글하게 변경
<다만 변경시 한번 변경하도 다시 처음부터 다 찾는것임에 주의 >
85624 -> 58624->56824>56284>56248 -> 52468->24568
 
퀵소트 
평균 O NLOGN 최악 ON제곱
-> 스택이 필요하고, DIVDE AND CONQEUR . PIVOT 값 보다 작으면 왼쪽으로 
 
HEAPSORT는 둘다 ONLOGN
자식보단 내가 낫다 기억하지 ?
 
MERGESORT -> 2개씩 묶어서, 그다음은 4개씩 이렇게 반복 
 
기수정렬 BUCKETSORT -> O(dn) <버킷 필요>
 
31. 해싱 
이분 검색 (binary search)  
-> 이미 정렬이 되어있어야 되고, 그떄 중간 값을 찾아서 같은지 작은지 큰지에 따라 이동
해싱 -> 해시테이블. 해시 함수를 활용
버킷, slot, 충돌(두 레코드가 같은 주소 )
해싱 함수는 제산법(K mod Q), 제곱법(K를 제곱하고,그 중간을 홈 주소),폴딩법 (K를 여러부분으로 나누고, 각 부분의 값을 더한다),기수변환.대수적,숫자분석(숫자의 분폴에 따라 고른 곳), 난수로 가는 무작위법.
 
충돌을 방지하기 위해, 체이닝(충돌시 linked list로 이동), 개방 주소법(충돌시 다음 빈 버킷), 재해싱(새로운 해싱 함수로 )
 
32 . 데이터베이스 
통합데이터,저장 데이터,운영데이터(조직의 업무 수행을 위해 필수적이다), 공용데이터(여러 시스템들이 공동으로 소유한다)
dbms는 저장하고, db관리해주는 소프트웨어. 정의,조작, 제어 기능. (보안은 없음에 주의하자)
논리적 독립성, 물리적 독립성을 목표로 한다. (데이터간 종속이 없어야함)
스키마 -> 외부(사용자나 프로그래머가 구조 정의),개념(논리적 구조로써, 조직 전체의 db),내부(실제 제약 등)
 
33.절차형sql
c나 java와 같이 연속적인 실행 (PLSQL)
프로시저(트랜잭션 언어) (결과 반환 X혹은 여러가지를 한번에 반환), 트리거 (데이터의 입력갱신등마다 자동), 사용자 정의함수(RETURN)
PL/SQL. 구문오류등의 존재 확인. 주석 처리 .(디버깅)
 
34 단위 모듈 구현 
사용자나 다른 모듈로부터 전달받아 시작되는 프로그램. 독립적인 컴파일 .
명세서를 작성하고, 입 출력 기능을 구현한다. <단위 모듈은 한가지 기능을 구현하는 작은 모듈>/허나 모듈이라 독립적 컴파일 가능. 
대표적인게 ipc로 shared memory,socket,semaphores,message queueing 등으로 모듈간 통신 
알고리즘을 구현한다. 디바이스드라이버,네트워크,파일,메모리,프로세스 등을 구현 <입출력 구현후 알고리즘 구현으로 완성임에 주의 >
 
35 단위 모듈 테스트. 모듈 단위로 테스트를 진행하는 것. (whitebox, blackbox)
test case는 입력 데이터, 조건, 예상 결과들을 모은다 . 
식별자,테스트항복,입력,출력,환경설정, 특수 절차 요규, 의존성으로 이루어져 있다. (예상결과 value가 따로 있진 않다) 
test process(과정) 1. 계획,제어 2. 분석, 설계 3. 구현 , 실현 4. 평가 5. 완료 
 
36 개발 도구 ide
eclipse,visualstudio,xcode,안드로이드스튜디오,iDEA(인텔리제이)
코딩 컴파일 디버깅 배포 다 가능 
빌드 도구는 ANT(아파치,XML 기반 빌드 스크립트) , MAVEN(의존성을 설정하여 라이브러리 관리)
GRADLE - MAVEN + ANT (근데 더 보기 좋아)(GROOVY 활용)
협업도구 - 프로젝트는 구글 캘린더, 정보 공유는 잔디 슬랙 디자인은 제플린, 스케치. 기타는 깃, 깃허브 
 
37 소프트웨어 패키징 
패키징이란 , 배포를 위해 모듈별 실행파일을 묶는것 - 모듈화 하여 패키징
UI는 메뉴얼과 일치하게, 소프트웨어는 관리되기 쉽게, 복잡성 비효율 주의. 패키징 작업 순서는 
기능식별(기능확인)->모듈화->빌드진행(단위 모듈 별 실행파일 만들기) -> 사용자 환경분석 (운영체제,RAM등 정의) -> 패키징 적용 시험 -> 패키징 변경 개선 -> 배포 
 
38 디지털 저작권 관리 DRM
패키징 이후에, DRM 패키징이 가고 거기에 전자서명이 포함되고 클리어링하우승 ㅔ등록된다. 
클리어링 하우스에서 라이선스를 웧나는 소비자에게 발급해주고 사용한다. 제공,분배,소유자,클리어링하우스 . 패키저는 제공자 안에 있다. 메타 데이터도 .  DRM 컨트롤러로 라이선스 요청할 수 있다. 
이를 위해 암호화,키관리,암호화파일생성,식별기술,저작권표현,정책관리,크랙방지,인증등 암호기술은 다쓴다.

방화벽은 아니다. 정책은 맞고 .
 
39. 소프트웨어 설치 매뉴얼 -> 사용자 기준으로, 전 과정을 빠짐 없이 
문서 이력 , 주의 사항 , 참고사항 , 설치 도구 . CPU,OS등등 고려. 
기본사항 : 소프트웨어 개요, 설치 관련 파일, 설치 아이콘, 프로그램 삭제 관련 정보를 설명해야한다. 
기능 -> UI->설치,UNINSTALL,이상CASE 확인 후 최종 메뉴얼 적용한다. 
//거의 안봐도 되는 페이지/ / 그냥 보는 사람 보기 좋게 
 
40. 소프트웨어 사용자 메뉴얼 작성
사용자가 소프트웨어 사용할때 필요한 내용을 문서로 기록. 
필요 내용을 기술하자. 문서 이력, 사용자 메뉴얼 주석, 기록 보관을 위해 필요한 내용들을 기술한다. 
기본 사항 -> 개요,환경,관리,모델,기능구동환경 등을 설명해야 한다. // 거의 패스 
 
41 . 소프트웨어 버전 등록
형상 관리는 변경사항을 관리하는 것이다 ( 아.. 이게 형상 관리구나) 
유지 보수 단계에서도, 수행되고 비용을 줄여주고 방해가 최소화 된다. 그렇다고 비용을 관리하는건 아님에 주의  
체계적으로 추적하고 통제가 가능. 
형상식별, 버전제어, 형상 통제9변경관리)(현재 기준인 BASE LINE이 잘 반영되게 ), 형상 감사(무결성 평가), 형상 기록 (형상의 식별, 감사작업 결과 ). 
저장소(REPOISOTRY),IMPORT(가져오기. 저장소에서) , 체크아웃(저장소에서 파일 받아온다)**CHECK OUT이 나가는거니까, 저장소에서 받아오는거, 체크인 (저장소 파일을 갱신한다)**새로운놈 왔어요~ 숙소 생각, 커밋(갱신내용시 충돌, 갱신),동기화 한다. 
IMPORT -> CHECKOUT -> COMMIT -> UPDATE -> DIFF 비교 한다. 
 
42. 관리 도구 
1. 공유 폴더 방식 -> PC로 복사한후 확인하고 다시 개발자들에게 뿌린다. 
클라이언트 , 서버 방식 -> 서버 자료를 개인 PC에 뿌리고 다시 서버로. 분산 저장소 방식 -> 원격 저장소를 LOCAL로 받아서 다시 PUSH (GIT), SVM -> 아파치가 개발한 모델로, 클라이언트 서버 인데 서버에는 변경이 관리, 클라이언트에서 받아서 COMMIT하고, 작업 완료 후 MEREGE ( GIT 언어) (근데 EXPORT가 받아오기, IMPORT가 서버에 저장)
GIT ! -> 분산 관리 시스템 . BRANCH를 활용하여 다양한 기능 테스트 가능. 
CHECKOUT이 해당 브랜치로 이동, MERGE가 현재 내역을 다른 브랜치와 병합. -> 지역 저장소가 수행함.
INIT이 시작. FETCH가 가져와서 반영. 
 
43 빌드 자동화 -> GRADLE, MAVEN ANT 등이 있지 
JENKIS -> JAVA기반 오픈 소스형태로, GIT과 사용이 쉽고 , 보기가 편하다 .
GRADLE -> 안드로이드 앱 할때 이걸로 쓴다. ! 몰랐네.. 
TASK단위로 적용한다. +GROOVY사용
 
44. APPLICATION TEST 
잠재적 결함을 확인한다. 소프트웨어명,제공유형,기능유형,사용환경,개발유형,중점 사항등을 정리하여 확인한다. 
SOFTWARE -> 하드웨어를 동작시키는 것으로, 산업 범용(산업+시스템,미들,응용 소프트웨어) 산업 특화 -> 산업만을 위하여. 서비스 제공 -> 특정 기능 만을 제공 .APPLICATION은 TEST를 통해서, 실행 전에 오류 발견 가능 . 최소한의 시간과 노력으로 결함을 찾을 수 있다. APPLICATION TEST의 기본원리 . 모듈은 오류가 발생하는 것이 20%거기서 전체의 80%가 발견된다고 한다.<결함 집중<> - PARETO의 법칙 검증은, 개발자의 명세서에 맞는지 보는 (TESTCASE이고), 확인은 사용자의 요구에 맞는지 확인하는 것이다. 
 
45.APPLICATION TEST 분류정적 TEST- > 실행하지 않고 명세서나 소스코드 대상 분석. 동적 -. 실행하여 오류찾는 테스트명세구조경험기반 테스트 가능. 46. TEST 기법 에 따른 분류 WHITEBOX TEST -> 원시코드를 오픈시키고, 모든 경로를 TEST.  (BASIS PATH란, 수행 가능 모든 경로를 의미)기초 경로 검사  = 화이트박스 테스트 기법. 기초 경로 검사 -> 화이트박스 테스트 기법. 논리적 복잡성을 TEST 설계자가 측정할 수 있다. 제어 구조 검사 도 있다. 

 

기초 경로는, 모든 경로를 의미한다. TESTCASE에는, 그 결과가 포함되어야 한다. 
 
문장 검증 기준 -> 소스 코드 모든 구문이 수행되게 . 분기 검증 기준 -> 모든 조건문이 TRUE와 FALSE일때를 다 돌게 .조건 검증 기준 -> 각 조건문의 TRUE와 FALSE 모두 해볼 수 있게. 분기/조건 검증 기준 -> 둘다
 
BLACKBOX TEST -> 경로나 구조는 모르겠고.. 각 기능이 완전히 작동하는가1. 동치 분할 검사 -> 입력자료에 맞는 TEST CLASS를 각 각 생성 2. 경계값 분석 -> 경계값에서 오류가 자주 발생하므로 , 경계값을 TEST CASE로 3. 원인 - 효과 그래프 검사 -> 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 분석 , 높은 효용성 케이스 선정 오류 예측 검사 -> 확인자의 감각. 비교 검사-> 여러 VERSION에 동일한 자료 제공. 
 
즉 : BLACK BOX TEST는 TEST결과를 넣고, WHITE BOX TEST는 내부의 IF 절들에 직접 TRUE/FALSE를 넣는다.
 
47. 개발 단계에 따른 애플리케이션 테스트
 
요구사항,분석,설계,구현으로 이루어진 개발 단계 이후 단위,통합,시스템,인수 테스트인 테스트단계 (이 V 구조를 V모델)
 
단위 테스트란, 코딩 직후 모듈이나 컴포넌트에 초점을 맞춘다. 
통합 테스트란, 단위 완료된 모듈을 결합하여 테스트하는 것
시스템 테스트란, 완성된 소프트웨어가 실제로 컴퓨터에서 잘 돌아가나 확인한다. 
인수 테스트란, 사용자의 요구사항을 충족하는지를 TEST 한다. 사용자가 개발자앞에서하면 알파, 사용자가 사용자 앞에서 하면 베타가 된다. (베타 테스터들 끼리 모여서 ! 로 기억하면 쉽다)
 
48. 통합 테스트 
통합 테스트 방식에는 한번에 하는 비점진적 , 단계적으로 하는 점진적이 있다.
하향식 통합 테스트는, 프로그램의 상위 모듈부터 하위 모듈까지 한계씩 통합 시키는 것이다. (STUB은 하향식)
상향식 통합 테스트는 그 반대. ( DRIVER -> 아래에서 위로 꽂는 드릴 . )
통합과 회귀도 있으며, 회귀는 통합 이후 이미 진행한 프로그램을 반복 반복 하는 것이다.
 
49. TEST CASE **
입력, 실행 조건, 기대 결과 등에 대한 명세서 . 설계 단계에서 작성한다. 
테스트 계획 검토, 자료 확보 -> 위험 평가, 우선순위 결정 -> 요구사항 정의 -> 테스트 구조 설계 -> 테스트 케이스 정의 -> 타당성 확인, 유지 보수 . 
TEST ORACLE이란 개념은. 사전에 정의 된 참 값을 활용 하는 방법이다. <통과의 기준을 정의>
참 ORACLE (모든 입력값에 대한 결과를 제공 ) -> SAMPLING은 몇몇 케이스에 대해서만 -> 추정(휴리스틱)은 특정 케이스만 기대 결과를, 나머지는 추정하여 나타낸다 -> 일관성 ORACLE은 TEST 수행 전 후의 동일을 확인한다. 
 
 
50. 테스트 자동화
장점은 인력을 보존하지만, 단점은 학습과 또 자동화 비용이 든다. 
도구에는 정전 분석도구, 테스트 케이스 생성 도구, 테스트 실행 도구, 성능 테스트 도구, 테스트 통제 도구, 테스트 하네스 도구 등이 있다. 
테스트 하네스는 특히 APPLICATION의 모듈을 테스트하는 환경으로, 테스트를 위한 코드와 데이터를 의미한다. 
테스트 드라이버가 하위 모듈을 호출하는 도구가 된다. TEST DRIVER는 하위임에 주의. 
(우리가 인텔리제이로 작성하는 것) (STUB,DRIVER는 자동화가 아님에 주의 )
 
51 결함 관리 . (사실상 PASS 하자) 
HIGH,M EDIUM, LOW로써 기대결과와 실제 결과의 차이를 의미한다. 오류가 있을 경우 FAULT가 발생한다 .
 
52 복잡도** 
BIG O 최악, 세타 평균, 오메가는 최상일때를 말한다. 
O(1) -> 입력값에 상관없이 일정하계 거친다. EX) STACK과 HASH의 삽입 삭제, PYTHON DICT 까지 
O(LOG N) -> 조건에 의해 문제 해결시 거치는 단계가 감소 EX) BINARY SEARCH
O(N)- > 1:1의 관계.(FOR문) O(NLOGN)-> 그만 큼 수행된다 (EX)HEAPSORT,MERGESORT)
-> O(N제곱) EX) 2중루프, QUICKSORT WORST, SELECTION SORT 등등 
-> O (2의 N승) EX)피보나치 수열 
 
순환 복잡도 = 화살표의 수 - 노드의 수 +2
 
53. 소스코드 최적화 
CLEAN CODE : 누구나 쉽게 이해할 수 있는 것
BAD CODE -> LOGIC이 복잡하고 어려운거 ,코드 끼리 얽혀있는 스파게티 코드 , 오래된 코드를 쓴 외계인 코드 등. 
 
가독성,단순성(한번에 한기능), 의존성 배제, 중복성 최소화 , 추상화 (상위 계층은 특성만, 하위에서 구현)
소스 코드 품질 분석 도구 :
정적 분석 도구는 실행하지 않고 분석해준다. 자료의 흐름을 파악한다.  EX) CCM,PMD
동적 분석 도구 : AVALANCHE, VALGRIND 등이 있다. 
PMD는 LINUX,WINDOWS, CPP(C++)CHECK는 WIDNOWS, SONARQUBE.CHECKSTYLE,CCM,COBETRUA등은 정적,
AVALANCHE,VALGRIND는 동적이다. VALMETER등도 이에서 나왔다. 
 
54. 모둘갼 공통 기능, 인터페이스 확인
공통기능은 공통 제공 기능을 의미, 인터페이스 설계서는 데이터 교환, 처리를 위한 것 
 
55. 모듈 연계를 위한 인터페이스 기능 식별 
EAI는, 기업 내부에서 각종 애플리케이션과 플랫폼 끼리 정보를 전달하고 연계 통합등을 가능하게 해주는 솔루션이다.
EAI의 구축 유형
1. POINT TO POINT -> 애플리케이션 끼리 1:1 연결
2. HUB&SPOKE -> 중앙 중심 HUB에, SPOKE들이 있는 중앙 집중형 방식이다. 
3. Message Bus (ESB) -> 애플리케이션 사이에 미들웨어(BUS)를 두는 형태의 방식
4. HYBRID -> HUB&SPOKE와 MEESAGE BUS의 혼합 방식
 
연계 기능을 식별하기도 한다. 외부 모듈에는 급여 계산, 급여 결과 확인 . 
내부 모듈에는 급여 전표 발생 (내부에서 정보를 계산한다) -> 외부랑 유사하다 
 
56. 모듈간 인터페이스 데이터 표준 확인 
데이터 표준은 인터페이스에서 사용되는 데이터의형식을 의미한다. 
데이터 표준 -> 인터페이스 표준 -> 최종 인터페이스 데이터 표준을 확인한다. 
입력값(급여 코드, 계산결과) 에 따른 출력 정보를 확인한다 .
인터페이스 기능과 데이터 인터페이스를 통해 데이터 데이터 표준을 확인한다.
 
57. 인터페이스의 구현
인터페이스는 송 수신 시스템 간의 데이터 교환과 처리를 실현한다. 
주로 JSON 혹은 XML 형식을 사용한다.
 
*** JSON 
속성 - 값 쌍으로 이루어진 데이터를 전송하는 포멧
XML -> HTML과 SGML의 복잡함을 해결하기 위한 다목적 언어
AJAX -> JS등을 이용하여 JAVASCRIPT를 사용하는 기술 ! 
 
58 인터페이스 보안 **인터페이스가 시스템 모듈간 정보 교환과 통신을 위해 사용되므로 , 보안이 중요하다 .네트워크 영역 : 스니핑등을 통한 데이터 탈취 방지 -> IPSEC,SSL ,HTTPS등애플리케이션 영역 -> 코드상의 보안 보완데이터베이스 -> PROCEDURE, TRIGGER 등 주의 
 
무결성을 어떻게 검사하지 ?  HASH를 사용해서 DB의 상태 변경을 검사
TRIPWIRE ,AIDE , FCHECK 등등
 
59 인터페이스 구현 검증 
인터페이스가 잘 동작하나? 
XUNIT(같은 TESTCODE를 다시 작성하지 않게 도와주는 프레임워크)
STAF (서비스 호출과 컴포넌트 재사용 등을 지원 ) <STAB처럼 잘라서 , 분산에 사용>
FITNESS 웹 기반 TEST 지원
NTAF FITNESSE의 높은 협업 기능과 STAF의 재사용성을 합친 것 ! NAVER가 만들었다 . NAVER STAF
WATIR RUBY를 사용한다. 
 
APM등이 성능 관리를 담당한다. (감시하는 도구이다)
검증 도구 , 감시도구의 요건을 분석한다. 
구현검증도구로 동작 상태를 확인한다. 
 
접근성 또한, 사용성에 속하고 설치성은 이식성이다. 

 

테스트 오라클 

1. 샘플링 오라클 : 몇몇 값에 대해서만 그 값을 제공

2. 참 오라클 : 모든 테스트에 대해서 제공

3. 휴리스틱 : 특정 값은 입력 결과를 제공. 나머지는 추정

4. 일관성 검사 : 수행 전과 후의 값이 일치한지를 확인