5장. 구조적 방법론
(1) 등장 배경 : 소프트웨어 위기(Software Crisis) -> 소프트웨어 공학(Software engineering) -> 구조적 방법론
1) 장점 : 체계적이고 정량적인 접근법
2) 단점 : 상호관계분석이 약함
(2) 구조적 프로그래밍(Structured programming)
1) 구획화(Compartmentalization) : 프로그램을 서브프로그램들로 구획하여 전체 구조를 수월하게 파악할 수 있게 함
2) 모듈(Module) 단위로 개발: 가독성(Readability)을 향상하여 생산성을 향상 BUT 모듈 간 상호관계 불가
(3) 구조적 설계(Structured design) : 프로그램을 계층 구조로 분할된 모듈들의 합으로 설계하는 것
1) 보안 향상 효과: 다른 모듈에 대한 프로그래머들의 지식이 제한
2) 잘 설계된 모듈은 모듈의 응집성(Cohesiveness)은 높고 모듈간 결합성(Coupling)은 낮음
3) 구조적 설계에서 사용하는 기법
- 구조도(Structure Chart) : 시스템을 구성하는 모듈들을 계층 구조로 묘사한 그림
- 모듈 명세서(Module Specification) : 의사 코드(슈도 코드, Pseudo-code)로 간략하게 작성한 소형 명세서
** 프로그래머들은 모듈 명세서를 근거로 할당된 모듈을 개발
(4) 구조적 분석(Structured analysis)
1) 정의 : 시스템이 지원할 비즈니스 프로세스를 하향식(top down)으로 분할하고 시각적으로 표현
2) 대표적 기법
- 배경도(Context diagram) : 시스템을 최상위 수준에서 조망하는 다이어그램
- 개체 관계도(ERD: Entity Relationship Diagram) : 데이터 개체(Entity) 간 상호 관계를 표현하는 시각적 기법
** 분석적 분석 및 설계 모두를 지원하는 기법
- 데이터 흐름도(DFD: Data Flow Diagram): 하위 프로세스들 사이의 데이터 이동을 보여주는 시각적 기법
① 주요 산출물들을 알 수 있음
② DFD는 프로세스 간 관계, ERD는 데이터 객체 간 관계를 보여줌
③ 배경부터 시작하여 시스템을 프로세스 단위로 하향 분할하면서 작성
④ 최하위 프로세스 수준에서 작성된 DFD는 각 프로그래머가 개발할 모듈에 대응
⑤ 프로그래머들은 모듈 별 DFD 와 모듈 명세서를 사용하여 프로그래밍
(5) 데이터 사전(Data Dictionary) : 모든 데이터 항목의 표준 명칭, 의미, 형식, 길이, 용도(참조프로그램), 원천 등을 정
의
** ERD, DFD, 미니 명세서 등을 작성하고 프로그램을 개발할 때 참조
6장. 대안적 개발 방법론
(1) 객체 지향 시스템 개발(OOSD: Object Oriented System Development)
1) 정의 : 프로그램을 객체 단위로 조직하여 개발하고 유지보수
2) 객체(Object ) : 전체 프로그램에 속해 있는 한 부분
- 모듈과는 달리 독립적으로 기능하며 다른 객체들과 상호 작용 (따라서, 복잡한 데이터 관계에 유리)
- 이미 개발된 객체는 다른 프로그램에서 재사용할 수 있어서 개발 노력/시간이 절약 But 같은 언어로 개발되어야 함
3) 캡슐화(Encapsulation) : 객체 안에 메소드와 속성 내장 -> 데이터 은닉(Data hiding)이 이루어져 프로그램의 보안을 향상
4) 클래스(Class) : 속성을 공유하는 객체 집합(객체의 핵심적 공통 속성만 도출하는 과정인 추상화(Abstraction)를 통해 도출)
5) 상속(Inheritance) : 하위 클래스는 상위 클래스의 속성과 메소드를 상속 -> 프로그램 로직을 재사용할 수 있게 함
(2) 속성 응용 개발(RAD: Rapid Application Development)
1) 의의: 낮은 비용과 높은 품질을 유지하면서 전략적으로 중요하고 기능이 분명한 시스템을 신속하게 개발 ** RAD는 요구 사항이 방대한 대규모 시스템을 개발하는 데는 적절하지 않음
2) 사용 도구 및 기법
- CASE(Computer Assisted Software Engineering tools) 도구: 자동화된 개발 도구(산출물공유, 자동 코드 생성 등)
- SWAT(Specialists with Advanced Tools) 팀 : 잘 훈련되고 CASE 도구 사용에 능숙한 개발팀
- 중앙 저장소(Repository) : 결과물은 중앙 저장소에 보관 관리하며 재사용이 가능한 요소는 최대한 재사용
- JAD(Joint Application Development) : 개발자와 사용자가 분석 및 설계를 위한 워크샵을 공동 수행하고 긴밀하게 공조
- 진화적 프로토타이핑 : 신속하게 일차 결과물을 도출하고 품질을 향상하는 방법
- 타임 박스(time box) 기법 : 엄격한 시간 제약을 설정하여 일정 지연을 통제하는 기법
3) RAD의 단계 구성 : 시스템 개발 수명 주기를 구성하는 단계들이 중첩되고 통합
- 개념 정의: 시스템이 지원할 기능과 데이터를 정의하고 개발 범위 확정
- 기능 설계: 데이터/프로세스 모델 개발과 프로토타이핑을 위한 워크샵 개최
- 개발: 실제 DB 와 시스템을 구축하고 이전 계획을 수립하고 시스템 설치
- 설치: 인수 테스트, 훈련, 데이터 변환, 시스템 구현 등을 수행
(3) 애자일 개발(Agile Development)
1) 정의 : 개발 기간 자체의 단축보다는 변화에 대한 민첩한 대응에 초점을 맞춘 접근법
2) 애자일 개발 특징
- 반복적(Iterative) 개발 접근법
- 임파워먼트(Empowerment) : 프로젝트 관리자는 팀원들에게 권한을 대폭 이양하고 지원적인 역할을 수행
- 페어 프로그래밍(Pair Programming) : 팀원들은 2 인 1 조 방식으로 프로그램을 개발
- 백로그(Backlog) : 기능, 요구사항, 기술적 태스크들의 목록(전체 개발 범위와 매 회차(Sprint, 기간)별 개발 대상)
- 암묵적 지식과 노하우의 공유: 객관화되고 문서화된 지식에 더해 경험을 통해 습득한 암묵적 지식과 노하우를 공유
(4) 컴포넌트 기반 개발(CBD: Component Based Development)
1) 정의 : OOSD에서 파생된 개발 접근법으로 프로그램을 컴포넌트(Component) 단위로 조직하여 개발하고 유지보수
2) 컴포넌트(Component) : 다른 컴포넌트와 연계되도록 인터페이스를 표준화하여 제작한 프로그램 단위
- 컴포넌트는 개발 언어나 운영 체제와 무관하게 상호 작동 -> 이질적 환경에서 개발된 여러 프로그램 요소들을 재사용
- OOSD 가 소스 코드를 재사용한다면 CBD 에서는 목적 코드를 재사용 (대체성 향상)
- 웹 기반 응용 시스템 개발에 중요한 요소이며 기본적으로 Active X 나 자바 애플릿이 필요
3) 장/단점
- 장점
① 소프트웨어 재사용을 통해 개발 시간과 비용을 단축
② 컴포넌트 내부의 응집성을 높이고 컴포넌트 간 결합성을 낮추기 때문에 모듈화가 촉진
③ 충분한 품질 검토를 통과한 기존의 컴포넌트를 재활용하기 때문에 소프트웨어의 품질 향상
- 단점
① 컴포넌트들이 이질적 기술 환경에서 개발 -> 통합을 염두에 두고 시스템 개발 관리
② 기존 컴포넌트가 시스템의 비즈니스 요구사항을 충족 못할 위험-> 충족도를 사전에 충분히 파악하고 보완
(5) Web 기반 응용 개발(WBD)
: 원격 서버에 저장되고 웹 브라우저를 통해 수행할 수 있는 응용 프로그램-> XML(eXtensible Markup Language) 사용
(6) 온라인 프로그래밍 설비(통합개발 환경)
1) 장점: 낮은 개발비용, 신속한 개발, 지원도구의 가용성 향상, 표준 및 구조적 기법 사용
2) 단점: 비인가 접근으로 무결성 감소 예) Overwritten(덮어쓰기) -> 접근통제 SW 사용 필요
(7) 기타 개념
1) 역공학(Reverse Engineering)
- 정의: 기존 제품을 해체하고 기능을 연구하여 새로운 제품 생산하는 데 활용하는 기술
- 방법
① 디컴파일러를 통해 목적코드나 실행코드로부터 소스코드 획득 : 호환성 제약문제 발생 가능성
② 블랙 박스 테스트(기능 분석을 통한 소스 코드 추정) 수행
2) 재공학(Re-engineering, BPR) : 기존 프로그램의 설계/개발 요소를 추출한 후 기존 시스템을 변경하는 체계적 기술(갭분석)
3) CASE(Computer Aided Software Engineering) 도구 : 산출물의 품질과 생산성 향상을 위한 소프트웨어 개발 자동화 도구
- 상: 다이어그램 작성, 요구사항 문서화
- 중: 프로토타입 제작, 사용자 인터페이스 개발
- 하: 코드 생성, DB 관리
-끝-
참고할 점!
- 요즘은 IS라고 안하고 IT라고 하는게 일반적임. CISA가 업데이트가 늦음. IS를 IT라고 생각하면 더 익숙하게 느껴져요!
- 블로그 내용 참고도 좋지만 직접 한번 더 정리하고, 문제 풀이하면서 요약집에 없는 내용을 적절한 domain, 챕터에 지속적으로 업데이트해서 꼼꼼히 읽기를 추천드립니다..! (그저 추천입니다...)
참고한 내용!
- 동료 PTW 회계사님이 친히 작성해주신 정리글 일부를 참고하였습니다~ (회계사님 CISA없어도 CISA이시고.. 이번에 CISA 취득하실거에요! 감사해요!)
- 동료 LYJ 선생님이 작성해주신 정리글도 일부 참고하였습니다~ 시간되시는 분 블로그 놀러가세요! (감사감사!)
Link : https://unvertige123.wordpress.com
- 아래 블로그도 참고하였습니다.
Link :https://33cram.tistory.com/category/CISA/1.%20IS%20%EA%B0%90%EC%82%AC%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4
댓글