Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

kyh코딩 공부 블로그

소프트웨어 개발 본문

기사공부

소프트웨어 개발

킴용현 2025. 4. 17. 19:55

소프트웨어 개발

 

 

트리 운행

 

중위 순회 운행

 

Left -> Root -> right

 

 

 

 

정렬

 

삽입 정렬 (insertion sort)

정렬된 파일에 2번째 값을 첫번째 키 값으로 설정하고 키 값 앞쪽 배열과 비교해 정렬한다

Ex ) 8 3 4 9 7 오름차순 1회전

 

1회전 : 3 8 4 9 7

2회전 : 3 4 8 9 7

3회전 : 3 4 8 9 7

 

 

선형 구조 : 큐, 스택, 데크, 리스트, 연결 리스트

비선형 구조 : 그래프, 트리, 인접 행렬

 

 

 

 

순수 관계 연산자의 종류

   - SELECT

   - PROJECT

   - JOIN

   - DIVIDE

 

1. SELECT

수학적 표현: σ_조건식(릴레이션)

데이터 언어 형식: 릴레이션 where 조건식

- 하나의 릴레이션을 대상으로 수행함.

- 조건식은 비교 연산자(>, ≥, <, ≤, =, ≠)를 이용해 구성함.

→ SELECT 연산은 SQL 문장에서 WHERE 절의 조건절 기능으로 구현된다.

- SELECT 연산과 SELECT 절의 의미가 다름

 

2. PROJECT

수학적 표현: π_속성리스트(릴레이션)

데이터 언어 형식: 릴레이션[속성리스트]

- 릴레이션에서 선택한 속성에 해당하는 값으로 결과 릴레이션을 구성함.

→ PROJECT 연산은 SQL 문장에서 SELECT 절의 칼럼 선택 기능으로 구현된다.

 

3. JOIN

릴레이션1 ▷◁ 릴레이션2

- 두 릴레이션을 조합하여 하나의 결과 릴레이션을 구성함.

- 조인 속성은 두 릴레이션이 공통으로 가지고 있는 속성.

→ JOIN 연산은 SQL 문장에서 WHERE 절의 INNER JOIN 조건과 함께 FROM 절의 NATURAL JOIN, INNER JJOIN, OUTER JOIN, USING 조건절, ON 조건절 등으로 구현된다.

 

4. DIVIDE

릴레이션1 ÷ 릴레이션2

- 릴레이션2의 모든 튜플과 관련 있는 릴레이션1의 튜플로 결과 릴레이션을 구성

현재 사용되지 않음

→ DIVIDE 연산은 SQL 문장에서 현재 사용되지 않는다.

 

 

 

테스트 관련

 

단위 테스트

  • 정의:  
  • - 개발자가 원시 코드를 대상으로 각각의 단위를 다른 부분과 연계되는 부분을 고려하지 않고 단위 자체에만 집중하여 테스트한다
  • - 객체지향에서 클래스 테스팅에 해당한다 
  • 방법:
  • 장점:
  • 단점:

 

 

테스트 드라이버

- 하위 -> 상위 모듈로 통합하면서 테스트하는 것으로 상향식 테스트에서 사용

- 테스트 대상을 제어하고 동작시키는데 사용

- 시스템 및 컴포넌트를 시험하는 환경의 일부분으로 시험을 지원하는 목적하에 생성된 코드와 데이터

- 순차적 실행을 지원하는 프로그램이나 명령들이 묶여 있는 배치 파일

 

 

블랙박스 테스트

소프트웨어의 내부 구조나 작동 원리를 모르는 상태에서 소프트웨어의 동작을 검사하는 방법.

/검사 진행에 있어 해당 소프트웨어의 코드나 내부 구조에 대한 정보는 필요하지 않으며,  특징, 요구 사항 검사를 위해 공개된 설계도 등의 대외적으로 공개된 사항들을 통해 검사를 진행하며, 

 개발자입장이 아닌 사용자 입장에서 소프트웨어 혹은 제품에 대한 요구사항과 결과물이 일치하는지 확인하기위한 테스트 기법이다.

 

화이트 박스 테스트

소프트웨어 혹은 제품의 내부 구조, 동작을 세밀하게 검사하는 테스트 방식으로, 외부에서 요구사항에 따른 예상 결과값을 테스트 하는 것과는 다르게 내부 소스 코드를 테스트하는 기법으로 사용자가 들여다 볼 수 없는 구간의 코드 단위를 테스트 한다. 

즉, 정리하면 개발자가 소프트웨어 또는 컴포넌트 등의 로직에 대한 테스트를 수행하기 위해 설계 단계에서 요구된 사항을 확인하는 개발자 관점의 단위테스팅 기법이다. 

 

 

화이트 박스 테스트 종류

  • 기초 경로 검사
  • 제어 구조 검사
  • 데이터 흐름 검사

 

 

 

