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 성능의 수용 불가한 수 준으로 낮아짐에 대한 방지로 나눌 수 있다.