* 소프트웨어 공학 (Software Engineering)
: 소프트웨어 위기를 극복하고 품질 높은 소프트웨어를 효과적으로 개발하기 위한 학문
* 소프트웨어 공학의 3R
1. 역공학 (Reverse Engineering) - 이미 개발된 것 문서화, 역순
: 이미 개발된 시스템을 분석하여 문서를 추출하는 작업
2. 재공학 (Re-Engineering) - 잘못된 부분만 수정하는 기법, 예방보수를 통한 소프트웨어 위기 해결
: 유지보수의 생산성을 통해 소프트웨어의 위기를 해결하기 위한 방법
▷ 재공학 과정 : 분석 (Analysis) - 재구성 (Restructuring) - 역공학 (Reverse Engineering) - 이관 (Migration)
3. 재사용 (Reuse)
: 이미 개발된 소프트웨어의 전체 또는 일부를 다시 사용하는 것을 의미
▷ 재사용의 범위 : 함수와 객체 재사용, 컴포넌트 재사용, 애플리케이션 재사용
▷ 재사용 방법
- 합성 중심 (Composition Based, 블록구성) : 모듈을 조합하여 소프트웨어를 완성하는 방법 (조합)
- 생성 중심 (Generation Based, 패턴구성) : 추상화된 형태의 명세를 구체화하여 프로그램을 만드는 방식 (추상화)
* 소프트웨어 개발 단계 : 계획 - 분석 - 설계 - 구현 - 테스트 - 유지보수
1. 계획 (Planning) - 비용 및 일정
2. 분석 (요구사항 분석; Requirements Analysis) - 요구사항 분석서, 요구사항 명세서
: 사용자의 머리속에 있는 생각을 도출해 내는 것 (도분명확)
3. 설계 (소프트웨어 설계; Design) - DFD, DD, Minispec(소단위명세서), ERD, STD(상태전이도)
: 모델링 (실제로 그림을 그리는 것 - ex. 화면설계서)
4. 구현 (Development) - 형상 배포, 협업, 코딩, 디버깅, 단위 테스트 진행
5. 테스트 (Test) - 단위, 통합, 시스템, 인수
6. 유지보수 (Maintenance) - 수정, 향상, 적응, 예방
* 소프트웨어 개발 방법론
1. 구조적 방법론 - 절차지향적, 하향식, 데이터의 흐름에 초점
: 절차지향적인 소프트웨어 개발 방법론으로 사전에 정의된 구조에 따라 코드를 작성하고 순차적으로 실행하는 방식
▷ 구성요소
- 데이터 흐름도(DFD; Data Flow Diagram) : 데이터 흐름을 그래픽으로 표현
- 자료사전 (DD; Data Dictionary) : 데이터의 세부 사항을 문서화
- 상태전이도 (STD; State Transition Diagram) : 상태 변화를 시각적으로 표현
- 소단위 명세서 (Minispec) : 개별 모듈의 기능과 로직을 상세하게 기술
- ERD : DB 구조를 그린 것
2. 정보공학 방법론 - 기업 내부에 있는 데이터에 초점
: 기업의 주요 부분을 계획, 분석, 설계, 구축에 정형화된 기법을 상호 연관성 있게 통합하여 적용하는 방법론
3. 객체지향 개발 방법론 - 상향식
: 현실 세계의 개체를 속성과 메서드로 표현하며 객체와 클래스 간의 관계를 식별하고 설계 모델로 변환
▷ 특징 ★
1) 캡슐화 : 객체의 세부구현을 숨기고 인터페이스만 제공하여 내부 구현을 보호
2) 정보은닉 : 객체의 내부 세부 사항을 외부로부터 숨김으로써 안정성을 높임
3) 상속 : 재사용과 확정성을 위해 상위 클래스의 속성과 메서드를 하위 클래스가 상속(사용)
4) 다형성 : 하나의 인터페이스가 다양한 형태의 구현을 가질 수 있음
- 오버로딩 : 인자 개수 차이 (파라미터 개수 차이)
- 오버라이딩 : 상속을 받았을 떄 메서드를 재정의 하는 것
5) 추상화 : 복잡한 현실 세계를 단순화하여 필요한 부분만을 모델링
- 공통의 성질들을 모아놓은 것
4. CBD 방법론 (Component Based Development)
: 재사용 가능한 컴포넌트를 개발하거나 상용 컴포넌트를 조합하여 애플리케이션을 개발하는 방법론
5. 애자일 방법론
: 변화에 빠르고 유연하게 대응하는 개발 방식을 지향
▷ 애자일 방법론의 종류
- XP(eXtreme Programming)
- SCRUM
- FDD (Feature-Driven Development)
- Crystal 방법론
- ASD (Adaptive Software Development)
- 린 (Lean)
* 소프트웨어 개발 모델
1. 폭포수 모델 (Waterfall Model) - 선형순차적모델
- 개발 과정이 계획, 분석, 설계, 구현, 테스트, 운영 순으로 순차적으로 진행된다.
- 각 단계는 이전 단계가 완료된 후에 시작되며, 다음 단계로 넘어가기 전에 철저한 검증을 거침
- 한번 시작된 단계는 이전 단계로 돌아가거나 병행 진행이 허용되지 않아 변경이 어렵다.
- 오래된 소프트웨어 개발 모델로, 다양한 성공 사례가 있으며 예측 가능성이 높다.
- 각 단계는 명확한 목표와 산출물을 가진다.
- 초기에 설정된 요구사항을 나중에 변경하기 어려워 유연성이 낮다.
- 시장이나 기술의 변화에 빠르게 대응하기 어렵다.
- 개발 과정 중 고객의 피드백을 적극적으로 받기 어려우며 초기에 설정된 요구사항을 나중에 변경하기 어렵다.
2. 프로토타이핑 모델 (Prototyping Model)
- 고객이 요구하는 주요 기능을 프로토타입(시제품)으로 먼저 구현하는 모델이다.
- 개발된 프로로타입(시제품)은 폐기되거나 재사용될 수 있다.
3. 나선형 모델 (Spiral Model) - 위험분석
- 순서 : 계획 - 위험분석 - 개발 - 평가 ★
- 프로젝트 수행 시 발생할 수 있는 위험을 미리 관리하고 최소하는 데 중점을 두며 점진적으로 개발하는 모델이다.
- 대규모 프로젝트나 위험 부담이 큰 시스템 개발에 적합하다.
4. RAD 모델 (Rapid Application Development)
- 매우 빠른 개발 주기를 통해 소프트웨어를 신속하게 제공하는 방법론이다.
- 고급 소프트웨어 도구와 CASE 도구를 활용하여 개발 효율성을 높인다.
5. V 모형 ★
- 개발의 각 단계에서 검증과 테스트를 중점적을진행하는 모델이다.
1) 단위 테스트 : 정적 / 동적 테스트
2) 통합 테스트 : 상향식테스트(드라이버), 하향식테스트(스텁), 빅뱅테스트
3) 시스템 테스트 : 기능 / 비기능 테스트
4) 인수 테스트 : 알파 / 베타 테스트
→ 단통시인 순서로 외우기 단!통!시!인!
6. 4세대 기법 (4th Generation Techniques)
- 요구사항 명세서를 기반으로 소프트웨어 코드를 자동으로 생성하는 기법이다.
* 애자일 방법론 (Agile)
: 신속하고 반복적인 작업을 통해 지속적으로 작동 가능한 소프트웨어를 개발하는 방식
1. XP (eXtreme Programming)
- 문서보다는 코드를 중시하며 5가지의 핵심 가치와 12개의 실천 항목이 있다.
- 개발을 세분화하여 1~3주의 반복 주기로 개발을 진행한다.
▷ XP 5가지 핵심 가치 : 의사소통, 피드백, 존중, 용기, 단순성 ★
→ 의사선생님 저 약 주실 때 피존용기에 담아서 담(단)아서 주세요!
▷ XP의 12가지 실천사항
1) 짝 프로그래밍 (Pair Programming) : 코드는 쌍을 이룬 개발자들에 의해 작성
2) 계획 세우기 (Planning Game) : 요구사항을 우선순위대로 정렬하고 반복적인 계획을 수립
3) 테스트 기반 개발 (Test Driven Development) : 개발자들은 시스템의 모든 부분에 대한 자동화된 유닛 테스트를 작성하며, 코드가 통합되기 전에 모든 테스트를 통과해야함
4) 고객 상주 (On-site Customer) : 고객이 팀과 함께 상주하여 시시간 피드백을 제공
5) 지속적인 통합 (Continuous Integration) : 작업한 코드를 매일 여러번 형상관리 서버에 통합
6) 코드 개선 (Refactoring) : 코드의 구조를 개선하면서 기능을 변경하지 않고 코드를 정리
7) 작은 릴리즈 (Small Releases) : 짧은 개발 주기로 소프트웨어를 자주 출시
8) 코딩 표준 (Coding Standards) : 코드 작성을 위한 일관된 기준을 정하여 팀 내의 의사소통을 개선하고 코드 품질을 유지
9) 공동 코드 소유 (Collective Code Ownership) : 코드베이스는 팀의 모든 구성원이 공동으로 소유하며 필요에 따라 누구나 수정 가능
10) 간단한 디자인 (Simple Design) : 구현해야 할 기능에 중점을 두는 가장 단순한 디자인을 선택
11) 시스템 메타포어 (System Metaphor) : 최종적으로 개발되어야 할 시스템의 구조를 조망
12) 작업시간 준수 (Sustainable Pace) : 일주일에 40시간 이상 작업 금지, 2주 연속 오버타임 금지
2. 스크럼 (Scrum)
- 소프트웨어에 포함될 기능과 개선점에 대해 우선순위를 부여하여 개발의 집중도를 높인다.
- 개발 주기는 1~4주 정도로 조정하며, 각 주기마다 실제 동작 가능한 결과물을 제공한다.
- 각 개발 주기마다 적용할 기능이나 개선 상황에 대한 목록을 작성한다.
- 팀 단위로 협력하며 매일 15분 정도의 짧은 회의를 통해 진행 상황을 점검한다.
▷ 스크럼의 주요 개념 ★
- 제품 백로그 (Product Backlog) : 개발할 제품에 대한 요구사항 목록 (전체적인 것)
- 스프린트 (Sprint) : 1~4주의 짧은 기간을 목표로 반복적인 개발 주기
- 스프린트 계획 회의 (Sprint Planning Meeting) : 스프린트 목표와 스프린트 백로그를 계획하는 회의
- 스프린트 백로그 (Spinrt Backlog) : 스프린트 목표에 도달하기 위한 작업 목록
- 스크럼 마스터 (Scrum Master) : 프로젝트 관리자
- 제품 책임자 (Product Owner) : 제품 백 로그를 정의하여 우선순위를 정해준다.
- 일일 스크럼 회의 (Daily Scrum Metting) : 날마다 진행되는 15분 정도의 미팅
- 실행 가능한 제품 (Shippable Product) : 스프린트의 결과로써 나오는 실행 가능한 제품
3. 크리스털 (Crystal) : 프로젝트의 규모와 영향의 크기에 따라 여러 종류의 방법론을 제공
4. FDD (Feature-Driven Development) : 신규 기능 단위로 2주 정도의 반복 개발을 실시
5. ASD (Adaptive Software Development) : 개발을 혼란 자체로 규정하고 합동 애플리케이션 개발을 사용하는 방법론
6. 린(Lean) : 도요타 린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질을 향상시킨 방법론
* IT 서비스 관리
1. SLM (Service Level Management) : 서비스 수준을 정량적으로 측정하고, 실적을 평가하여 미흡한 부분을 개선하는 관리 활동으로 SLM은 SLA에 명시된 기준을 기반으로 서비스 품질을 관리하고 개선한다.
2. SLA (Service Level Agreement) : 소프트웨어 수요자와 공급자 간에 서비스 수준을 명시적으로 정의한 문서
3. ITSM (Information Technology Service Mangement) : 최종 사용자를 위한 IT 서비스를 구현, 전달, 관리하는 일련의 정책과 관행
4. ITIL (IT Infrastructure Library) : IT 서비스를 쉽게 제공하고 관리할 수 있는 프레임워크