통합 테스트

  • 정의: 여러 모듈이나 시스템 구성 요소가 함께 작동하는지 검증하는 테스 트.
  • 방법:
  • 장점:
  • 단점:

 

 

 

 

테스트 케이스 자동 생성

  • 자료 흐름도 : 테스트 경로 관리
  • 입력 도메인 분석 : 테스트 데이터 산출
  • 랜덤 테스트 : 무작위 값 입력 신뢰성 검사

 

 

 

검증(verification) 테스트 : 제품이 명세서대로 완성되었는지 검증하는 단계 개발자의 시각에서 제품의 생산 과정을 테스트하는 것을 의미

확인(validation) 테스트 : 사용자의 요구사항을 잘 수행하고 있는지 사용자의 시각에서 생산된 제품의 결과를 테스트하는 것을 의미

 

 

 

 

디지털 저작권 관리(DRM)

 

디지털 저작권 관리 구성요소

 

콘텐츠 제공자

- 콘텐츠를 제공하는 저작권자

 

콘텐츠 분배자 (Contents Distributor)

- 암호화된 콘텐츠를 유통하는 곳이나 사람(구글스토어 등)

 

클리어링 하우스 (Clearing House)

- 저작권에 대한 사용 권한, 라이센스 발급, 암호화된 키 관리, 사용량에 따른 결제 관리 등 수행

 

DRM 컨트롤러(DRM Controller)

- 배포된 콘텐트의 이용권을 통제하는 프로그램

 

패키저 (Packager)

- 콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화 하는 프로그램

 

 

디지털 저작권 관리 기술요소

 

기술 설명
암호화 (Encryption) 콘텐츠 라이센스를 암호화하고 전자 서명 있는 기술
관리 (Key Management) 콘텐츠를 암호화한 키에 대한 저장 분배 기술
암호화 파일 생성 (Packager) 콘텐츠를 암호화 콘텐츠로 생성하기 위한 기술
식별 기술(Identification) 콘텐츠에 대한 식별 체계 표현 기술
저작권 표현(Right Expression) 라이선스의 내용 표현 기술
정책 관리 ( Policy Management) 라이선스 발급 사용에 대한 정책 표현 관리 기술
크랙 방지 (Tamper Resistance) 크랙에 의한 콘텐츠 사용 방지 기술
인증 (Authenication) 라이선스 발급 사용의 기준이 되는 사용자 인증 기술

 

 

 

스택

 

스택이란

  • 리스트의 한쪽 끝에서만 자료의 삽입과 삭제가 이루어지는 선형자료 구조로 인터럽트 처리, 서브루틴 호출 작업 등에 응용
  • 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출 LIFO, (last in first out) 방식
  • 가장 나중에 삽입된 자료의 위치를 top이라 하고 가장 먼저 삽입된 자료의 위치를 bottom이라고 한다
  • 문자 중 top 이나 push pop 이란 단어가 제시되면 stack

 

 

스택 입력 및 출력 

 

 소프트웨어 품질목표 (= 품질 평가 기준항목)

 - Correctness(정확성) : 사용자의 요구기능을 충족시키는 정도

 - Reliability(신뢰성) : 요구된 기능을 오류없이 수행하는 정도

 - Efficiency(효율성) : 요구된 기능을 수행하기 위한 시스템능력과 필요한 자원의 소요정도

 - Portability(이식성) : 다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정할 수 있는 정도

 - Integrity(무결성) : 허용되지 않는 사용이나 자료의 변경을 제어하는 정도

 - Usability(유용성) : 쉽게 사용할 수 있는 정도

 - Flexibility(유연성) : 새로운 요구사항에 맞게 얼마만큼 쉽게 수정할 수 있는지의 정도

 - Reusability(재사용성) : 이미 만들어진 프로그램을 다른 목적으로 사용할 수 있는지의 정도

 - Interoperability(상호운용성) : 다른 소프트웨어와 정보를 교환할 수 있는 정도

 

 

 

스택 출력 순서 

 

A,B,C,D로 입력이 정해졌을 때, 스택에 입력했다 출력하는 경우 출력순서의 결과가 아닌것

 

A,B,C,D

C,D,B,A

D,C,A,B

B,C,D,A

 

=> 문제는 B를 스택에 넣으려면 A를 먼저 넣어야 한다.

 C를 스택에 넣으려면 A그리고 B를 먼저 넣어야 한다.

대신 넣은것은 언제든 출력 가능. 다만, 입력 순서만 지켜주면 된다.

 

1. A를 넣고 바로 출력, B를 넣고 바로 출력, C를 넣고 바로 출력, D를 넣고 바로 출력

2. A와 B와 C를 순서대로 넣고 C를 바로 출력, D를 넣고 바로 출력, B를 출력, A를 바로 출력

3. D와 C를 출력하려면 먼저 스택에 A와 B가 있어야 한다.

