소프트웨어 생명주기
폭포수 모형
프로토타입 모형
나선형 모형
에자일 모형
Scrum
제품 책임자(Product Owner) - Backlog(Story, 우선순위) vs Scrum Master
Product Backlog -> { Sprint Planning Meeting(Sprint Backlog) ->
Sprint -> Daily Scrum Meeting -> } -> Sprint Review -> Sprint Retrospect
XP(eXtreme Programming)
Efficiency 를 勇気 랑 맞바꿔 사용자에게 업뎃 보여줌
{User Story -> {Release Planning -> Spike(test case) -> } -> Iteration ->
Acceptance Test(부분완료제품) -> } -> Small Release
Spike 부분 빼곤 모든 단계로 회귀 가능
Pair Programming, Test Driven Programming, Continuous Integration
현행 시스템 파악
단위 업무 시스템이 중심임.
시스템 구성 파악
단위 업무 시스템을 기간업무와 지원업무로 나눔, 뭣이 중헌데
시스템 기능 파악
단위 업무 시스템을 주요/하부/세부의 계층형으로 표시
시스템 인터페이스 파악
따로 뺐음
아키텍쳐 구성 파악
아키텍쳐가 서로 다르면 기간업무 처리시스템을 기준으로 아키텍쳐 구성도
시스템 아키텍쳐
소프트웨어 아키텍쳐 설계의 원리
모듈화(Modularity)
추상화(Abstraction, 과정, 데이터, 제어 - 이벤트)
단계적 분해(Stepwise Refinement)
정보은닉(Information Hiding)
소프트웨어 아키텍쳐 설계 과정
설계 목표 설정
시스템 타입 결정
대화형, 이벤트 중심, 객체 영속형(DB 쓰는거)
아키텍쳐 패턴 적용
Layer(OSI 참조 모델), Client Server, Pipe-Filter(Unix Shell)
MVC, Master-Slave(장애허용, 병렬처리), Broker (분산처리)
P2P(멀티스레딩 환경), Event-Bus(Source, Listeners, Channel, Bus)
Blackboard(인공지능), Interpreter
서브시스템(모듈) 구체화
결합도(Coupling)
자료(Data) -> 스탬프(Stamp) -> 제어(Control, 권리 전도 현상) ->
외부(External) -> 공통(Common) -> 내용(Content, 제어 이동 현상)
응집도(Cohension)
기능(functional) -> 순차(Sequential) ->
교환(Communication, 동일한 입출력) -> 절차(Procedure) ->
시간(Temporal) -> 논리(Logical) -> 우연(Coincidence)
단위모듈 종류
디바이스 드라이버 모듈, 네트워크 모듈
파일 모듈, 메모리 모듈, 프로세스 모듈
IPC(Inter Process Comunication)
모듈간 통신방식을 구현하기 위한 인터페이스
Shared Memory, Socket, Semaphore(공유자원 접근 제어)
Pipe&named pipes, Message Queue
소프트웨어 구성 파악
단위업무 시스템별 소프트웨어 라이센스, 용도 등
하드웨어 구성 파악
단위업무 시스템의 서버, 서버의 이중화
네트워크 구성 파악
인터페이스
시스템 인터페이스 설계서 제작 단계
시스템 인터페이스 요구사항 명세서
인터페이스 시스템 식별
개발 시스템 식별 ->
내 / 외부로 나눔 ->
환경 및 관리 주체 식별 ->
네트워크, DB 연결 정보 식별 ->
인터페이스 식별 ->
인터페이스 요구사항 명세서 + 인터페이스 요구사항 목록
인터페이스 시스템 식별
인터페이스의 송신 시스템, 수신 시스템으로 구분하여 작성
왜냐하면 인터페이스 시스템은 송수신 시스템의 관계로 국소적인게 아니니까
송수신 데이터 식별
인터페이스 표준항목 ( 시스템 공통부 - 시스템 연동, 거래 공통부 - 데이터 처리)
송수신 데이터 항목
공통 코드 - 오류 코드 등, 만약 서로 공통 코드가 다르면 매핑해야함
인터페이스 방법 명세화
송수신 방법 명세화
시스템 연계 기술
DB Link, API / Open Api, 연계 솔루션(EAI 서버), Socket, Web Service
EAI(Enterprise Application Integration)
Point to Point - 1:1로 연결. 변경 및 재사용 어렵
Hub & Spoke - 단일 접점 허브. 허브 장애시 에로
ESB(Enterprise Service Bus)
미들웨어로 해결. 확장성 좋고 대용량 처리 가능
어플리케이션 보단 서비스 위주의 통합 지향
특정 서비스에 국한되지 않기위해 어플과의 결합도 약하게 유지
Hybrid - 그룹 내엔 Hub * Spoke, 그룹 외엔 ESB. 데이터병목 최소
통신 유형 - 단방향, 동기, 비동기
처리유형 - 실시간, 지연, 배치
주기
송수신 데이터 명세화 - DB의 테이블 정의서 필요
오류식별 및 처리방법 명세화
인터페이스 기능 구현 정의
공통 기능 및 데이터 인터페이스
공통 기능은 모듈의 기능 중에서 공통적으로 제공되는 기능을 의미
데이터 인터페이스는 모듈 간 교환되는 데이터가 저장될 파라미터
송신 관련, 사전조건은 외부모듈, 수신, 사후조건, 인터페이스영역은 내부모듈
인터페이스 기능
모듈 간 연계 기능 식별
사전 조건, 기능 동작 시나리오, 사후 조건
연계 기능에서 시나리오 형태로 구체화된 기능을 가지고 기능을 구체화, 선별
인터페이스 데이터 표준
데이터 인터페이스 + 인터페이스 기능 을 조사해서 표준을 만듬.
데이터 인터페이스에서 초안을 보고 인터페이스 기능을 볼 때 추가 삭제를 함.
내부에서 데이터 변환도 되니까 꼭 형태가 동일할 필요는 없음
모듈 세부 설계서
컴포넌트 명세서(텀포넌트 + 간략한 인터페이스)
+ 인터페이스 명세서(사전조건, 사후조건, 파라미터, 반환값)
인터페이스 구현
데이터 통신
JSON(JavaScript Object Notation) : Attribute-Value Pairs 인 data object 전달
XML, 수신측에서 parsing
인터페이스 객체임과 Parsing 에 주의
인터페이스 엔티티
인터페이스 테이블을 엔티티로, 주기적으로 쓰고 읽음.
송수신 쪽 각각 따로 테이블을 둘 수 있음. 그럼 테이블끼리도 송수신 함.
데이터 객체임
보안
DataBase, Application(Secure Coding), Network(Sniffing)
요구사항
이해관계자들 간의 의사소통 수단이며, 프로그램 제작/유지관리의 근거
기능 / 비기능, 사용자 / 시스템
인터페이스 및 데이터, 아키텍쳐 결정은 비기능임.
요구사항 개발 프로세스
타당성 조사(Feasibility Study)
요구사항 도출(Requirement Elicitation)
요구사항 분석(Requirement Analysis)
요구사항 명세(Requirement Specification)
요구사항 확인(Requirement Validation)
요구사항 검토(Model Review) -> Prototyping -> 모델 검증(Model Verification)
-> 인수 테스트(Acceptance Test) -> 형상관리(SCM)
UI 요구사항
인터뷰 -> 사용자 리서치 -> 목표정의(요구사항 정의)
-> 활동사항 정의(사실상 계획)
UI 요구사항 작성
요구사항 요소 확인 -> 정황 시나리오 작성 -> 요구사항 작성
설계서(Specification)
UI 설계서
UI 요구사항 + UI 프로토타입 으로 만든
UI 설계서 표지 작성 -> UI 설계서 개정 이력 작성
-> UI 요구사항 정의서 작성 -> 시스템 구조 작성
-> Site Map 작성 -> Process 정의서 작성(정황 시나리오) -> 화면 설계
인터페이스 설계서
시스템 인터페이스 설계서
시스템 인터페이스 식별, 인터페이스 송수신 방법, 인터페이스 송수신 데이터
시스템 인터페이스 목록
Interface ID, Name, 송신 기관, 송신 시스템, 수신 기관, 수신 시스템,
대내외 구분, 연계방식, 통신유형, 처리형태, 연계주기, 데이터 형식,
담당자, 요구사항 ID
시스템 인터페이스 정의서
인터페이스 목록에서
Inteface ID, Name, 처리 유형, 통신 유형, 주기, 인터페이스 구분, 데이터 포맷
인터페이스 송수신 명세에서
송/수신 시스템별 시스템명, 인터페이스 방식, Input, Output 데이터 정의
코드매핑규칙
정적 동적 모형을 통한 인터페이스 설계서
시스템을 구성하는 요소들 간의 트랜잭션을 통해 인터페이스를 확인함
상세 기능별 인터페이스 명세서
인터페이스를 통한 세부 기능 개요, 사전/사후 조건, 인터페이스 데이터, 반환값 등
컴포넌트 구현 명세서
45, 컴포넌트 구현에 필요한 컴포넌트 구조도, 컴포넌트 목록
, 컴포넌트 명세, 인터페이스 명세(세부 아님)로 구성된 설계서
모듈 세부 설계서
컴포넌트 명세서 + 인터페이스 명세서 (사전조건, 사후조건, 파라미터, 반환값)
UI
웹의 3요소
UML
사물(구조, 행동, 그룹, 주해)
관계
집합 포함은 상하의 독립성 여부
Structural Diagram / Behavioral Diagram 구분 및 종류
Test
개념 정의
Test Case
요구사항을 확인하기 위한 명세기반 테스트의 설계산출물
Test Scenario
특정 기능을 위해 필요한 테스트 순서에 따라 묶은 Test Case의 집합, 명세
Test Procedure(Test Script)
Test Scenario 등을 고려해 실제로 테스트를 수행할 Test Case 의 집합, 명세
Test Oracle
테스트 케이스에 대한 예상 결과 비교 기법 및 활동
True Oracle(참 오라클, 모든 테스트 케이스), Sampling(몇몇 케이스)
Heuristic Oracle(추정 오라클, 샘플링하고 남은값 추정)
Consistent Oracle(일관성 검사 오라클, 어플리케이션 수정 전후 결과값 비교)
ISO/IEC/IEEE29119
테스트 케이스 작성에 대한 표준, QA 할 때 이거 있음
Identifier, Test Item, Input Specification, Output Specification(예상값임),
Environmental Needs, Specail Procedure Requirement, Inter-case Dependencies.
어플리케이션 테스트의 원리
파레토 법칙 - 20퍼 모듈에 80퍼의 에러가 있음
살충제 패러독스 - 동일한 케이스 반복은 에러가 발견되지 않아 케이스 발전필요
오류 부재의 궤변 - 오류가 없어도 요구사항을 만족시키지 못하면 품질이 낮음
테스트 단계
단위 모듈 테스트
모듈이 아니라 단위 기능을 구현하는 모듈, 혹은 모듈들을 대상으로 하는 거임
계획 및 제어 -> 분석 및 설계(Test Case, Scenario)
-> 구현 및 실현(Test Procedure) -> 평가 -> 완료
(연계 테스트)
연계 서버와 모듈을 같이 테스트 하는것.
단위 테스트 케이스(선) + 연계 테스트 케이스(후)
연계 서버의 모니터링 현황
통합 테스트(Integration Test)
비점진적 통합방식 -> 빅뱅 통합 테스트
점진적 통합방식
하향식 통합방식(Top Down)
상위 모듈이 우선적이 하위모듈을 스텁(Stub) 으로 대체함
깊이 우선 통합법, 넓이 우선 통합법
시스템의 구조가 초기부터 드러나지만 초기엔 테스트 케이스 적용이 힘듬
상향식 통합방식(Bottom Up)
상위 모듈이 Driver 로 대체되고 나머지 하위 모듈이 Cluster 단위가 됨.
혼합식 = 샌드위치
인수 테스트(Acceptance Test)
Alpha Test, Beta Test, 사용자 인수 테스트, 운영상의 인수 테스트,
계약 인수 테스트, 규정 인수 테스트 등
테스트 분류
프로그램 실행 여부로 정적/동적
시각에 따라
Validation - 확인, 요구사항이란 이데아
Verification - 검증, 명세서따라서
기준에 따라서
명세 기반 테스트 => 블랙박스 테스트
동등 분할, 경계 값 분석
경험 기반 테스트 => 블랙박스 테스트
에러 추정, 체크 리스트, 탐색적 리스팅,
원인 효과 그래프 검사(통계적으로 테스트 케이스 선별)
구조 기반 테스트 = 화이트박스 테스트
기초 경로 검사
테스트 케이스 설계자가 기초 경로 집합을 만들어가 검사
제어 구조 검사
조건 검사, 루프 검사, 데이터 흐름검사(변수 정의 및 사용에 초점)
검증 기준
기능기반 Coverage ( 기능 수 / 전체 기능 수, 얘는 블랙박스임)
라인 Coverage ( 코드 라인 수 / 전체 라인 수)
코드 Coverage ( 구조 코드 기준 )
문장 검증 기준 : 모든 구문이 한번 이상 ( 중복실행 무시니 하등한것)
분기 검증 기준 : 모든 조건문이 한번 이상
조건 검증 기준 : 분기 + if(A&B) 면 A&B 가 T, F 인 경우
분기/조건 기준 : 분기 + if(A&B) 면 A, B 각각 T, F 의 경우
목적에 따라서
회귀 테스트(Regression) - 모듈을 합칠 때 그 영향으로 인한 에러를 확인
병행 테스트(Parallel) - 프로그램 변경 전후를 동일한 데이터로 비교
테스트 자동화
정적 분석 도구 - 작성된 소스 코드를 사람이 이해하고 있어야함
테스트 실행 도구 - 데이터 주도 접근 방식 / 키워드 주도 접근 방식 (동작 키워드)
성능 테스트 도구
테스트 통제 도구 - 형상 관리 도구, 결함 추적/관리 도구
테스트 하네스 도구
Test Driver, Test Stub, Test Suites(Test Cast 단순 집합)
Test Case, Test Script, Mock Object(입력된 조건보의 사용자 행위를 수행하는 객체)
결함
심각도는 전체 시스템에 미치는 결함의 영향이고,꼭 처리 우선순위와 관계 없다.
결함 분포(모듈, 컴포먼트 당), 결함 추세(시간에 따른), 결함 에이징(지속 시간)
소프트웨어 분류
상용 소프트웨어
산업 범용 소프트웨어 - 시스템 소프트웨어, 미들웨어, 응용소프트웨어
산업 특화 소프트웨어 - 자동차, 항공, 조선, 건설, ...
서비스 제공 소프트웨어 (판매용 x)
신규 개발, 기능 개선, 추가 개발, 시스템 통합 - 서비스 위주로 분류
Code
미들웨어 솔루션 명세
사후관리
Release Note
개발 과정의 정보를 사용자와 공유하는 것.
모듈 식별 -> 릴리즈 정보 확인 -> 릴리즈 노트 개요 작성
-> 영향도 체크(해당 릴리즈 버전의 기능 변화의 영향 기술)
-> 정식 릴리즈 노트 작성 -> 추가 개선 항목 식별
DRM(Digital Right Management)
Packager 는 DRM Packaging 함
그 결과 Clearing House 에 Licence 가 있고, Content 에 전자서명이 남음
소비자는 DRM Controller로 Security Container 에 있는 배포컨텐츠를 제한당함
설치 메뉴얼
기능 식별 -> UI 분류(설치용 프로그램) -> 설치 파일 / 백업파일 확인
-> Uninstall 절차 확인 -> 이상 Case 확인 -> 최종 메뉴얼 적용
사용자 메뉴얼
동작 가능한 컴포넌트 단위로 작성 => 컴포먼트 명세서, 컴포먼트 구현 설계서가 토대
Profile
소프트웨어의 구동 환경을 점검하는 파일, 맘대로 경로 등 바꾸면 안댐'
기능 식별 -> 사용자 화면 분류 -> 사용자 환경 파일 확인 -> 초기화 절차 확인
-> 이상 Case 확인 -> 최종 메뉴얼 적용
헷갈리고 잘나오는 단어
가용성
5, 프로그램이 주어진 시점에서 요구사항에 따라 운용될 수 있는 능력
6, 사용하고자 할 때 언제라도 사용할 수 있는 정도
20, 장애 없이 정상적으로 서비스를 제공하는 것이다.
TCO(Total Cost Ownership)
JDBC, ODBC(Open DAatabase Connectivity)
SCM(Software Configuration Manager, 형상관리)
소프트웨어 개발 단계의 각 과정에서 만들어지는 프로그램이나
프로그램을 설명하는 문서, 데이터 등을 통칭하여 형상이라고 함.
이런 형상의 변경사항을 관리하는 일련의 활동
형상관리의 도구 중 하나로 버전 관리 도구가 있음
Use Case
사용자 측면에서의 요구사항
다이어그램 형식으로 묘사되며 유스케이스 명세서를 나타냄
Encryption(암호화),
Sniffing(네트워크 중간에 빼돌리기)
ESM(Enterprise Security Management)
MOM(Message Oriented Middleware, 메시지 지향 비동기형 메시지 미들웨어)
DFD(Data Flow Diagram, 자료흐름도) - 72, 요구사항 분석에서 자료의 흐름 및 변환 과정의 도식
BPR(Business Process Reengineering, 업무 프로세스 재설계) - 72, 기업이 생산성을 위해 자신의 업무 프로세스를 재설계 함.
프로그램 명
IDE(Integrated Development Environment)
Editor + Compiler + Debugger + ...
Eclipse(Cross), Visual Studio(Win), Xcode(Mac), Android Studio(Android), IDA(Cross)
Builder
Preprocessing + Compile + Link + Build
Ant(Another Neat Tool)
Apache Software Foundation, XML, 자유도 너무 많음
Maven
Ant 대안, 표준 있음. Dependency 설정으로 Lib 관리
빌드 자동화 도구
Gradle
Ant, Maven 보안, Android Studio, 다언어 지원
Dependency 활용, Groovy 기반 빌드 스크립트
Groovy 기반의 DSL(Domain Specific Language)를 스크립드 언어로 사용
Task 단위로 실행하며, 이에 따른 빌드 캐시 기능
Jenkins
서블릿 컨테이너에서 실행되는 서버 기반 도구. Java
분산 빌드나 테스트가 가능
버전 관리 도구
공유 폴더 방식(Local + DB)
SCCS, RCS, PVCS, QVCS,
Client / Server
CVS, SVN, CVSNT, Clear Case, CMVC, Perforce
(SVN)Subversion
Apache Software. trunk 디렉토리와 추가로 branches 가 있음
import(최초) / checkout -> working -> add -> update -> commit 패턴
분산 저장소
Git, GNU arch, DCVS, Bazaar, Mercurial, TeamWare, Bikeeper, Plastic SCM
Git
스냅샷으로 파일의 변화가 저장. 이전 스냅샷 포인터로 연결된 리스트.
staging 영역 -> Local 저장소(Commit 시 됨) -> 원격저장소(push)
init, remote add / fetch -> add-all -> commit -> push
어플리케이션 관리
결함관리도구
Mantis - 결함 및 이슈 관리 도구, 단위별 작업 내용 기록되 되서 결함 추적도 됨
Trac - 결함 추적 / 결함 통합 관리도구
Redmine - 프로젝트 관리 및 결함 추적 가능
Bugzilla - 결함 신고, 확인, 처리 등 지속적 관리. 우선순위, 심각도 등 가능
성능 테스트 도구
JMeter(Cross), LoadUI(Cross), OpenSTA(Window)
위는 HTTP, FTP 등 다양한 프로토콜에 대한 부하 테스트임
APM(Application Performance Management, Monitoring)
리소스 방식 : Nagios, Zabbix, Cacti
End to End 방식 : Scouter, Zabbix(웹기반), 둘다 Cross
소스코드 품질 분석 도구
정적 분석 도구, pmp, cppcheck, SonarQube, checkstyle, ccm, cobertura(java)
동적 분석 도구, Avalanche(STP 기반, Valgrind 프레임워크), Valgrind
인터페이스 구현검증도구
xUnit : 다양한 언어 지원하는 단위 테스트 프레임워크
Selenium(웹 어플리케이션 테스트), watir(Ruby, 어플리케이션)
STAF(서비스 호출, 컴포먼트 재사용) -> FitNesse(웹 기반)
-> NTAF(네이버, FitNesses + STAF)
댓글 없음:
댓글 쓰기