ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 소프트웨어 공학의 발전적 추세 Evolution of Software Engineering
    프로그래밍/컴퓨터 공학 2017. 11. 27. 16:11
    반응형

    # 소프트웨어 재사용의 개요

    - 이미 개발되어 있는 인정받은 소프트웨어의 전체 혹은 일부분을 다른 소프트웨어 개발이나 유지에 사용하는 것

    - 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법으로 기존에 개발된 소프트웨어와 경험, 지식등을 새로운 소프트웨어에 적용함

    - 클래스, 객체 등의 소프트웨어 요소는 소프트웨어 재사용성을 크게 향상시켰음

    - 소프트웨어 부품(모듈)의 크기가 작고, 일반적일수록 재사용률이 높음


    # 재사용이 가능한 요소

    - 전체 프로그램

    - 프로세스 구조

    - 부분 코드

    - 시험계획

    - 응용 분야에 관한 지식

    - 설계에 관한 결정

    - 논리적인 데이터 모형

    - 시스템 구조에 관한 지식 등


    # 소프트웨어 재사용의 장점

    - 개발 시간과 비용을 단축

    - 소프트웨어 품질 향상

    - 소프트웨어 개발의 생산성 향상

    - 프로젝트 실패의 위험 감소

    - 시스템 구축 방법에 대한 지식 공유

    - 시스템 명세, 설계, 코드 등의 문서 공유



    # 소프트웨어 재사용의 단점

    - 어떤것을 재사용할 것인지 선정해야함

    - 시스템에 공통적으로 사용되는 요소들을 발견해야 함

    - 프로그램의 표준화 부족

    - 새로운 개발 방법론 도입 어려움

    - 재사용을 위한 관리 및 지원 부족

    - 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움

    - 프로그램 언어 종속적

    - 소프트웨어 요소의 내부와 함께 인터페이스 요구 사항의 이해가 필요

    - 라이브러리 안에 포함시킬 재사용 요소의 명확한 결정 기준이 없음


    # 재사용 방법

    - 합성 중심 (Composition-based) : 전자칩과 같은 소프트웨어 부품, 즉 블록을 만들어 끼워 맞추어 소프트웨어를 완성시키는 방법, 블록 구성방법이라고도 함

    - 생성 중심 (Generation-based) : 추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방법, 패턴 구성 방법이라고도 함


    # 소프트웨어 재공학 (Software Reengineering)

    - 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것

    - 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하는 문제를 염두에 두어 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시키려는 기술

    - 유지보수 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법

    - 기존 소프트웨어의 기능을 개조하고나 개선하므로 예방(Preventive) 유지보수 측면에서 소프트웨어 위기를 해결하는 방법이라고 할 수 있음

    - 자동화된 도구를 사용하여 소프트웨어를 분석하고 수정하는 과정을 포함함

    - 소프트웨어 수명이 연장되고, 소프트웨어 기술이 향상됨

    - 소프트웨어에서 발생할 수 있는 오류가 줄어들고 비용이 절감됨


    # 소프트웨어 재공학의 등장 배경

    - 기존의 소프트웨어가 노후되어 새로운 소프트웨어로 대치해야할 경우 현재 시스템보다 훨씬 좋은 시스템을 만들 수 있다는 보장이 없음

    - 현재 소프트웨어 품질이 더 좋은 소프트웨어로 교체된다고 해도 사용상의 문제점이 없다고 장담할 수 없음

    - 새로운 소프트웨어 개발에도 기존 시스템과의 호환성이 100%이루어질수도 없을뿐만 아니라 사용자의 교육에도 많은 영향을 줄 수 있음


    # 소프트웨어 재공학의 목적과 목표

    - 유지보수성 및 기술 향상

    - 유지보수의 생산성 향상

    - 소프트웨어 수명 연장

    - 소프트웨어 요소들을 추출하여 정보 저장소에 저장

    - 복잡한 시스템을 다루는 방법 구현 : 시스템이 복잡해질수록 시스템을 다루는 방법이 필요하여 이를 위해 자동화 도구 등을 사용할 수 있음

    - 다른 뷰의 생성 : 기존 시스템 개발에 대한 관점 외에 다른 방향의 관점을 생성함

    - 잃어버린 정보의 복구 및 제거 : 시스템이 계속적인 개발을 거치면서 잃어버린 정보를 복구하거나 필요없는 정보를 제거함

    - 부작용의 발견 : 의도되지 않았던 내용이 구현될 경우 이를 발견함

    - 고수준의 추상 : 추상화된 어려운 내용을 여러 형태로 추출하여 이해에 도움을 줌

    - 재사용 용이 : 재사용이 가능한 모듈을 추출하여 재사용이 용이하도록 함


    # 소프트웨어 재공학의 주요 활동

    - 분석(Anaysis) : 기존 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고 재공학 대상을 선정하는 것

    - 개조(Restruring), 재구성 : 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 표현 형태로 바꾸는것, 기존의 소프트웨어의 구조를 향상시키기 위하여 코드를 재구성하는 것으로 소프트웨어 기능과 외적인 동작은 바뀌지 않음

    - 이식(Migration) : 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할수 있도록 변환하는 작업


    # 역공학(Reverse Engineering)

    - 기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리과정을 설명하는 분석 및 설계정보를 재발견하거나 다시 만들어내는 작업

    - 정공학(일반적인 개발 단계)과는 반대 방향으로 기존 코드를 복구하는 방법

    - 대상 소프트웨어가 있어야하며 이로부터 작업이 시작됨

    - 기존 소프트웨어의 구성요소와 그 관계를 파악하여 설계도를 추출하거나 구현과는 독립적인 추상화된 표현을 만듬

    - 코드의 역공학 : 코드->흐름도->자료 구조도->자료 흐름도 순으로 재생함

    - 데이터 역공학 : 코드->자료 사전->개체 관계도 순으로 재생함

    - 역공학의 가장 간단하고 오래된 형태 : 재문서화(Redocumentation)


    # CASE : Computer Aided Software Engineering

    - 소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것

    - 소프트웨어 생명 주기의 전체 단계를 연결해 주고 자동화해 주는 통합된 도구를 제공하는 기술

    - 소프트웨어 개발 도구와 방법론이 결합된것으로 정형화된 구조 및 방법을 소프트웨어 개발에 적용하여 생산성 향상을 구현하는 공학 기법

    - 소프트웨어 개발의 모든 단계에 걸쳐 일관된 방법론을 제공하는 자동화 도구들을 지원하고 개발자들은 이 도구를 사용하여 소프트웨어 개발의 표준화를 지향하며 자동화의 이점을 얻을 수 있게 해줌


    # CASE 사용의 이점

    - 소프트웨어 개발 기간 단축, 개발 비용 절감

    - 자동화된 기법을 통해 소프트웨어 품질 향상

    - 소프트웨어의 유지보수를 간편하게 수행

    - 생산성 향상, 생산 운용활동을 효과적으로 관리, 통제

    - 품질과 일관성을 효과적으로 관리, 통제할수 있음

    - 품질과 일관석을 효과적으로 제어 가능

    - 소프트웨어 개발의 모든 단계에 걸친 표준을 확립

    - 소프트웨어 모듈의 재사용성이 향상

    - 소프트웨어 개발 기법을 실용화할 수 있고 문서화가 쉬워짐



    # 상위(Upper) CASE

    - 소프트웨어 생명 주기의 전반부에서 사용되는 것으로 문제를 기술(description)하고 계획하며 요구 분석과 설계 단계를 지원하는 CASE

    - 상위 CASE 도구(tool) : SREM, PSL/PSA, SERA, FOUNDATION 등


    # 하위(Lower) CASE

    - 소프트웨어 생명 주기의 후반부에서 사용되는 것으로 코드의 작성과 테스트 문서화하는 과정을 지원하는 CASE

    - 하위 CASE 도구(tool) : 구문 중심 편집기, 코드 생성기 등


    # 통합(Integrate) CASE

    - 소프트웨 생명주기에 포함되는 전체 과정을 지원하기 위한 CASE

    - 공통의 정보 저장장소와 통일된 사용자 인터페이스를 사용하여 도구들을 통합함

    - 통합 CASE 도구(tool) : IEF, POWERTOOLS, TAGS/IORL, TEAMWORK 등


    # 정보 저장소(Repository)

    - 소프트웨어를 개발하는 과정 동안에 모아진 정보를 보관하여 관리하는 곳

    - CASE 정보저장소, CASE데이터베이스, 요구 사항 사전 저장소라고도 함

    - 초기의 소프트웨어 개발 환경에서는 사람이 정보 저장소 역할을 하였지만 오늘날에는 데이터베이스가 정보 저장소 역할을 담당함

    - 도구들의 통합, 소프트웨어 시스템의 표준화, 소프트웨어 시스템 정보의 공유, 소프트웨어 재사용성의 기본이 됨


    # 정보 저장소 사용의 이점

    - 도구들과 생명 주기 활동, 사용자들 응용 소프트웨어 사이들의 통신과 소프트웨어 시스템의 정보 공유를 향상

    - 소프트웨어 시스템 구성 요소들과 시스템 정보가 정보 저장소에 의해 관리되므로 유지보수성이 향상

    - CASE도구들 간에 정보를 쉽게 교환하고 사용자가 쉽게 새로운 도구를 추가할 수 있도록 해줌

    - CASE 도구들을 통합하여 통합 CASE 도구 사용을 가능하게 함

    - 중복된 공통 정보를 통합하며 불필요한 정보를 제거함

    - 생명 주기 정보를 재사용할 수 있도록 함

    - 소프트웨어 시스템의 이식과 변환을 용이하게 함



    반응형

    댓글

Designed by Tistory.