<p7~p10 요약>

1.1.1 소프트웨어 공학

핵심구절

1. 공학 분야 : 엔지니어는 이론, 방법론, 도구들을 적절하게 적용한다. 그러나 그것을 선택적으로 사용하며 적절한 이론이나 방법이 없을 때에도 문제의 해법을 찾으려 노력한다. 엔지니어는 또한 조직적, 재정적인 재약에 맞추며 이러한 제약 안에서 해법을 찾는다.

2. 모든 형태의 소프트웨어 생산물 : 소프트웨어 엔지니어는 소프트웨어 개발의 기술적 프로세스만이 아니라 프로젝트 매니지먼트, 소프트웨어 생산을 지원하는 도구의 개발과 방법론, 이론을 포함하여 다룬다.

소프트웨어 공학은 두가지 이유에서 중요하다.

1. 개인과 사회는 갈수록 더 발전된 소프트웨어 시스템에 의존하고 있어, 경제적이고 빠르게 신뢰성있는 소프트웨어를 개발할 필요가 있다.

2. 많은 경우 그저 개발하는 것보다 소프트웨어 공학적 방법론을 적용하는 것이 긴 안목으로 봤을때 더 싸다. 대부분의 시스템에서 사용중인 시스템을 개비할 때 대부분의 비용이 발생한다.

소프트웨어 프로세스의 4단계.

1. 소프트웨어 사양서(specification) : 소비자와 엔지니어가 제공될 부분과 제약을 정의하는 단계

2. 소프트웨어 개발(development) : 디자인과 프로그램을 하는 단계

3. 소프트웨어 확인(validation) : 사용자의 필요가 충족되는지 체크하는 단계

4. 소프트웨어 발전(evolution) : 시장과 사용자의 요구의 변화를 반영해 소프트웨어를 수정하는 단계

소프트웨어 공학은 전산학과 시스템 공학과 연계되어 있다.

1. 전산학은 컴퓨터나 소프트웨어 시스템의 기반 지식을 다룬다. 물리학이 전자공학자에게 필수적이듯이 어떤 지식은 소프트웨어 공학자에게도 필수적이다. 그러나 작은 프로그램에 좀 더 잘 적용되며 크고 복잡한 문제들에도 항상 적용할 수는 없다.

2. 시스템 공학은 소프트웨어가 큰 역할을 하는 복잡한 시스템의 발전과 개발의 모든 부면을 다룬다. 시스템 공학자는 소프트웨어 공학만큼 하드웨어 개발, 정책 및 절차 디자인, 시스템 배치 역시 염두에 둔다.

소프트웨어 공학에 도전하는, 공통된 3가지 일반적인 이슈들.

1. 혼재성(Heterogeneity) : 시스템들은 갈수록 서로 다른 타입의 모바일 장비나 컴퓨터를 포함한 네트워크에 걸쳐 분산된 시스템으로 운용될 필요가 있다. 이러한 혼재성에 대응에 충분한 융통성을 가진 신뢰성있는 소프트웨어를 개발할 기술이 필요하다.

2. 업무와 사회 변화 : 업무와 사회의 변화는 사용중인 소프트웨어의 개비와 새로운 소프트웨어의 개발을 필요로 하지만, 많은 전통적 소프트웨어 공학적 기법들은 시간을 소모하고 새로운 시스템의 공급은 계획보다 오래걸린다. 시간을 단축할 필요가 있다.

3. 보안과 신뢰 : 소프트웨어는 우리 삶의 모든 부분과 밀접하게 관련되어 있기에 우리가 신뢰할 수 있어야 한다. 특히 웹을 통해 원격접속하는 경우 그러하다. 악의적인 사용자에게 공격받지 않고 정보보안이 갖춰져야 한다.


<p10~p12 요약>

1.1.2 소프트웨어 공학 다양성

어떠한 소프트웨어 공학적 방법론과 기법을 적용할 것인가를 결정하는 가장 중요한 요소는 어떤 종류의 소프트웨어를 개발하는가 하는 점일 것이다. 

1. 독립형(stand-alone) 어플리케이션 : PC 같은 로컬 컴퓨터에서 실행되며 네트워크에 연결될 필요가 없다. ex) CAD, 포토샵 등

2. 상호작용적 트랜젝션 기반 어플리케이션 : 사용자들의 PC가 단말이 되어 원격으로 실행된다. ex) 전자상거래, 클라우드, 메일, 사진 공유 등

3. 임베디드 콘트롤 시스템 : 하드웨어 장비를 제어, 운영하는 시스템. 산술적으로 다른 모든 시스템을 합친 것보다 임베디드 시스템이 더 많을 것이다. ex) 모바일폰, 자동차 ABS, 전자렌지 조리과정 제어 등

4. 일괄 처리 시스템 : 많은 숫자의 개별적 입력과 그에 해당하는 출력을 처리한다. ex) 전화 요금 납부나 봉급 지불과 같은 주기적 송금 시스템

