프로그램 아키텍쳐/소프트웨어공학

소프트웨어 프로젝트 관리

본클라쓰 2011. 12. 21. 19:10

프로젝트 관리는 프로젝트를 성공적으로 이끄는 데 필수적인 계획, 조직화, 인력 확보, 지휘, 통제를 하기 위한 절차, 기술, 노하우 등을 말한다.

 

프로젝트 관리의 필요성은 소프트웨어 프로젝트가 어렵기 때문이다.

 

소프트웨어 프로젝트가 어려운 이유는 소프트웨어의 비가시성으로 인해 진행 과정을 확인하기 어렵고, 소프트웨어 프로세스의 역사가 짧아 표준화가 된 소프트웨어 프로세스가 없어서 어느 특정 소프트웨어 프로세스가 개발상 문제를 일으키게 될지 예측할 수 없다. 또한 대규모 프로젝트는 이전에 개발된 프로젝트와 달라서 과거의 경험이 크게 도움이 되지 않는 경우가 많다.

 

소프트웨어 프로젝트의 효과적인 관리를 위해서는 프로젝트를 얼마나 치밀하게 계획하느냐에 달려 있다. 프로젝트 관리자는 발생 가능한 문제를 전부 예상하고 그에 따른 해결책도 준비해야 한다.

 

이 때 세울수 있는 계획은 품질 계획(quality plan), 검증 계획(validation plan), 구성 관리 계획(configuration management plan), 유지 보수 계획(maintenance plan), 인력 개발 계획(staff development plan)을 둘 수 있다.

 

생산되는 소프트웨어는 품질을 관리해야 하는데 품질 관리(quality control)은 각각의 작업 결과(work product)가 요구사항에 부합하는지를 확인하기 위해 개발 주기 전체에 걸쳐 시행되는 검열(inspection), 검토(review), 테스트(test) 등을 말한다.

 

품질은 소프트웨어를 대하는 입장에 따라 관점이 달라진다.

 

발주자는 최소 비용, 생산성, 융통성이, 사용자는 기능의 정확성, 이해 용이성, 사용 용이성, 일관된 통합이, 유지 보수자는 이식성, 재사용성, 유지보수성, 상호 운용성 등이 품질의 기준이 됩니다. 여기에 효율성과 신뢰성이 공통된 품질의 요소이다.

 

품질을 측정하는 요소는 기능적으로 맞게 동작하는가? 표준에 적합한가? 요구 분석서의 기능과 일치하는 점검하는 정확성(correctness), 소프트웨어가 주어진 기간 동안 바르게 작동할 확률로 오류 발생 확률에 반비례하는 신뢰성(reliability), 요구 명세에 표시하지 않은 상황(입력 오류)에서도 제대로 작동하는 강인성(robustness), 수행 속도, 데이터/트랜잭션 처리량, 알고리즘의 시간 복잡도 등의 성능(performance), 시스템을 친근하게 느낄 수 있는 성질로 사용 대상에 따라 달라지지만 보통 사용자 인터페이스 같은 사용 용의성(usability), 보수성은 정해진 기간에 소프트웨어 결함을 해결할 수 있는 성질과 진화성은 잠재적 발전 가능성으로 추가 요구 사항에 따라 기능이 진화할 수 있는 유지보수성(maintainability), 다시 사용할 수 있는 재사용성(reusability) 등을 들 수 있다.

 

현재 품질의 관리 기준은 과거 소프트웨어 자체의 품질에서 프로세스 품질(소프트웨어를 개발하는 과정의 품질)로 이동하고 있다.

 

프로세스 품질은 개발하는 과정이 소프트웨어 품질에 많은 영향을 준다는 주장에서 출발한다. 프로세스 품질의 주요 관점은 어떻게 하면 개발 과정에 오류를 조기에 발견할 수 있는가? 어떻게 하면 오류에 대한 내성이 있는 시스템, 즉 오류가 소프트웨어를 정지시키는 확률이 적은 시스템으로 만들 수 있는가? 등이 있다.

 

이와 함께 소프트웨어 생산성(productivity)를 올려야 한다. 소프트웨어 생산성에 영향을 미치는 요소는 프로그래머의 능력, 팀 의사 전달 능력, 제품의 복잡도, 기술 수준, 관리 기술이 영향을 미친다.