본문 바로가기

소프트웨어공학

소프트웨어 공학 개념

소프트웨어 공학이란?


하드웨어의 발전으로 소프트웨어에 대한 사용자의 요구사항이 증가되었고, 사용자의 만족과 서비스 이용 중의 문제를 해결하기 위해서 마련된 공학적 사고를 의미합니다.


1. 소프트웨어 개발, 운용, 유지보수 및 파기에 대한 체계적인 접근 방법

2. 신뢰성이 있는 소프트웨어를 경제적인 비용으로 획득하기 위해 공학적 원리를 정립하고 활용

3. 소프트웨어 제품을 체계적으로 생산하고 유지보수와 관련된 기술과 경영에 대한 학문

4. 과학적 지식을 컴퓨터 프로그램 설계와 제작에 실제 응용하는 것

5. 이를 개발하고 운용, 유지보수 하는데 필요한 문서화 작성 과정

6. SW 제작부터 운영까지 생산성을 높이기 위해 기술적 , 인간적인 요소에 대한 방법론 제공

7. 경제적으로 가장 신뢰도 높은 SW 제품을 만드는 방법 및 절차 체계




핵심은 사용자 요구사항을 만족시키면서 최소한의 비용으로 최대한의 결과를 내는 것. 

그리고 그 과정을 문서화를 통해 관리하며 생산성을 높이는 것입니다.





소프트웨어 공학의 기본 원칙


- 소프트웨어 구축을 위한 기술적인 방법, 도구들 제공 : 자동 / 반자동의 자원 제공 (ex : Excel / Word)

- 방법들과 도구들을 이용하여 소프트웨어를 합리적으로 개발하고 접속시킨다.

- 현대적인 구축 기술을 지속적으로 적용한다.

- 최상의 품질을 유지하기 위해서 지속적으로 검증한다.

- 문서화는 필수이며 각 라인 , 파일 , 구간 설명을 명확히 한다. --> 비전공자가 봐도 이해할 정도로!

- 개발 비용은 최소화하고 성과를 최대화하여 생산성을 높인다.

- 컴퓨터 이용 효율과 워크스테이션(서버급 PC)에 관한 정보들을 체계적으로 데이터베이스화한다.




시스템 5개 요소 : 입력 , 출력 , 처리 , 피드백 , 제어





소프트웨어 특징


- 논리성 

- 개발성

- 비마모성

- 유연성

- 유형성

- 상품성

- 견고성

- 비정형성 




HW 고장률


- 초기 : 높음 (제작 오류)

- 중기 : 초기에서 중기로 넘어오는 시점 (--> 잠재적 오류 가능성) / 안정적 

- 말기 : 마모 



SW 고장률


- 초기 : 설계 오류 / 제작 오류 (--> 설계가 오류가 날 경우 개발 및 구현에서 큰 오류가 발생(스노우볼))

- 중기 : 고장률 증감현상 (--> 유지보수를 통해 오류를 업데이트해도 새로운 오류가 발생할 수 있음) + 잠재적 오류

- 말기 : 잠재적 오류와 유지보수를 통해 발생한 새로운 오류, 그리고 요구 분석의 실패로 오류가 발생 




소프트웨어 공학 불변의 진리 


1. 사용자 요구는 반드시 반영한다. 
: 진짜 말도 안되는 말 해도 그냥 다 구현해야함!! 
: 요구분석가가 진짜 대단한 사람!! (개발 관련된 내용을 통달해야 사용자와 의논하며 요구를 파악하여 설계를 가능하게 함



2. 적정한 개발 비용이 산정되어야 한다.

: 기하급수적 비용 산정은 안된다. 
: 사용자가 이해할 수 있는 범위에서 산정해야하며 개발자의 능력에 맞게 비용을 책정해야한다.



3. 잠재적 오류 
: 소프트웨어는 100% 오류가 있다. 단지 발견하지 못했을 뿐... 따라서  가능한 오류를 적게 내는 것이 품질 좋은 SW다.



4. 안정성 / 신뢰성 

: 프로그램 이용시 에러가 많아지면 사용자의 불안 심리를 조성할 것이고, 신뢰성이 떨어질 것이다. 
따라서 방문시 에러 발생을 적게하고 에러가 날 경우 올바른 대처를 통해 안전성과 신뢰도를 높여야한다.



5. 효율성
: 프로그램 구성할 때 실행시간 효율과 자원의 사용 효율을 높여야 한다.
같은 결과를 낼 지라도, 코드가 짧은 것이 좋고 사용자 input data가 적을수록 좋다.



6. 문서화 
: 유지 보수시에는 문서가 절대적으로 필요하다 
프로그램 / 개발 모든 과정을 문서화하며 코드간 설명도 필요하다. 
비개발자가 체크해도 이해할 정도로 작성해야하며, 그렇지 않다면 외계인 코드라고 말할 수 있다.



7. 사용의 용이성 / 객관성을 높이자
: 사용하기 편해야 한다 : (전문가는 전문가에 맞게, 초보자는 초보자에 맞게 인터페이스가 구현되어야 한다.)



8. 객관적으로 작성
: 누구나 쉽게 알아볼 수 있도록 객관적으로 개발하고 문서화해야한다. 
(독창적, 주관적 X)



* 외계인 코드 : 주관적으로 개발, 알아보기 힘든 문서 상태





소프트웨어의 위기


- 소프트웨어 규모가 커지면서 전체 개발 비용이 증대되었고 그에 따른 노력과 유지보수 비용도 증가하였다.

: 개발 비용 중 유지보수 비용에 비중을 많이 두어야한다.
이유는 사용자 요구사항은 계속해서 변화할 것이고 이에 대한 보수 비용이 높기 때문이다.


- 사용자와 개발자 간의 대화가 단절

- SW 성능 및 신뢰성이 부족

- 새로운 개발 도구의 품질을 평가할 수 있는 표준이 없다.

- 개발 인력의 부재 -> 인건비 증가 



정보 처리 방법


- 일괄 처리 : Batch Process (ex: 급여 계산 처리 프로그램, 통계 처리)

- 온라인 처리 : (ex : 통신회선을 통한 자료 처리 : 은행업무, 항공사 좌석 예약 관리 시스템)

- 실시간 처리 : 처리 결과를 사용자가 원하는 시간 내에 받아볼 수 있는 방식. 




위상에 따른 분류


- 응용 소프트웨어 : 사용자의 사용 목적에 따라 개발된 소프트웨어로 누구나 쉽게 사용할 수 있도록 개발된 소프트웨어

- 시스템 소프트웨어  
: 응용프로그램 지원 목적으로 사용자보다는 하드웨어 측면이 강한 소프트웨어 
운영체제, 유틸리티를 예로 들 수 있고, 규모면이나 복잡도가 커서 개발하기 어렵다는 단점이 있다.



기능에 따른 분류 


- 계산 중심 기능

- 정보 처리 중심

- 절차 중심

- 인공 지능 







다음 포스팅에서는 개발 목적에 따른 분류와 그 방법들 그리고 생명주기에 대해서 알아보겠습니다. 

감사합니다.

반응형

'소프트웨어공학' 카테고리의 다른 글

개발 목적에 따른 분류 & SDLC  (0) 2018.12.12