5. 오락 시스템 : 사용자를 즐겁게 하기 위한 시스템이며 대개 게임이다. 사용자 상호작용이 가장 특징적인 개성이다.

6. 모델링, 시뮬레이션을 위한 시스템 : 다수의 독립적이고 상호작용하는 객체들을 포함하는 물리적 상황이나 과정을 모델링하기 위한 프로그램. 대개 계산성능에 집약적이며 고성능의 병렬 시스템을 필요로 하기도 한다.

7. 데이터 수집 시스템 : 센서와 상호연동하는 데이터 수집을 위한 시스템.

8. 시스템을 위한 시스템 : 다른 소프트웨어 시스템으로 구성되어 있다. 스프레드시트 프로그램 같은 일반적인 프로그램도 있고 각각의 환경을 위해 특별히 만들어진다.

모든 타입에 적용되는 소프트웨어 공학의 기본원리

1. 세심히 관리되고 인정된 과정을 통해 개발되어야 한다.무엇을 개발하고 언제 완료할 것인지 개발 과정을 계획해야 한다.

2. 신뢰성과 성능은 어떤 종류의 시스템이건 중요하다. 시스템은 실패 없이 기대한대로 동작해야 한다. 가능한한 외부의 공격으로부터 안전해야하고 효율적으로 동작하며 자원을 낭비해서는 안된다.

3. 소프트웨어 사양서와 요구사항을 잘 이해하고 처리하는 것은 중요하다. 서로 다른 요구를 기한과 예산 안에서 어떻게 충족시킬지 잘 다루어야 한다.

4. 존재하는 자원을 가능한한 효과적으로 사용해야 한다. 새롭게 만드는 것보다 이미 개발된 것을 재사용하는 것이 좋다.


<p12~p14 요약>

1.1.3 소프트웨어 공학과 웹

사용자의 PC가 아니라 웹 서버에 소프트웨어를 설치할 수 있게 되어 소프트웨어를 변경하거나 업그레이드하기 쉽게 되었고, 모든 PC에 소프트웨어를 설치할 필요가 없게 되었다. 그로 인해 단가가 낮아졌지만, 유저 인터페이스 개발은 특별히 비싸졌다. 많은 사업이 웹기반으로 넘어갔다.

다음 단계는 웹 서비스의 개념이다. 웹 서비스는 구체적이고 유용한 기능을 제공하며 웹을 통해 접근하는 소프트웨어 컴포넌트 들이다. 최근 수년간 '서비스로서의 소프트웨어' 라는 개념이 발달되었다. 이것은 로컬 컴퓨터에서 수행되는 것이 아니라 인터넷을 통해 '컴퓨팅 클라우드'에서 수행된다. 사용자들은 소프트웨어를 구매하지 않고 사용량에 따라 지불하거나 광고를 보는 대신 무료로 접근한다.

이러한 급격한 변화는 웹 기반 시스템의 공학적 변화를 이끌었다. 예를 들어 :

1. 소프트웨어 재사용이 웹 기반 시스템을 구성하는데 지배적인 접근법이 되었다.

2. 사전에 시스템의 모든 요구사항을 아는 것은 불가능하다는 점이 일반적으로 인식되었다. 웹 기반 시스템은 점진적으로 개발되고 제공되어야 한다.

3. 유저 인터페이스는 웹 브라우저의 역량에 의해 제한된다. AJAX 같은 기술도 있지만 여전히 사용하기 어렵다. 웹 기반 시스템의 인터페이스는 대개 특별히 디자인된 다른 프로그램에 비해 떨어진다.


<p14~p17 요약>

1.2 소프트웨어 공학 윤리

1. 비밀엄수(confidentiality) : 고용주나 고객의 비밀을 엄수해야 한다. 명시적으로 계약했건 그렇지 않건.

2. 숙련도(competence) : 자기 숙련도 수준을 오해하게 해서는 안된다. 알면서 능력 이상의 일을 맡지 말라.

3. 지적재산권(intellectual property rights) : 특허나 저작권 같은 지적재산권에 주의하라.

4. 컴퓨터 악용(computer misuse) : 사소한 것들(직장 PC로 게임하기)부터 심각한 것들(바이러스나 멀웨어 전파)까지 포함, 악용하지 말라.

윤리적 딜레마들 : 경영진의 정책과 맞지 않을 때;. 고용주가 비윤리적으로 행동할 때; 무기나 핵과 관련된 업무일 때 등.

이런 부분은 각자 판단해야할 문제들이며 절대적인 답은 없다.



이하 생략. ppt 참조 (차후에 하던가...)

<p17~p18>

1.3 사례 연구

<p18~p20>

1.3.1 인슐린 펌프 제어 시스템

<p20~p22>

1.3.2 정신 건강 관리를 위한 원무 정보 시스템

<p22~p23>

1.3.3 황야 기상대

Posted by Maverick Unlimited