일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다크모드
- MongoDB
- 페이징 교체 알고리즘
- nosql
- CPU 스케줄링
- 4-way handshake
- PERT/CPM
- redis
- MVVM
- 선언형
- 3-way handshake
- 함수형
- 프로그래머스 데브코스
- 인터넷계층
- modebit
- 처리량
- 메모리
- M/M
- 프로젝트 계확
- 지연시간
- 노출모듈패턴
- 관계형 데이터베이스
- 링크계층
- 개발 모델
- 스레싱
- 프록시패턴
- 다단계 큐
- 럼바우
- 요구사항 분석
- 절차형
- Today
- Total
노트
소프트웨어 공학, 방법론 본문
소프트웨어 공학이란(Software Engineering)?
품질 높은 소프트웨어를 효율적으로 개발하기 위한 학문.
개발에 적용되는 이론, 방법, 도구를 포괄.
소프트웨어 공학 3R -> 소프트웨어의 생산성을 극대화
- Reverse Engineering(역공학): 개발된 시스템을 분석하여 요구 분석서, 설계서 등의 문서를 추출하는 작업
- Recycle Engineering(재공학): 기존 소프트웨어를 기능을 개선하거나 새로운 소프트웨어에 재활용하는 공법
- Reuse(재사용): 이미 개발된 소프트웨어의 전체 또는 일부를 다시 사용하는 것을 의미
재공학 과정: 분석(Analysis) -> 재구성(Restructuring) -> 역공학(Reverse Engineering) -> 이관(Migration)
소프트웨어 개발 단계
계획 -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 유지보수
1. 소프트웨어 개발 방법론 종류
1) 구조적 방법론
- 절차지향 소프트웨어 개발 방법론(하향식)
- 제한된 구조에서 코드 생성 및 순차적 실행
과정 | 설명 |
요구사항 분석 | 고객의 요구사항을 끌어내어 명세화 |
고주적 분석 | 원하는 기능/환경/데이터를 종합하여 데이터 흐름도 작성 |
구조적 설계 | 모듈 중심 설계 과정 |
구조적 프로그래밍 | 순차, 선택, 반복의 논리 구조 구성으로 프로그램 작성 |
구성 요소: 데이터 흐름도(DFD), 자료사전(DD), 상태전이도(STD), 소단위 명세서(minispec)
2) 정보공학 방법론: 기업의 주요 부분을 계획, 분석, 설계, 구축에 정형화된 기법들을 상호 연관성 있게 통합
3) 객체지향 개발 방법론
- 현실세계의 개체(Entity)를 속성(Attribute)과 메서드(Method) 형태로 표현
- 객체, 클래스 간의 관계를 식별하여 설계 모델로 변환하는 방법론
- 캡슐화, 정보은닉, 상속, 다형성, 추상화
4) CBD(Component Based Development) 분석 방법론
- 재사용 가능한 컴포넌트의 개발 또는 상용 컴포넌트를 조합해 어플리케이션 개발
- 새로운 기능 추가가 쉬운 확장성, 생선성 및 품질이 향상, 시스템 유지보수 비용 최소화
5) 애자일 방법론
- 기존 방법론들이 절차를 중시한 나머지 변화에 빠른 대응을 할 수 없는 단점 개선
- 고객의 요구사항에 빠르게 대응하여 개발
- 종류: XP(eXtreme Programming), SCRUM, FDD, Crystal 방법론 등
2. 소프트웨어 개발 모델
1) 폭포수 모델(Waterfall Model)
- 계획, 분석, 설계, 구현, 테스트, 운영 등 전 과정을 순차적으로 접근하는 개발 모델(선형 순차 모델)
- 각 단계의 검증 후 다음 단계 진행
- 순차적으로 진행되기에 병행되거나 거슬러 반복 진행 X, 요구사항 변경 어려움
2) 프로토타이밍 모델(Prototyping Model)
- 고객이 요구한 주요 기능을 프로토타입으로 구현
- 개발자가 구축할 소프트웨어의 모델을 사전에 만들어 요구사항을 효과적으로 유도
- 장점: 사용자의 요구사항을 충실히 반영, 비교적 빠른 기간 안에 사용자가 평가할 수 있는 결과물이 만들어 짐.
오류를 초기에 발견 가능, 변경이 용이
- 단점: 시간과 비용이 훨씬 많이 들 수 있음. 사용자가 실제 제품과 혼동할 수 있음.
문서작성 소홀해질 수 있음. 프로토타입 폐기에 따른 비용이 듦.
3) 나선형 모델(Spiral Model)
- 폭포수 모델과 프로토타이핑 모델의 장점을 수용, 위험 분석을 추가한 점증적 개발 모델
- 프로젝트 수행 시 발생하는 위험 관리, 최소화하려는 것이 목적
- 대규모 프로젝트 및 위험 부담이 큰 시스템 개발에 적합
계획수립 -> 위험분석 -> 공학적 개발 -> 고객 평가
- 장점: 위험분석 과정으로 위험성이 큰 프로젝트를 수행 가능.
고객의 요구사항을 보다 더 상세히 적용 가능
- 단점: 시간과 비용이 많이 들 수 있다. 반복 단계가 길어질수록 프로젝트 관리가 어려움.
4) RAD(Rapid Application Development) 모델
- 매우 짧은 개발 주기를 강조하는 점진적 소프트웨어 개발 방식
- 강력한 소프트웨어 개발 도구를 이용하여 매우 짧은 개발 주기로 개발하는 순차적 소프트웨어 개발 프로세스
- CASE(Computer Adied Software Engineering) 도구를 이용해 시스템을 개발
- 기술적으로 위험이 적고 빠른 개발이 요구될 때 사용이 적합
5) V 모형
- 폭포수 모델에 시스템 검증과 테스트 작업을 강조
- 높은 신뢰성이 요구되는 분야에 적합
인수 테스트: 알파 테스트(개발자+사용자), 베타 테스트(사용자)
요구 분석 <- 요구 분석 검증 -> 시스템 테스트: 기능, 비기능
아키텍처 설계 <- 인터페이스 검증 -> 통합 테스트: 상향식(드라이버), 하향식(스텁)
모듈설계 <- 모듈 검증 -> 단위 테스트: 정적, 동적
구현
6) 4세대 기법: CASE 등의 자동화 도구를 이용하여 요구사항 명세로부터 원시코드를 자동으로 생성
3. 애자일(Agile) 방법론
1) 개념: 애자일 개발을 가능하게 해주는 다양한 방법론 전체를 일컫는 말, 경량(Lightweight) 프로세스라고도 함. 프로젝트를 시작 후 끊임없이 개선 노력
애자일 선언문
- 공정과 도구보다 개인과 상호작용
- 포괄적인 문서보다 작동하는 소프트웨어
- 계약 협상보다 고객과의 협력
- 계획을 따르기보다 변화에 대응
- 왼쪽의 가치도 인정하나 오른쪽을 좀 더 중요시
2) 특징
- 지속적인 소통을 통하여 변화하는 요구사항을 신속하게 수용
- 팀의 목적을 우선시하며 고객의 의견을 가장 우선
- 팀원들과 주기적인 회의와 제품을 시연함으로써 소프트웨어 점검
- 작업 계획을 짧게 세우고, 반복적으로 수행 변화에 유연하게 대처
3) 종류
1. XP(eXtream Programming)
- XP 5가지 핵심가치: 용기, 존중, 의사소통, 피드백, 단순성
- 12가지 실천사항
- 짝 프로그래밍(Pair Programming): 하나의 작업을 2명의 프로그래머가 코딩 리뷰 공동 수행
- 계획 세우기(Planning Game): 게임처럼 선수와 규칙, 목표를 두고 기획 수행
- 테스트 기반 개발(Test Driven Development): 선 단위 테스트 후 실제 코드 작성
- 고객 상주(Whole Team): 개발 효율을 위해 고객을 프로젝트 팀원으로 상주
- 지속적인 통합(Continuous Integration): 상시 빌드 및 배포가 가능한 상태로 유지
- 코드 개선(Design Improvement): 코드 개선 작업 수행(가시성, 성능 등) 불필요한 기능 제거 및 리팩토링
- 작은 릴리즈(Small Releases): 짧고 잦은 릴리즈로 고객이 변경사항을 볼 수 있게 함(잦은 피드백)
- 코딩 표준(Coding Standards): 표준화된 관례에 따라 코드 작성
- 공동 코드 소유(Collective Code Ownership): 시스템에 있는 소스코드는 팀의 모든 프로그래머가 언제라도 수정 가능
- 간단한 디자인(Simple Design): 가능한 가장 간결한 디자인 상태 유지
- 시스템 메타포어(System Metaphor): 최종적으로 개발되어야 할 시스템의 구조를 조망
- 작업시간 준수(Sustainable Pace): 주 40시간 이상 작업 금지, 2주 연속 오버타임 금지
2. 스크럼(SCRUM)
- 소프트웨어에 포함될 기능, 개선점에 대한 우선순위를 부여
- 개발 주기는 30일 정도(스프린트)로 조절, 개발 주기마다 실제 동작할 수 있는 결과를 제공
- 날마다 15분 정도의 회의, 항상 팀 단위로 생각
3. 그 외
크리스털 패밀리, FDD(Feature-Driven Development) - 기능주도 개발, ASD(Adaptive Software Development)
'정보처리기사 정리' 카테고리의 다른 글
2 데이터 입출력 구현 (0) | 2024.04.16 |
---|---|
소프트웨어 설계의 기본 원칙 (0) | 2024.04.15 |
요구사항 모델링 (0) | 2024.04.13 |
요구사항 분석 (0) | 2024.04.12 |
프로젝트 계획 (0) | 2024.04.12 |