2010년 12월 29일

소프트웨어 공학이란 ?

소프트웨어 공학이란 ?
소프트웨어 공학이란 소프트웨어의 품질과 생산성을 향상시키기 위하여 사용자의 요구사항을 체계적으로 분석하여 설계 및 구현, 구현된 시스템의 시험 그리고 유지보수 및 폐기 시까지 소프트웨어 전수명주기 간에 걸쳐 이루어지는 체계적인 접근법을 말한다.

[Sommerville, in “Software Engineering”]
소프트웨어 엔지니어링은 신뢰성 있고 실제 머신에서도 효율적으로 작동하는 소프트웨어를 얻기 위해 올바른 엔지니어링 원칙을 확립하고 사용하는 것이다




[A Report on a Conference Sponsored by the NATO Science Committee. NATO 1969]
“The application of a systematic, disciplined, quantifiable approach to development, operation, and maintenance of software; that is, the application of engineering to software.
(소프트웨어의 개발, 운영 및 유지보수에 체계적이고, 훈련이 잘 된 정량적인 접근 방법을 적용하는 것으로,소프트웨어 개발및 관리를 공학적으로 접근하는 것을 말한다)”
[Definition by IEEE Computer Societ]


 즉, 소프트웨어 공학이라는 것은 소프트웨어의 개발, 운영 및 유지 보수에 체계적이고, 훈련이 잘되고 정량적인 접근 방법을 적용하는 것을 의미하며, 이는 곧 소프트웨어에 공학적으로 접근하는 것을 말한다. 1968년10월 7일 ~ 11일 간 열린NATO 소프트웨어 엔지니어링 컨퍼런스에서 소프트웨어 위기(Software Crisis)라는 용어가 처음 언급된 이후 소프트웨어 개발에 공학적인 접근 방법의 필요성이 제기되면서 소프트웨어공학이라는 용어가 처음 소개되었으며 이후로 약간씩의 수정이 가해졌지만 소프트웨어공학의 정의는 대체로 유사한 내용을 담고 있다.

 이러한 역사적 배경때문에 소프트웨어 공학의 출발은 상업용 어플리케이션이 아닌 국방 또는 정부 시스템을 개발하기 위한 요구사항들을 충족시키기 위하여 발전되었다. 실재로 소프트웨어 개발에서 체계적이고, 훈련되고, 정량화를 통한 측정 가능한 접근방식은 안정성이 최우선 가치가 되는 시스템 개발에서 아주 효과적인 것으로 증명되었다. (그러나 상업용 어플리케이션은 안정성이 최우선 되는 시스템과는 다르다.)

 소프트웨어공학 관련 기술 및 지식은 다양한 분류가 가능하겠지만 2004년 IEEE 컴퓨터 학회는 소프트웨어공학 전체를 10개의 기술 분야로 분류하고 각 기술별로 필요한 상세 지식을 정의한 Guide to SoftWare Engineering Body Of Knowledge (SWEBOK 2004) 를 내놓았다. (소프트웨어 공학자가 알아야할 지식의 범위에 대한 표준 ISO/IEC 24773) 


  1. 소프트웨어 요구 사항
  2. 소프트웨어 설계
  3. 소프트웨어 구현
  4. 소프트웨어 시험
  5. 소프트웨어 유지 보수
  6. 소프트웨어 형상 관리
  7. 소프트웨어 공학 관리
  8. 소프트웨어 공학 프로세스
  9. 소프트웨어 공학 도구 및 방법
  10. 소프트웨어 품질


 소프트웨어 공학은 진실 또는 거짓의 개념이 아닌 유용한가/유용하지 않는가 의 개념이다. 유용한가의 여부는 해보지 않고서는 알수 없다. 무턱대로 비판없이 사용하는 것은 브룩스가 이야기한 은빛 총알과 다르지않다.


참고서적 및 자료
Steve McConnell, Code Complete 2
Steve McConnell, Professional software development
Guide to SoftWare Engineering Body Of Knowledge (SWEBOK 2004)

댓글 없음:

댓글 쓰기