소프트웨어란 컴퓨터 프로그램과 관련 데이터의 묶음으로서, 여기서 프로그램은 데이터를 입력받아 처리함으로써 원하는 출력을 제공하기 위해 사용되는 명령어들의 집합이다.
급격한 컴퓨터 하드웨어 기술의 발전으로 인해 사용자의 요구사항이 다양해지면서 해결해야할 문제는 복잡해졌으나, 상대적으로 소프트웨어 기술의 진보가 더딤을 일컫는 말
고품질 소프트웨어의 경제적이고 빠른 생산과 유지보수를 위한 전문 작업과 연구 분야
소프트웨어 개발이 단순한 코드의 생성이 아님을 인식하고 문서화와 프로젝트 관리의 중요성이 인식되었는데, 이러한 것들이 코드의 신뢰성, 유지보수성 및 비용에 큰 영향을 줄 수 있기 때문이다.
소프트웨어의 특성을 좌우하는 여러 품질 기준이 존재한다. 사용성(usability)이나 신뢰도(reliability)와 같이 사용자가 인지할 수 있는 것을 외부 품질이라고 한다. 내부 품질의 향상은 개발자가 외부 품질을 개선하는데 도움을 줄 수 있다.
프로세스란 주어진 목적을 달성하기 위해 수행되어야 하는 활동들의 순서 또는 절차
폭포수 모델의 기본형은 각 단계에서 수행되는 활동들이 서로 겹치지 않고, 단계들이 병행 수행되거나 거슬러 반복됨 없이 한 방향으로 진행된다. 따라서 각 단계가 끝날 때마다 결과를 확인한 후에 다음 단계로 진행해야 한다.
먼저 정확하고 분명한 요구사항과 시스템 범위를 정하는 데 노력을 투자하고 반복 작업을 통해 이러한 내용을 진화시켜가면서 주어진 환경에 적합한 시스템을 개발
점증적 모델에서 소프트웨어는 여러 개의 모듈들로 분해되고 각각은 점증적으로 개발되어 인도된다. 이 모델은 선형 순차 모델을 여러번 적용하여 그 결과들을 조합하는 것이다.
반복 진화형 모델을 확장한 형태전체 생명주기에 걸쳐 프로토타이핑과 위험 분석을 계획적으로 사용 → 프로젝트 수행 시 발생하는 위험을 관리하고 최소화하려는 목적을 가짐중심의 바깥으로 갈수록 총비용은 증가한다.
폭포수 모델의 확장된 형태. 분석이나 설계 등의 생명주기 단계들과 그것에 상응하는 테스트 단계들이 어떻게 관련 되어 있는지 보여 주며, 테스트 작업을 중요시하는 모델로 적정 수준의 품질 보증을 지원한다.
애자일(agile) 방법은 품질의 저하 없이 변화를 수용하고, 협업을 강조하며, 제품의 빠른 인도를 강조하는 반복적 방법이다. 진정한 개발 산출문은 코드임을 강조한다.