2016년 4월 25일 월요일

SW공학이 필요한 근본적인 현상


프로젝트 성공에 대한 고민 SW프로젝트가 항상 요구하는 것은 비용의 증가 없이 적시에 끝나 것이다. 하지만 현실에선 부분을 달성하기 어렵다는 것을 통계나 상황을 통해 인지할 . 프로젝트가 실패하는 것은 드문 일이 아니기 때문에 예산과 일정이 충족된 경우에도 품질에 궁금증은 남는다. 프로젝트의 성공은 세가지 구성요소(비용, 납기, 품질) 평가해야 한다. 그렇 않다면 프로젝트는 실패할 수도 있다.
프로젝트의 실패이유는 여러 가지가 있지만 원인은 무한할 수도 있다. 80/20법칙(파레토법칙) 적용할 경우 실패의 가장 일반적인 이유는 아래의 표에서 찾을 있다.



프로젝트 관리자는 여러 자원과 관점에서 활동들을 모니터링 해야 하고 구성원들도 프로젝트의 성공을 위해 여러 가지 활동들을 추진해야만 한다. 하지만 그들만의 방식으로 또는 경험으로만 로젝트를 진행시킨다면 프로젝트의 성공을 보장할 없게 된다. 웹개발 저널지인 'codediesel' 따르면 SW프로젝트가 실패하는 10가지 이유는 1 불완전한 요구사항 2 불명확한 커뮤니케이션 3 자원부족 4 비현실적인 목표 5 요구사항의 변화 6 잘못된 계획 7 엉성한 개발사례 8 형편 없는 보고 9 미숙한 기술의 사용 10 출시 압력이라고 한다. 이러한 상황들을 해결할 있는 것이 바로 SW공학이다. 물론 기업정책상의 개선 또는 엔지니어의 능력 향상이 표면위로 부상할 있지 프로젝트의 성공적 추진을 위한 전제가 바로 SW공학이다.

유지보수와 역공학 (2)


유지보수는 제한된 이해와 테스팅, 영향분석, 유지보수성 기술적 이슈와 조직 목표로의 정렬, 유지보수자 형성, 프로세스, 조직적 측면, 외주 관리적 이슈, 유지보수 비용추정 이슈, SW유지 보수 측정에 대한 이슈가 존재한다.



유지보수를 해결하기 위한 기법은 프로그램의 이해(Program Comprehension), 재공학 (Re-engineering), 역공학(Reverse Engineering) 있다. 프로그래머는 변경 사항을 구현하기 위해 프로그램 읽기 이해에 적지 않은 시간을 보내는데, 코드 브라우저(browsers) 프로그램 이해를 위한 핵심 도구다. 명료하고 간결한 문서 역시 프로그램 이해에 많은 도움이 된다.
재공학은 SW 새형태(form) 재구성하기 위한 SW 시험(examination) 변경(alteration) 으로 정의되며, 뒤로 이어지는 형태의 구현 역시 포함하고 있다. 재공학은 가장 급진적(그리고 비싼) 변경이지만, 소규모 변경에도 수행되기도. 재공학은 유지보수성 향상이 아니라 노후된 (legacy) SW 교체하기 위해 종종 사용되기도 한다.
역공학은 SW 컴포넌트와 이들간 상호관계 식별 다른 형태 또는 높은 추상 수준에 대한 표현물에 대한 생산을 위한 SW 분석 공정이다. 역공학은 수동적 속성을 지녀, SW 변경하거나 새로운 SW 만드는 활동이 아니다. 역공학은 제품 소스코드의 호출 그래프와 제어 흐름도의 생산 초점이 맞춰져 있다.
역공학의 종류로는 재문서화(redocumentation) 설계 복구가 있으며, 리팩토링(refactoring) SW 행동 변경을 배재한 상태에서 프로그램에 대한 재조직화를 통한 변형(transformation)으로, 프로그램 구조 향상을 위한 역공학의 형태다. 데이터 역공학은 최근 년간 주목을 받아왔는데, 이는 물리 데이터베이스에서 논리 스키마를 복구하는 활동을 의미한다.


유지보수와 역공학 (1)


SW생명주기의 유지보수 단계는 보증기간 또는 인수의 구현 단계를 따라 시작되지만 유지보수 활동은 일찍 시작된다. 유지보수는 SW생명주기의 주요활동임에도 불구하고 대부분의 조직에 타활동에 비해 중요시 되었지만 이제는 SW개발에 투자하기 보다는 기운용되는 SW 최대한 유지하려는 기조에 맞춰 주목받고 있는 상황이다. 과거 Y2K 문제는 SW유지보수에 관심을 갖게 하였고 오픈소스 패러다임은 타인에 의해 개발된 산출물에 대한 유지보수의 필요성을 더욱 부각시켰다.11)
유지보수는 사용자 요구사항을 지속적으로 만족시키기 위해 필요하며, 시스템은 수정적 (corrective) 수정적 SW 행동으로 인해 변경된다. 유지보수의 목적은 결함 교정(correct), 설계 향상, 구현 향상, 시스템과의 연동(interface), HW, SW, 시스템의 기능사용을 위한 프로그램 적용, 기존(legacy) SW 이전(migrate), SW 폐기 등이 있다.




유지보수자의 활동은 개의 주요 활동으로 요약될 있는데 SW 일일 기능에 대한 제어 유지보 , SW 수정에 대한 제어 유지보수, 기존 기능의 완전화(perfecting), SW 성능의 수용 불가한 준으로 낮아짐에 대한 방지로 나눌 있다.