본문 바로가기

정보처리기사/4. 소프트웨어공학

2. 소프트웨어의 기본 이론

01 소프트웨어의 특징

* 논리성 : 보이지 않는 것의 표현이다.

* 개발성 : 제조되거나, 생산되지 않고 논리적으로 짜여진다.

* 비마모성 : 소프트웨어는 논리적이므로 사용에 의해 마모되거나 소멸되지 않는다.

* 유연성 : 요구나 환경의 변화에 따라 적절히 변형시킬 수 있다.

* 유형성 : 유형의 매체에 저장되지만 개념적이고 무형적이다.

* 상품성 : 소프트웨어는 개발되어 판매된다.

* 견고성 : 일부 수정은 소프트웨어 전체에 영향을 줄 수 있다.

* 비정형적 : 수학이나 물리학에서 볼 수 있는 규칙적이고 정형적인 구조가 없다.


02 소프트웨어의 고장률 곡선

- 잠재적 오류

오류는 있지만 발견되지 않은 오류, 소프트웨어의 사용이 오래되면 나타나게 된다.


게임 상에서 일어나는 버그도 이에 해당할 수 있다. 바람의나라에서 죽은 유저분의 시체를 먹기 위해 잠수를 타는 현상이 생기게 된다.

나는 시체를 먹힐 일도 먹을 일도 없었다... 피해자도 아니고 피해자일뻔한 적도 있었다. 일정시간이 지나면 시체를 먹게 하는 바람의나라의 시스템이 있었다. 그시스템이 버그이고 이것이 바람 유저분들의 사회적인 문제로 이슈화 된적이 있었다... 그래서 죽어도 떨구지 않고 저렴한 주홍투구 같은 아이템들이 등장하게 된 것도 이 시점이다.

고장률 곡선이 있는데 기사책을 직접 봐주기 바란다. 텍스트라서 지겨울 수 있으나, 본인의 체력상 어떻게 할 수가 없다. 그림실력도 뛰어나지 않고...


03 품질 좋은 소프트웨어의 구비 조건(특성)

1) 사용자 요구가 정확히 반영되어야 한다.

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

3) 잠재적 오류가 최소화되어야 한다.

4) 안정성이 있어야 한다.

5) 효율성이 있어야 한다.

6) 문서화가 되어있어야한다.

☒ 문서화의 목적

* 개발된 프로젝트 관리를 효율적으로 할 수 있다.

* 개발 후에 유지보수가 용이하다.

* 개발 중에 추가 변경에 따른 혼란을 방지할 수 있다.

* 여러 개발자에 의한 병행 개발을 가능하게 한다.

* 소프트웨어 개발 방법과 순서를 표준화할 수 있어 효율적인 작업을 기대할 수 있다.

* 신입 프로그래머에 대한 교육에 사용한다.

* 프로그램을 쉽게 확장할 수 있다.

실제 실무에서 문서화 작업을 할지 모르겠지만, 프로젝트 기한내에 개발해야하는 시간도 짧고 짧다는 개념이 3개월일수도 있고, 괜찮은 프로젝트는 6개월 1년 그렇게 진행될 수 있다. 웹, 안드로이드 앱 쪽만 보자면 그렇고

게임 개발도 런칭하기 까지 소형 개발사에 경우 야근 밤샘근무해야 되고 기한이 짧다는 것이다.

유저들은 더 재밌는 게임을 하기 원하며 개발자들은 정신력과 노동력을 착취당하며 어플리케이션들을 만드러주는데, 사용자 여러분들은 통장 정리 하시면서 이 좋은 시스템을 만든 개발자에게 감사하는 생각 조차 가지지 않는게 너무 그렇다. 그리고 기한안에 못마무리하면 짤릴 가능성도 크다.

개발자들의 노고를 알아주었으면 좋겠다.

7) 사용이 용이해야 한다.

예시 ) API, 유니티 스크립팅 레퍼런스

8) 객관성 있게 작성되어야 한다.


04 소프트웨어의 위기


불확실성, 손실


05 소프트웨어의 분류


1) 정보처리에 따른 분류


