<CS>소프트웨어공학론

SeonKyu KIM·2023년 1월 13일
0

소프트웨어 생명주기

  1. 폭포수모형
    • 가장 오래되고, 넓게 퍼져있는 전통적인 sw 생명주기. 이전 단계 돌아갈 수 없다.
    • 한 단계가 끝나야 다음 단계로 진행 가능한 개발 방법론
    • 순차적 접근방법. 2개 이상 과정이 병행하여 수행되지 않음
  2. 프로토타입/원형 모형
    • 사용자의 요구사항을 정확히 파악하기 위해 견본품을 만들어 최종 결과물을 예측하는 모형
    • 시제품(프로토타입)은 사용자와 시스템 사이 중점을 두어 개발
    • 폭포수 모형의 단점을 보완
  3. 나선형 모형/점진적 모형(Spiral)
    • 보헴이 제안. 폭포수와 프로토타입 장점에 분석기능을 추가한 모형
    • 대규모 프로젝트에 적합. 위험 관리 및 최소화가 목적
    • 점진적으로 개발 과정이 반복됨. 누락/추가된 요구사항 첨가 가능
    • 계획 및 정의 -> 위험 분석 -> 개발 -> 고객 평가
  4. 에자일 모형
    - 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하며 개발을 진행
    - 스프린트(Sprint)나 이터레이션(Iteration)과 같은 짧은 개발 주기 반복
    - 소규모 프로젝트, 고도로 숙달된 개발자, 급변하는 요구사항에 적합
    - 스크럼, XP, 칸반, Lean, 크리스탈 등 다양한 프레임워크
    XP(eXtreme Programming)의 5가지 핵심원칙 
    1. 의사소통 2. 단순성 3. 용기 4. 존중 5. 피드백

구조적 다이어그램

  • 클래스, 객체, 컴포넌트, 배치(Deployment), 패키지, 복합체 구조

행위 다이어그램

  • 유스케이스, 시퀀스, 커뮤니케이션, 상태, 활동, 타이밍, 상호작용개요
사용자 인터페이스(UI) 설계 원칙  
1. 직관성 2. 유효성 3. 학습성 4. 유연성

결합도와 응집도(약 -> 강)

결합도 : 자료 - 스탬프 - 제어 - 외부 - 공통 - 내용
응집도 : 우연 - 논리 - 시간 - 절차 - 교환 - 순차 - 기능
= 모듈의 독립성은 결합도와 응집도에 의해 측정!

결합도가 약할수록, 응집도가 높을수록 품질이 높다

디자인 패턴

: 23가지의 디자인 패턴을 정리하고 각각의 디자인 패턴을 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류했다.

코드

코드의 주요기능

식별, 분류, 배열

코드의 종류

  • 순차코드 : 자료를 순서, 크기 등 차례로 번호를 부여하는 방법
    (= 순서코드, 일련번호)
  • 블록코드 : 코드화 대상 중, 공통성이 있는 것 끼리 블록으로 구분
    (= 구분코드 ex. 1001~1100 총무부)
  • 10진코드 : 코드화 대상을 0~9까지 분할, 이 후 필요한 만큼 반복
    (= 도서 분류식 코드)
  • 그룹분류코드 : 코드화 대상을 일정 기준에 따라 대-중-소분류 후 그룹 안에서 일련번호 부여
    (ex. 1-01-001 본사-총무부-인사계)
  • 연상코드 : 코드화 대상 항목 명칭이나 약자와 관련 숫자, 문자, 기호를 이용해 코드를 부여
    (ex. TV-40 : 40인치 티비)
  • 표의 숫자 코드 : 코드화 대상 항목의 성질의 물리적 수치를 코드에 적용
    (= 유효 숫자 코드. ex. 120-300-60 = 책상 사이즈)
  • 합성 코드 : 필요 기능을 위해 2개 이상의 코드를 조합하여 만듬
    (ex. KE-711 : 대한항공 711기)

인터페이스 요구사항 검증 방법

1) 요구사항 검토
1. 동료검토 : 요구사항 명세서 작성자가 직접 설명, 동료가 들으면서 결함을 발견하는 형태의 검토방법
2. 워크스루 : 검토 회의 전, 명세서를 미리 배포해 사전 검토 이후에 검토회의를 통해 결함을 발견하는 형태의 검토방법
3. 인스펙션 : 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하며 결함을 발견하는 형태의 검토방법