즉, A를 넣고, B를 넣고, C를 넣고, D를 넣어야 D가 가장 처음으로 출력이 가능하다. D 이전에 어떤 알파벳도 출력해서는 안되기 때문에 A,B,C 순서로 꼭 입력이 되어야 함. 그리고 C출력이 가능한데, 이후는 무조건 B를 A보다 먼저 출력해야 한다. (접시가 아래에서 위로 쌓여있을 때 밑에 부터 빼면 와장창임. 스택은 후입선출 구조)

 입력할때 순서가 ABCD순서이므로 D를 입력하려면 ABC가 어쨌든 입력이 되어야 한다.

그런데 스택에 A가 반드시 먼저 들어가야 하므로 B는 그 다음 순서일수밖에 없다. 그런데, 출력은 A가 먼저이므로 불가능

4. A와 B를 순서대로 넣고 B를 바로 출력, C를 넣고 바로 출력, D를 넣고 바로 출력, A를 출력

 

 

 

 

 

소스 코드

소스 코드 품질 분석 도구

 

정적 

  • Pad
  • Cppcheck
  • SonarQube
  • Checkstyle
  • Ccm
  • Cobertura
  • findBugs

 

동적

  • Avalanche
  • Valgrind

 

 

 

클린 코드 작성 원칙

 

가독성

  • 누구나 코드를 쉽게 읽을 수 있도록 작성
  • 이해하기 쉬운 용어를 사용 들여쓰기 등을 사용

 

단순성

  • 한번에 한 가지 기능만 처리한다
  • 클래스/메소드/함수는 최소 단위로 분리

 

의존성 배제

  • 다른 모듈에 미치는 영향을 최소화하여 코드 변경 시 다른 부분에 영향 없도록 작성

 

중복성 최소화

  • 중복된 코드는 삭제하여 공통된 코드로 사용

 

추상화

  • 상위 클래스.메소드,함수에서 간략하게 애플리케이션 특성을 나타내고 상세 내용은 하위 클래스/메소드 함수에서 구현

 

 

 

 

 

스키마

 

· 스키마(Schema) 3계층

1) 외부 스키마(External Schema)

- 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것

- 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마(Sub Schema)하고도 함

- 하나의 데이터베이스 관리 시스템에는 여러 개의 외부 스키마가 존재할 수 있으며, 하나의 외부 스키마는 여러 개의 응용 프로그램이나 사용자에 의해 공유될 수 있음

- 동일한 데이터베이스에 대해서 서로 다른 관점을 정의할 수 있도록 허용함

 

2) 개념 스키마(Conceptual Schema)

- 개체 간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 정책 및 무결성 규정에 관한 명세를 정의한 것

- 데이터베이스의 전체적인 논리적 구조로서, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 데이터베이스 명세로서 하나만 존재

- 단순히 스키마라고 하면 개념 스키마를 의미

- 기관이나 조직의 관점에서 데이터베이스를 정의한 것

- 데이터베이스 관리자에 의해서 작성됨


3) 내부 스키마(Internal Schema)

- 데이터베이스의 물리적 구조를 정의한 것

- 물리적 저장장치의 관점에서 본 전체 데이터베이스의 명세로서 하나만 존재

- 개념 스키마의 물리적 저장 구조에 대한 정의를 기술한 것

- 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마

 

 

 

 

인터페이스 구현 검증 도구 종류

xUnit, STAF, FitNesse, NTAF, Selenium, watir

도구 기능
xUnit Java(Junit), C++(Cppunit), .Net(Nunit) 같이 다양한 언어를 지원하는 단위 테스트 프레임워크
STAF 서비스 호출 컴포넌트 재사용  다양한 환경을 지원하는 테스트 프레임워크
- 테스트 대상 분산 환경에 데몬을 사용
FitNesse 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크
NTAF FitNesse 장점인 협업과 STAF 장점인 재사용 확장성을 통합한 NHN(Naver) 테스트 자동화 프레임워크
Selenium 다양한 브라우저 개발 언어를 지원하는  어플리케이션 테스트 프레임워크
watir Ruby 사용하는 애플리케이션 테스트 프레임워크

 

 

시간 복잡도 big-o (빅-오)표기법

 

 

 

모듈화(Modularity)

- 모듈화는 거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정, 작게 나누어진 각 부분을 모듈

- 소프트웨어의 모듈은 포로그래밍 언어에서 subroutine, function등으로 표현

- 모듈화는 시스템을 지능적으로 관리할 수 있도록 해주며, 복잡도 문제를 해결하는 데 도음을 준다

- 모듈화는 시스템의 유지보수와 수정을 용이하게 한다.

 

 

'기사공부' 카테고리의 다른 글

정보시스템 구축 관리  (0) 2025.04.17
프로그래밍 언어  (0) 2025.04.17
데이터 베이스 구축  (0) 2025.04.17
소프트웨어 설계  (0) 2025.04.17