• 소프트웨어 규모의 대형화 및 복잡화에 따른 개발 비용 증대
• 하드웨어 기술의 급진전으로 인한 소프트웨어 개발 기술의 상대적 부진
• 하드웨어 비용 대비 소프트웨어 가격 상승 폭 증가
• 소프트웨어 유지보수의 어려움과 개발 정체 현상 발생
• 소프트웨어 개발 프로젝트 기간 및 소요 예산에 대한 정확한 예측의 어려움
• 신기술에 대한 교육 및 훈련의 부족
• 사용자의 소프트웨어에 대한 기대치 증가
• 소프트웨어에 대한 사죵자 요구사항의 빈번한 변경 및 반영
1) 예산초과
2) 일정 지연
3) 낮은 품질의 소프트웨어 개발
4) 비효율적인 소프트웨어 개발
5) 사용자 요구사항 불만족, 산출물 관리의 어려움
• 의사소통의 문제
•시스템의 순차 특성
2차원 평면에 프로그램 실행 명렁어 -> 동작은 3차원 공간
--> 프로그래머들은 3차원적 오류를 2차원 평면에서 정리해야됌
•개발에 의한 결과물
•프로젝트의 복잡한 특성
1) 프로젝트마다 개발기간이 다르다
2) 동일한 기능의 SW도 어떤 기술을 적용하느냐의 따라 개발 과정이 달라짐
3) 프로젝트 인원 수에 따라 운영방식이 달라져야 함
4) 목적에 따라 프로젝트 관리 방식이 달라져야 함
•개발자의 특성
•다양한 관리 이슈
대부분 팀 활동 , 품질 좋은 SW 를 개발해야하는 공통의 '목표' 와 '정렬' 되어야 함
분석 및 설계 : 30% , 코드 개발 : 20% , 테스트 : 40 %
➡️ 분석 및 설계 과정이 코드 개발보다 더 중요하고 비중 있게 수행되어야 함을 의미
개발 비용: 33% , 운영 유지 비율 : 67%
➡️ SW 수정 및 개선 > 개발
기능의 잘못된 이해:15%, 문서화 및 기타 오류 : 35%, 코드 작성의 오류: 30% , 로직 설계의 오류: 20%
•4차 산업혁명의 특징
초연결 : 사람, 사물 등 객체 간의 상호 연결성이 확장됨
➡️ 실시간 데이터 공유가 양•질 적으로 크게 확대
초융합 : 초연결 환경의 조성으로 이종 기술•산업 간의 결합이 촉진되어 새로운 융합 산업 출현을 의미함
초지능 : 서비스 활동의 질적인 향상,즉 최적 의사결정을 통해 문제 해결등의 영역에서 더 나은 서비스를 제공하는
지적 영량을 의미한다
•구조적 프로그래밍
➡️C,포트란,코볼 과같은 언어, 프로그램을 좀 더 이해하기 쉽고 논리를 체계적으로 표현 할 수 있는 공학적 접근 방법
•객제치향 프로그래밍
➡️클래스 개념을 기반으로 캡슐화 및 정보 은닉,상속,다형성 등의 개념 제공, SW를 직관적으로 이해하고 유지보수 및 재사용을 쉽게 할 수 있도록 지원
•소프트웨어 컴포넌트 및 재사용
➡️기존 코드 묶음을 컴포넌트로 명세, 컴포넌트를 재사용하면 개발 시간 단축, 컴포넌트를 조립하여 대규모 SW 개발 가능
•통합 개발 환경
➡️ 소스 코드 작성, 컴파일 및 디버깅, 크로스 컴파일, 배포 등 개발 작업을 하나의 프로그램 안에서 처리하도록 지원
•소프트웨어 프로토 타이핑
➡️최종 SW를 완료 되기전까지 눈에 보이지 않은 SW를 사전에 보여줌으로써, 사용자의 요구사항을 반영하고 확정하기 위함
•소프트웨어 개발 프로세스
➡️ 전통적 개발 절차 ( 폭포수 모델 ) : 요구사항 -> 분석 -> 설계 -> 코딩 -> 테스트 ->배포
현재는 점진적 , 프로토타입, 나선형 , V모델, 애자일 , DevOps 등 새로운 방식이 나타남
•소프트웨어 검사 및 검증
요구사항에 잘못 된 이해,설계 과정의 부적절성, 코딩 오류등으로 인해 검사 및 검증 활동의 강조
➡️대표적인 기법인 'SW 테스트' --> 소프트웨어가 정확하게 동작하는지, 잠재된 결함을 최대한 찾아내어 고장 발생 가능성을 줄여줌
•소프트웨어 형상 관리
변경 발생은 불가피 , '어떻게 처리하고 관리 할 것인가?' 가 관건 --> 변경이 발생한 것을 기록 및 관리(형상관리)
➡️체계적으로 추적하고 통제하는 활동, 개발 결과물에 대한 버전 관리 뿐만아니라, 형상 항목이라는 형태로 작업 산출물을 정의 및 항목 간의 변경 사항 추적과 통제 정핵을 수립하여 관리하는 활동
•소프트웨어 아키텍처
복잡한하고 대형화 된 SW 는 개발기간이 김, 수명도 길어짐, 점점 로직이 복잡해짐
➡️설계 구조에서 변화를 체계적으로 쉽게 반영할 수 있도록 하게 함
•엄격성과 정형성
➡️지나친 자유스러움을 제안하기 위한 보완적 수단
•관심사의 분할
➡️개발 시 처리 로직과 데이터 관리를 별도로 고려하는 것
•모듈화
➡️독립적인 기능을 수행하는, 작은 단위의 구별되는 프로그램 조각 , 모듈화를 적용함으로써, SW를 쉽게 분리 ,조립 가능 --> SW 에대한 이해도가 높아짐
•추상화
➡️세부적인 사항들을 감추고 대상물의 특징으로 사물을 대표하는 것
•변경의 예측
➡️개발 과정에서의 변경을 잘 예측해 잘 대응하는 것 (ex: 모듈화 구조를 통한 분리)
•일반화
➡️다양한 플랫폼에서 SW가 동작 할 수 있도록 하는 것
•점진성
➡️단계적, 순차적으로 개발
•명세화
➡️개발과정에서 생성되는 정보를 쳬계적으로 기술하는 것(ex:유지보수 활동)