2) 프로토 타이핑 : 사용자의 요구 파악, 실제 설계될 sw에 대한 견본품 제작

3) 테스트 설계 : 테스트 케이스를 설계, 요구사항을 현실적으로 테스트

4) CASE 도구 활용 : 일관성 분석을 통해 요구사항 변경의 추적 및 분석

미들웨어란(MW)

표준화된 인터페이스를 제공하며 시스템 간의 데이터 교환에 일관성을 보장한다.

종류
1. DB : 데이터와 클라이언트를 연결
2. RPC : 원격 프로시저를 로컬 프로시저처럼 호출
3. MOM(Message Oriented Middleware) : 비동기형 메시지 기반 전달 방식
4. TP-Monitor(Transaction Processiong Monitor) : 트랜잭션 처리 모니터. 트랜잭션 처리 및 감시 MW. 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무에 사용(항공기, 철도예약)
5. ORB : 객체 요청 브로커. 객체 지향 미들웨어로 코바(Corba)표준 스펙 구현
6. WAS : 웹 어플리케이션 서버. 웹 환경 구현 및 동적 컨텐츠 어리를 위해 사용. HTTP 세션 처리 등 JAVA, EJB 구현 가능

소프트웨어 형상관리(SCM)

  • Software Configuration Management : sw 개발과정에서 sw의 변경사항을 관리하기 위해 개발된 일련의 활동
    : 형상관리도고의 주요 기능 -> repository, checkout, commit, update 등

애플리케이션 테스트 기법

1. 화이트박스 테스트

  • 원시코드를 오픈 후 모든 경로를 테스트
  • 설계된 절차에 초점을 둔 구조적 테스트
  • 모듈 안의 작동을 직접 관찰
    // 종류 : 문장 , 분기 , 조건 , 경로 검증

2. 블랙박스 테스트

  • 소프트웨어의 내부 구조나 작동 원리를 모르는 상태에서 소프트웨어의 동작을 검사하는 방법
  • sw가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트 = 기능테스트
  • 사용자 입장에서 소프트웨어 혹은 제품에 대한 요구사항과 결과물이 일치하는지 확인하기위한 테스트 기법
    // 종류 : 동등 분할 기법, 경계값 분석, 원인-결과 검사, 오류 예측

3. 인수 테스트

  • 개발한 sw가 사용자의 요구사항을 충족하는지 중점을 둔 테스트
  • 사용자가 직접 테스트, 문제가 없으면 테스트 종료
  • 제품의 결함을 찾기보다 완성도를 확인하는 과정
    // 종류 : 사용자or운영or계약 인수 테스트
    // 알파테스트 : 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트
    // 베타테스트 : 선정된 사용자가 본인 환경에서 직접 테스트

4. 통합 테스트

  • 상향식 통합 테스트
    - 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트
    - 주요 종속 모듈은 스텁(stub)으로 대체
  • 하향식 통합 테스트
    - 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트
    - 가장 하위 부터 수행되므로 스텁 필요X, 클러스터는 필요O
    - 하위 모듈을 클러스터로 결합, 더미 모듈인 드라이버(Driver) 작성

EAI (Enterprise Application Integeration)

  • 기업 내 각종 애플리케이션 및 플랫폼 간 상호 연동이 가능하게 해주는 솔루션
  • 비즈니스 간 통합 및 연계성 증대로 시스템 간 확장성을 높여줌
  • 구축유형

인터페이스 구현 검증 도구

  • xUnit : Java, C++, .Net 등 다양한 언어를 지원하는 단위테스트 프레임워크
  • STAF : 서비스 호출 및 컴포넌트 재사용 등의 환경 지원
  • FitNesse : 웹 기반 tc설계, 실행, 결과
  • NTAF : FitNesse의 장점(협업)과 STAF의 장점(재사용 및 확장성)을 통합한 자동화 프레임워크
  • Selenium : 다양한 브라우저 및 개발언어를 지원하는 테스트 프레임워크
  • Water : Ruby를 사용하는 애플리케이션 테스트 프레임워크

json

  • 속성-값 쌍으로 이뤄진 데이터 객체를 텍스트 형태로 전달하는 포멧

ajax

  • 이용자가 자바 스크립트를 사용하여 xml로 데이터를 교환 및 제어.
  • 비동기 통신기술 사용

xml

  • 특수한 목적을 갖는 마크업 언어를 만드는데 사용하는 다목적 마크업 언어

0개의 댓글