소프트웨어 개발 방법론 (3)
3. 소프트웨어 개발 방법론
1) 소프트웨어 개발 방법론
정의
- 소프트웨어 개발 전 과정에 지속적으로 적용할 수 있는 방법, 절차 기법을 말한다.
- 소프트웨어를 개발함에 있어 생산성과 소프트웨어 품질을 향상시킨다.
- 소프트웨어 공학(품질향상)에서 가장 많이 활용하는 방법론이다.
절차
- 분석, 설계, 구현, 시험으로 나뉜다.
분석 : 개발준비, 시스템 요구사항 분석, 소프트웨어 요구사항 분석
설계 : 시스템 설계, 소프트웨어 구조 및 상세 설계
구현 : 소프트웨어 코딩 및 단위 시험
시험 : 소프트웨어와 시스템 통합 및 테스트, 소프트웨어 설치 및 인수 지원
소프트웨어 개발 방법론 선정
- 정형화된 소프트웨어 개발 방법론의 특징을 파악한다.
- 소프트웨어 개발 방법론의 특징을 고려하여 타당성과 적정성을 설정한다.
타당성 : 개발 절차에 따라 선정
적정성 : 개발 단계별 산출물에 따라 선정
*중요
2) 소프트웨어 개발 방법론 종류
구조적 방법론
- Yourdon에 의해 개발됬다.
- 구조적 분석을 통해 고생의 요구사항을 자료 흐름도(DFD)로 표현한다.
자료흐름도(DFD) : 프로그램을 기능 단위별 데이터의 흐름으로 표현한 구조
자료 사전(DD) : DFD에 표현된 자료 저장소를 구체화
- 모듈 중심의 설계를 통해 모듈 간 결합도를 낮춰 독립성을 높인다.
- 순차, 선택, 반복의 논리 구조 구성으로 프로그램 복잡성을 최소화한다.
정보공학 방법론
- 1980년대 등장한 방법론으로 개발 단계별 정형화된 기법들을 통합 적용한 데이터 중심 방법론이다.
- 업무 영역 분석을 통해 개념적인 수준의 데이터와 프로세스를 설계한다.
데이터 모델링 도구 : 개체-관계 다이어그램(ERD)
프로세스 모델링 도구 : 자료 흐름도, 프로세스 의존도(PDD), 프로세스 계층도(PHD)
- ERD를 기반으로 분할 다이어그램, 액션 다디어그램, 의존 다이어그램 등을 활용해 실질적인 시스템을 설계한다.
객체지향 방법론
- 실체(Entity)를 독립된 형태의 객체(Object)로 표현하고, 객체들 간 메세지 교환을 통해 상호작용하도록 프로그램을 개발하는 방법론이다.
속성 : 객체를 나타내는 성질, 값, 데이터
메소드 : 객체의 속성을 이용한 일련의 동작들
예를 학생으로 들어보자
학생의 속성은 이름, 성적, 성별, 연락처 등이다.
메소드는 학생의 행동인 공부, 식사, 샤워 등이다.
- 데이터 객체를 저장하기 위해서 관계형 테이블로 변환하는 과정이 필요하다.
객체 지향 방법론의 기본 원칙
- 캡슐화 : 데이터와 해당 데이터의 처리 기능을 하나로 묶어냄
- 정보은닉 : 다른객체에게 자신의 정보를 숨김
- 추상화 : 객체의 공통적인 속성을 상위 객체로 도출
- 상속성 : 상위 객체의 속성을 하위 객체가 물려받아 사용
- 다형성 : 하나의 수향방법으로 여러 형태의 기능 수행
컴포넌트 기반(CBD) 방법론
- 컴포넌트들을 조립해서 하나의 새로운 프로그램을 개발하는 방법론이다.
- 개발 생산성, 이식성 및 호환성, 신속성, 유연성, 표준화 등의 장점이 있다.
- 선행 투자 비용이 높고, 조립식 시스템에 따르는 책밍 및 지적 재산권을 고려해야한다.
컴포넌트 기반의 단계별 산출물
- 분석 단계 : 사용자 요구사항 정의서, 유스케이스 명세서, 요구사항 추적표
- 설계 단계 : 사용자 인터페이스 설계서, 컴포넌트 설계서, 인터페이스 설계서, 아키텍처 설계서, 총괄시험 계획서, 시스템 시험 시나리오, 엔티티 관계 모형 기술서, 단위시험 케이스
- 구현 단계 : 프로그램 코드, 단위시험 결과서, 데이터베이스 테이블
- 시험단계 : 통합시험 결과서, 시스템시험 결과서, 사용자 지침서, 운영자 지침서, 시스템 설치 결과서, 인수시험 결과서
애자일 방법론
- 수시로 변하는 상황과 고객의 요구사항을 바로바로 반영하여 개발하는 방법론
제품 계열 방법론
- 특정 제품에 적용하고 싶은 공통된 기능을 개발하는 방법론\
- 임베디드 소프트웨어를 작성하는 데 유용하며 영역공학, 응용공학으로 구분
영역 공학 : 영역 분석, 영역 설계, 핵심 자산을 구현하는 영역
응용 공학 : 제품 요구 분석, 제품 설계, 제품을 구현하는 영역
3) 소프트웨어 보안 개발 방법론
정의
- 소프트웨어의 보안 취약점을 최소화 하기 위한 지침 및 사례를 기반으로 개발 하는 방법론이다.
- 시스템 환경에 따라 다양한 취약점이 발견되므로 다양한 보안 방법론들이 존재한다.
MS-SDL
- 마이크로소프트사가 자체적으로 수립한 소프트웨어 개발 모델이다.
Seven Touchpoints
- 실무적으로 검증된 소프트웨어 보안의 모범 사례 7가지를 개발 모델에 통합한 것이다.
코드검토
아키텍처 위험 분석
침투 테스트
위험 기반 보안 테스트
악용 사례
보안 요구
보안 운영
CLASP
- 소프트웨어 개발 초기 단계의 보안을 강화하기 위한 정형화된 절차이다.
- 활동 중심, 역할 기반의 프로세스로 구성되어 있으며 이미 운영중인 시스템에 적용하기 좋다.
- 개념, 역할 기반, 활동 평가, 활동 구현, 취약성의 5가지 관점에 따라 보안 절차를 진행한다.
CWE
- 소프트웨어 보안 취약점을 유발하는 원인을 7가지로 정리한 보안 개발 방법론이다.
입력 데이터 검증 및 표현 : 입력값에 대한 잘못된 검증, 잘못된 형식 지정
보안 기능 : 부적절한 보안 기능 구현
시간 및 상태 : 병렬 시스템에 환경에서 부적절한 시간 및 상태 관리
에러 처리 : 에러 처리가 미흡하거나 처리 과정에서 중요 정보 포함
코드 오류 : 인가되지 않은 사용자에게 데이터 유출
캡슐화 : 중요한 데이터 등을 충분히 캡슐화하지 않아 데이터 누출
API 오용 : 보안에 취약한 API를 잘못된 방법으로 사용