* 일괄 처리(Batch Process) : 처리할 자료를 일정 기간 모아 두었다가 한 번에 처리하여 정보를 얻는 방법으로 급여 계산 처리 프로그램, 통계처리 등이 있다.

* 온라인 처리(On-line Process) :단말기와 원격지에 설치된 컴퓨터가 통신 회선을 통하여 자료를 처리하는 방식으로 은행 업무, 항공사의 좌석 예약 관리 시스템, 백화점의 거래 처리 시스템 등이 있다.

스프링3.0 프레임워크에서는 비행기의 좌석 예약관리 시스템에 많이 쓰이는데 2011년 기준, 아니 과거에도 트랙잭션이라는 것을 만들어져서 트랜잭션이 있음으로써 비행기를 예약했다 취소해도 DB에서 처리되지 않고 잠시 남아있는 현상도 보인다. 중복이 자주 발생해,..

* 실시간 처리(Real-time Process) : 처리 결과를 사용자가 원하는 시간 내에 받아 볼 수 있는 방식이다. 전화국의 전화 교환 시스템, 공장 자동 제어 시스템, 은행의 안전 감시 시스템, 항공 관제 시스템, 가정의 자동화 시스템 등 센서에 의해 아날로그(Analog) 신호를 받아들이는 시스템들은 대부분 실시간 처리 방식이다.


2) 위상에 따른 분류

* 응용 소프트웨어(Application Software) : 사용자의 사용 목적에 따라 개발된 소프트웨어로 누구나 쉽게 사용할 수 있도록 개발된 소프트웨어를 말하며 업무 관리, 급여 계산, 회원 관리 등이 속한다.

응용 프로그래머 직군과 연계된다고 할 수 도 있겠다. 응용 프로그래머는 자바 프로그래머를 말하며 파견 그 쪽으로 연결되는 경우가 많다.

* 시스템 소프트웨어(System Software) : 응용 프로그램을 지원하기 위해서 개발된 소프트웨어로 사용자보다는 하드웨어 측면이 강한 소프트웨어이다. 운영체제(Windows OS, 유닉스, 리눅스), 유틸리티(Norton Utility, 각종 드라이버)를 예를 들 수 있으며 규모 면이나 복잡도가 매우 커서 개발하기가 어렵다. 잘못된 표현 : 하드웨어 프로그래머

3) 기능에 따른 분류

* 계산 중심 기능 : 소프트웨어 기능이 수학적으로나 통계적 처리 기능을 중심으로 개발된 소프트웨어로 Lotus, 엑셀, SPSS 등이 이에 속한다.

* 정보처리 중심 : 데이터의 가공을 통하여 원하는 정보를 얻기 위하여 개발된 소프트웨어로 회사의 업무용 소프트웨어, 워드프로세서, dBASE 등이 이에 속한다.

* 절차중심 : 일괄처리, 실시간 처리처럼 자료의 가공보다는 사용자의 문제 영역이 제한된 시간 내에 어떻게 처리될 수 있는가에 중심을 두고 개발된 소프트웨어를 말한다.

* 인공 지능 : 비수치적 알고리즘을 이용하여 계산이나 분석이 용이하지 않는 지문 인식 시스템, 로봇용 소프트웨어 등으로 아직은 연구 대상이 되고 있는 소프트웨어를 말한다.


4) 개발 목적에 따른 분류

* 프로토 타입(Prototype) : 개발된 소프트웨어의 일부를 미리 제작하여 사용자의 요구를 정확히 받아들일 수 있도록 한 것으로 보통 시제품 소프트웨어라고 한다.

* 프로젝트(Project) : 주문형 소프트웨어로 단일의 사용자를 대상으로 개발된 것이며 업무용, 급여 관리, 직원 관리 프로그램 등이 이에 속한다.

* 프로덕트(Product) : 상품형 소프트웨어로 다수의 사용자들 대상으로 개발된 것이며 엑셀, 워드프로세서 등이 이에 속한다.

'정보처리기사 > 4. 소프트웨어공학' 카테고리의 다른 글

3. 소프트웨어 생명주기  (0) 2014.03.26
1. 소프트웨어 공학개념  (0) 2014.03.16