컴퓨터 지원 소프트웨어 공학(computer-aided software engineering: CASE)= 컴퓨터 지원 시스템 공학
- 시스템 개발 방법론들의 자동화를 지원하는 소프트웨어 도구를 제공해 개발자의 반복적인 작업량을 줄이도록 하는 것
- CASE 도구들은 차트와 다이어그램을 자동으로 생성하는 그래픽 기능, 화면과 리포트 생성기, 데이터사전, 분석과 검사 도구, 코드 생성기, 문서 생성기 등을 제공
- 기능
- 소프트웨어 생명주기(Software Lifecycle) 전 단계의 연결
- 그래픽 지원
- 다양한 소프트웨어 개발 모형 지원
객체지향 설계 원칙(SOLID)
단일 책임 원칙(SRP, Single Responsibility Principle)
- 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함
개방 폐쇄의 원칙(OCP, Open-Closed Principle)
- 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다
리스코프 교체(치환)의 원칙(LSP, Liskov Substitution Principle)
- 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙
인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙
의존성 역전 원칙(DIP, Dependency Inversion Principle)
- 의존 관계를 맺을 때 변화하기 쉬운 것 보다 변화하기 어려운 것에 의존하라는 원칙을 의미한다.
코드 정의
- 데이터를 사용 목적에 따라 식별, 분류, 배열하기 위하여 사용되는 숫자, 문자 또는 기호로 컴퓨터 처리에 효율적인 것을 선정
코드 종류
순차 코드(Sequence Code)
- 자료의 발생순, 크기순, 가나다순 등 일정 순서대로 코드
블록 코드(Block Code : 구분 코드)
- 코드화 대상을 미리 파악하여 블록으로 구분한 후 그 안에서 순서대로 코드를 부여
그룹 분류 코드(Group Classification Code)
- 구분 코드를 세분화한 형태로 대분류, 중분류, 소분류 등 각 분류별로 자릿수를 구성
표의 숫자 코드(Significant Digit Code)
- 표현하려는 대상의 의미는 제외하고 수치만을 모아 만든 것으로 대상이 되는 물체의 중량, 면적, 크기 등을 직접 코드에 적용
십진 분류 코드(Decimal Classification Code)
- 코드화 대상물을 일정한 소속으로 구분하여 십진수 한 자리씩 구분하여 대분류하고, 같은 방법으로 중분류, 소분류한 코드
연상 코드(Mnemonic Code)
- 숫자나 문자를 조합해서 나타내는 것으로 어떤 내용을 기억할 수 있도록 표시한 기호 코드
약자 코드(Letter Code)
- 일반적으로 사용해온 단위의 약자를 코드로 사용
끝자리 분류 코드(Final Digit Code)
- 다른 종류의 코드와 조합해서 사용하며, 코드의 끝에 붙여서 그 의미를 표현
DFD(data flow diagram)
- 자료 흐름 그래프 또는 버블 차트라고도 한다.
- 구조적 분석 기법에 이용된다.
- 시간 흐름을 명확하게 표현할 수 없다
- DFD의 요소는 화살표, 원, 사각형, 직선(단선/이중선)으로 표시한다.
람바우 -> 객동기(객체 동적 기능)
소프트웨어의 상위설계
- 아키텍처 설계, 데이터 설계, 시스템 분할, 인터페이스 정의, 사용자 인터페이스 설계(UI 설계)
소프트웨어의 하위설계
형상검사
- 구성요소 목록 유지보수 모든 사항이 표현 되었나 검사
알파검사
디버깅
- 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 그 원인을 밝히고 수정하는 작업 과정
자료구조 검사
- 자료형태, 변수 초기화, 자료 형태의 일관성을 테스트
삽입정렬(Insertion Sort)
- 최소값을 찾지 않고 자리에 따라 비교하고 오름차순 적용하여 바꿈
- 2번째 원소부터 시작하여 그 앞(왼쪽)의 원소들과 비교하여 삽일할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자료를 상입
초기자료 8 3 4 9 7
1회전 3 8 4 9 7 (두번째 자리 3과 첫번째 자리 8을 비교 했을 때 3이 작으니 바꿔줍니다.)
2회전 3 4 8 9 7 (3 8 | 4 9 7 세번째 자리인 4를 앞에 바꿨던 3과 8을 비교 하였을 때
3보다는 크고 8보다는 작으니 3과 8사이에 삽입 합니다.)
3회전 3 4 8 9 7 (3 4 8 | 9 7 네번째 자리인 9를 앞에 바꾼 3 4 8과 비교 하였을 때
9 자신이 제일 크기 때문에 이동이 없습니다)
4회전 3 4 7 8 9 (3 4 8 9 | 7 다섯번째 자리인 7을 앞에 3 4 8 9와 비교 하였을 때
3 4 보다는 크고 8 9보다는 작으니 3 4 와 8 9 사이에 삽입합니다.)
인터페이스 구현 검증 도구
- xUnint
- STAF
- NTAF
- FitNesse
- Selenium
- Watir
중위(Inorder)
전위(Preorder)
후위(Postorder)
그래프 최대 간선수
정점이 n개인 무방향 그래프에서 최대의 간선수는 n(n-1)/2개
정점이 n개인 그래프에서 최대 간선수는 n(n-1)개
테스트 케이스
- 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력 값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서
테스트 시나리오
- 테스트 케이스를 적용하는 순서에 따라 여러 개의 테스트 케이스들을 묶은 집합
테스트 오라클
- 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교하는 기법 및 활동
- 종류에는 참, 샘플링, 휴리스틱, 일관성 검사가 존재한다.
빌드 자동화 도구
- 빌드를 포함하여 테스트 및 배포를 자동화하는 도구
- Ant, Make, Maven, Gradle, Jenkins 등이 있음
Jenkins
- JAVA 기반의 오픈소스 형태
- 서블릿 컨테이너에서 실행되는 서버 기반 도구
- 친숙한 Web GUI 제공
- 분산 빌드나 테스트 가능
Gradle
- Groovy를 기반으로 한 오픈 소스 형태
- 안드로이드 앱 개발 환경에서 사용
- 행할 처리 명령들을 모아 태스크(Task)로 만든 후 태스크 단위로 실행
블랙박스 테스트의 종류
동치(동등) 분할검사
- 입력조건에 유효한 값과 무효한 값을 균등하게 하여 테스트 케이스를 설계하는 방법
경계값 분석
- 입력 조건의 경계에서 오류가 발생할 확률이 높기 때문에, 입력 조건의 경계값을 테스트 케이스로 설계하는 방법
원인-효과 그래프 검사
- 입력 데이터 간의 관계와 출력에 미치는 영향을 분석해서 효용성이 높은 테스트 케이스를 설계하는 방법
오류-예측 검사
- 과거의 경험이나 확인자의 감각에 의존하는 테스트 케이스 설계 방법
비교검사
- 여러 버전의 프로그램에 동일한 자료를 제공해서 테스트 하는 방법
해싱함수
폴딩법
- 해싱함수 중 레코드 키를 여러부분으로 나누고 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용
제산법
- 레코드키를 해시표로 나눈 나머지를 홈 주소로 사용
기수변환법
- 키 숫자의 진수를 다른 진수로 변환시켜 주소 크기를 초과한 높은 자릿수 절단, 다시 주소 범위에 맞게 조정
숫자분석법
- 키 값을 이루는 숫자의 분포를 분석하여 비교적 고른 자리를 필요한 만큼 선택
후보키(Candidate Key)
- 릴레이션을 구성하는 속성 중 튜플을 유일하게 식별하기 위한 기본키로 사용할 수 있는 속성들을 뜻한다.
기본키(Primary Key)
- 후보키 중에서 선택된 주키(Main Key)이다.
슈퍼키(Super Key)
- 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키이다. 슈퍼키는 릴레이션에 있는 튜플에 대해 유일성을 만족시키지만, 최소성은 만족 시키지 못한다.
외래키(Foregin Key)
- 관계를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같은 R1릴레이션의 속성 말한다.
관계대수
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어이다.
- 릴레이션을 처리하기 위해 연산자와 연산규칙을 제공하는 언어로 피연산자가 릴레이션이고 결과도 릴레이션이다.
- 질의에 대한 해를 구하기 위해 수행해야 할 연산의 순서를 명시한다.
- 대표적으로 순수 관계 연산자와 일반 집합 연산자가 있다.
관계해석
- 관계 데이터 모델의 제안자인 코드가 수학에 가까운 기반을 두고 관계 데이터베이스를 위해 제안하여 탄생하였다.
- 관계 데이터의 연산을 표현하는 방법으로, 원하는 정보를 정의할 때는 계산 수식을 사용한다.
- 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지닌다.
- 튜플 관계해석과 도메인 관계해석이 있다.
- 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력면에서 동등하며 관계대수로 표현한 식은 관계해석으로 표현할 수 있다.
- 질의어로 표현한다.
뷰(VIEW)
- 뷰 위에 또 다른 뷰를 정의할 수 있다.
- 뷰에 대한 조작에서 삽입, 갱신, 삭제 연산은 제약이 따른다.
- 뷰의 정의를 변경하려면 뷰를 삭제하고 재생성 해야된다.
- 뷰가 정의된 기본 테이블이 제거되면 뷰도 자동적으로 제거된다.
데이터 모델
개념
- 현실 세계의 정보를 컴퓨터가 이해할 수 있도록 추상화하여 표현한 모델
구성요소
절차
- 개념적 데이터 모델>논리적 데이터 모델>물리적 데이터 모델
데이터 웨어하우스 (Data Warehouse)
- 급증하는 다량의 데이터를 효과적으로 분석하여 정보화하고 이를
여러 계층의 사용자들이 효율적으로 사용할 수 있도록 한 데이터베이스.
OLAP (Online Analytical Processing)
- 다차원으로 이루어진 데이터로부터 통계적인 요약 정보를 분석하여 의사 결정에 활용하는 방식.
- 연산은 roll-up, slicing & dicing, drill-up & down, pivot, drill-through 등
UNIX SHELL 환경 변수 출력 명령어
- configenv : 파이썬에서 사용, json 등.. 활용 <- 얘는 아님
- printenv : 환경 변수의 값을 출력하는 명령어
- env : 환경 변수 보기 및 변경
- setenv : 환경 변수 추가 또는 업데이트
쉘 스크립트의 의미
until who | grep wow
do
sleep 5
done
- who 명령어는 현재 시스템에 로그인한 유저의 목록을 보여 준다.
- |(파이프)는 앞의 who 명령어의 출력 결과를 뒤의 grep 명령어로 전달한다.
- grep 명령어는 who 명령문의 결과 중 wow 유저가 로그인하면 그 결과를 필터링하여 출력한다.
- sleep 명렁문 뒤의 숫자(초)만큼 잠시 수행을 대기한다.
- until....do : 조건문이 참이 될 때까지 실행
파이썬
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[ : 7 : 2]
- a[시작점 : 끝점 : 넘어가는 수] 이렇게 생각하시면 됩니다.
- a[:7:2]이면, a[0]~a[6]까지의 값 [0,10,20,30,40,50,60]이고,
- 이를 2칸씩 넘어가라 했으니 a[0]부터 시작해서 [0,20,40,60]이 나오게 됩니다.
세그먼트 테이블에서 물리주소 구하기
논리주소= (세그먼트번호, 변위값)
물리주소= '세그먼트 시작주소+ 변위값'
논리주소(2,176)에서
세그먼트번호: 2
변위값: 176
표에서
세그먼트번호 시작주소 길이
2 222 198
물리주소=세그먼트 시작주소+변위값
=222 + 176
=398
인터넷 계층의 프로토콜
- IP
- ICMP
- IP와 조합하여 통신중의 오류처리와 전송 경로 변경등을 위한 제어 메세지 관리
- IGMP
- 멀티캐스트를 지원하는 호스트나 라우터 사이에서 멀티캐스트 그룹유지를 위해 사용
- ARP
- 호스트의 IP주소를 네트워크 접속 장치의 물리적 주소로 변환
- RARP
- ARP 반대 (물리적 주소를 IP 주소로 변환)
TCP 는 전송계층 프로토콜
FTP 는 응용계층 프로토콜
PHP에서는 # 연산자 없음
CMM
- Initial(초기) - repeatable(반복) - Managed(관리) - Defined(정의) - Optimizing(최적화)
능력성숙도모델 Capability Maturity Model
- 소프트웨어 개발업체들의 업무능력평가 기준을 세우기 위한 평가모형
레벨1:Initial(초기)
- 표준화된 프로세스 없이 프로젝트 수행결과 예측이 곤란한 조직
레벨2:Managed(관리)
- 기본적인 프로세스 구축에 의해 프로젝트가 관리되고 있는 조직
레벨3:Defined(정의)
- 세부표준 프로세스가 있어 프로젝트가 통제되는 조직
레벨4:Quantitatively Manaed(잘관리된)
- 프로젝트 활동이 정략적으로 관리 통제되고 성과예측이 가능한 조직
레벨5:Optimizing(최적화)
- 지속적인 개선활동이 정착화 되고 최적의 관리로 프로젝트가 수행되는 조직
SREM(Software Requirements Enginering Methdology)
- TRW사가 우주 국방 시스템 그룹에 의해 실시간 처리 소프트웨어 시스템에서 요구사항을 명확히 기술하도록 할 목적으로 개발한 것으로,RSL과 REVS를 사용하는 자동화 도구이다.(RSL/REVS)
PSL/PSA
- 미시간 대학에서 개발한 것으로 PSL과 PSA를 사용하는 자동화 도구입니다.
- 하향식 소프트웨어 개발을 위한 문서화 도구입니다.
SADT(Structure Analysis and Design Technique)
- SoftTech사에서 개발된 것으로 구조적 요구 분석을 위해 블록 다이어그램을 채택한 자동화 도구입니다.
접근통제 기술-MAC/ DAC/ RBAC
MAC:강제 (Mandatory) 접근통제
- 접근통제권한은 시스템이 지정
- 주체와 객체의 등급을 비교하여 권한부여
DAC:임의 (Discretionary) 접근통제
- 접근통제권한은 데이터소유자가 지정 및 제어
- 데이터에 접근하는 사용자의 신원에 따라 권한부여
- 부여된 권한을 다른 사용자에게 허가 가능
- 관련 SQL 명령어: GRANT/ REVOKE
RBAC:역할기반 (Role Based) 접근통제
- 접근통제권한은 중앙관리자가 지정
- 사용자의 역할에 따라 권한부여
- 임의+강제 접근통제의 단점보완
- 다중프로그래밍환경에 최적화
비용 추정모형(estimation models)
- COCOMO
- Putnam
- Function-Point
공개키 암호화 방식
- 비대칭 암호기법이라고도 한다.
- 대표적인 기법은 RSA 기법이 있다.
- 키 분배가 용이하고, 관리해야 할 키 개수가 적다.
- 암호화와 복호화에 사용하는 키가 서로 다른 암호화 방식이다.
랜섬웨어
- 임의로 시스템을 잠그거나 혹은 데이터를 암호화하여 사용할 수 없게 한 다음 이를 빌미로 돈을 요구하는 기법.
파밍
- 홈페이지 주소를 바꿔 사용자가 진짜 사이트로 오인하게 하여 접속하게 한 다음 개인정보를 탈취하는 기법.
피싱
- 메일 등으로 공공기관이나 금융기관에서 보낸 것처럼 위장하여 사용자에게 계좌번호, 카드번호의 비밀번호를 빼내는 기법. 대표적으로 스미싱
XSS
- 웹페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도함으로써, 정보유출 등의 공격을 유발할 수 있는 취약점
맵리듀스(MapReduce)
- 맵(Map) : 데이터가 텍스트 형태로 입력되면 64KB 분할한다. 텍스트 안에 단어를 분류하여 카운트한다.
- 리듀스(Reduce) : 각 텍스트에서 정리된 맵들을 결합하여 동일한 단어를 카운트한다.
- 대용량 데이터를 분산 처리하기 위한 목적으로 개발된 프로그래밍 모델
- Google에 의해 고안된 기술로써 대표적인 대용량 데이터 처리를 위한 병렬 처리 기법을 제공한다
- 임의의 순서로 정렬된 데이터를 분산 처리하고 이를 다시 합치는 과정을 거친다.
SPICE(소프트웨어 처리 개선 및 능력 평가 기준)
- 소프트웨어의 품질 및 생산성 향상을 위해 소프트웨어 프로세스를 평가 및 개선하는 국제 표준이다.
- 공식 명칭은 ISO/IEC 15504이다.
IEEE 488
IEEE 802.5
ISO 14001
- 모든 산업 분야 및 활동에 적용할 수 있는 환경경영시스템에 관한 국제규격