'소프트웨어 엔지니어링'에 해당되는 글 3건

  1. 2013.04.04 Software Engineering Quiz #1
  2. 2013.04.01 Software Engineering 교재 번역 및 요약 1장 (2)
  3. 2013.03.26 Software Engineering 교재 번역 및 요약 1장 (1)

1. 아래는 Software engineering 에 대한 정의이다. 아래 정의 내에서 밑줄 친 engineering discipline, all aspects of software production 이라는 두 구문이 갖는 의미를 간단히 설명해 보시오.

Software engineering is an engineering discipline that is concerned with all aspects of software production.


2. 다음 세 가지 용어가 나타내는 의미의 차이점을 설명해 보시오.

1) Software Process Model

2) Software Process

3) Plan-Driven Process


3. Agile method 가 갖는 문제점을 두 가지만 설명해 보시오.


4. Requirement Engineering Process 를 spiral 관점에서 설명해 보시오.


5. System 에 대한 Model 중에서 해당 System 과 Environment 에 대한 모델로 Context Model 과 Interaction Model 이 있다. 이들 두 모델의 차이점을 모델의 형식 및 용도의 관점에서 설명해 보시오.


6. Software Architecture 에 대한 4+1 View Model 에서 Development View 와 Logical View 의 차이점에 대하여 간단히 설명해 보시오.


7. Configuration management 에서는 기본적으로 다음과 같은 Activity 들이 수행된다. Configuration management 도구가 아래의 Activity 들을 구체적으로 어떻게 지원하는 것인지 간단히 설명해 보시오.

1) Version management

2) System Integration

3) Problem Tracking


8. Test-driven development 의 장점을 설명해 보시오.


9. 특정 기능을 시스템의 개발 도중에 시스템에 추가하는 것보다 개발이 끝난 이후에 추가하는 것이 일반적으로 더 많은 비용이 든다. 그 이유를 간단히 설명해 보시오.


Posted by Maverick Unlimited

<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
공부/Software Engineering2013. 3. 26. 23:25

Software Engineering 교재 번역 및 요약

<교재 p3>

1. 소프트웨어 공학 소개

목적

이 챕터의 목적은 소프트웨어 공학을 소개하고 책의 나머지 부분을 이해하기 위한 기초를 제공하는 것이다. 당신이 이 책을 읽었을 때 :

- 소프트웨어 공학이란 무엇이며 왜 그것이 중요한지 이해하고;

- 다른 종류의 소프트웨어 시스템을 개발하려면 대개 다른 소프트웨어 공학적 기술이 필요하다는 것을 이해하고;

- 소프트웨어 공학도들에게 중요한 윤리적이고 전문적인 쟁점들을 이해하고;

- 책 전체에 사용될 상이한 종류의 세 시스템들을 소개받을 것이다.


<교재 p4>

현 세상은 소프트웨어 없이는 돌아가지 않는다. 국가 기반시설들과 공공사업들은 컴퓨터 기반의 시스템에 의해 제어되며 대부분의 전기제품들은 컴퓨터와 제어 소프트웨어를 포함한다. 산업제조와 산업분포는 완전히 전산화되어 있으며, 금융 시스템도 마찬가지이다. 음악 산업, 컴퓨터 게임, 영화와 텔레비전을 포함한 오락도 소프트웨어 집약적이다. 그러므로 국가적 그리고 국제적 사회가 기능하는데 소프트웨어 공학이 필수적이다.

소프트웨어 시스템은 추상적이며 무형적이다. 재료의 성질에 구애되거나, 물리적 법칙 혹은 제조공정에 지배받지 않는다. 소프트웨어의 가능성에는 어떠한 천부적 한계도 없는바, 이것은 소프트웨어 공학을 간소화시킨다. 그러나 물리적 제약의 희박함으로 인해 소프트웨어 시스템은 빠르게 극도로 복잡해지고, 난해해졌으며, 변경하는데 큰 비용이 들게 되었다.

간단한 임베디드 시스템부터 복잡하고 전세계적인 정보 시스템이 이르기까지 다양한 종류의 소프트웨어 시스템들이 있다. 다른 종류의 소프트웨어는 다른 종류의 접근법이 필요하기에 소프트웨어 공학을 위한 보편적인 표기법이나 방법론, 기법을 구하는 것은 무의미하다. 조직적인 정보 시스템을 개발한다는 것은 과학기기 제어기를 개발하는 것과는 완전히 다르다. 두 시스템 중 어느 것도 그래픽 집약적인 컴퓨터 게임과는 그다지 공통점을 지니고 있지 않다. 이 모든 어플리케이션들이 소프트웨어 공학을 필요로 하지만, 모두 같은 소프트웨어 공학적 기법을 필요로 하지는 않는다.

여전히 잘못되거나 '실패작'이 된 소프트웨어 프로젝트에 대한 많은 보고들이 있다. 소프트웨어 공학은 최신 소프트웨어 개발에 불충분하다고 비판받는다. 그러나 내 관점에서 실패작이라 통칭되는 많은 경우는 두가지 요소의 결과이다 :

1. 수요의 증가 / 수요가 변화하면 새로운 소프트웨어 공학적 기법들이 더 크고 더 복잡한 시스템을 만들도록 돕는다. 시스템은 더욱 빠르게 건조되고 개발되어야 하며, 커지고 한층 더 복잡한 시스템을 필요로 하며, 이전에는 불가능한 것으로 여겨졌던 새로운 역량을 가져야 한다. 현존하는 소프트웨어 공학 방법론은 거기에 대처할 수 없으며 이러한 새로운 수요를 충족하기 위해 새로운 소프트웨어 공학적 기법이 개발되어야 한다.

2. 낮은 기대치 / 소프트웨어 공학적 방법론과 기법을 사용하지 않고 프로그램을 짜는 것은 비교적 쉽다. 많은 회사들이 그들의 상품과 서비스가 발달함에 따라 소프트웨어 개발에 나섰다. 그들이 매일의 업무에 소프트웨어 공학적 방법론을 사용하지는 않는다. 따라서 그들의 소프트웨어는 원래 그래야할 것보다 더욱 비싸고 덜 믿음직하다. 우리는 이 문제를 다루기 위해 더 좋은 소프트웨어 공학 교육과 훈련이 필요하다.

소프트웨어 공학자들은 마땅히 그들의 업적을 자랑스러워할 만하다. 물론 우리는 여전히 복잡한 소프트웨어를 개발하는게 문제들을 가지고 있지만, 소프트웨어 공학이 없었다면 우리는 아직 우주를 여행하지 못했을 것이며, 인터넷이나 최신 전기통신을 가지지 못했을 것이다. 모든 형태의 여행은 더욱 위험하고 비용이 들었을 것이다. 소프트웨어 공학은 이미 큰 기여를 했으며 나는 그러한 기여가 21세기에는 더욱 커질 것이라고 확신한다.


<p5 요약>

1.1 전문적 소프트웨어 개발

전문적 소프트웨어는 개인보다 팀에 의해 개발된다. 소프트웨어 공학은 개인적 개발보다 전문적 소프트웨어 개발을 지원한다. 많은 사람이 소프트웨어와 컴퓨터 프로그램을 동의어로 생각하지만, 그러나 소프트웨어는 프로그램 그 자체가 아니라 이러한 소프트웨어가 올바로 동작하게 만드는 문서, 상태 정보와 연관되어 있다.

도표 1.1 소프트웨어에 대한 FAQ

질문

대답

 소프트웨어란 무엇인가?

 컴퓨터 프로그램과 연관된 문서들. 소프트웨어는 특정한 고객을 위해 또는 일반적으로 판매하기 위해 개발된다. 

 좋은 소프트웨어의 속성은 무엇인가?

 좋은 소프트웨어는 필요한 기능과 성능을 사용자에게 제공해야하며, 유지보수성, 신뢰성, 사용편의성을 갖추어야 한다.

 소프트웨어 공학이란 무엇인가?

 소프트웨어 공학은 소프트웨어 생산물의 모든 형태에 관련된 공학적 분야이다.

 근본적인 소프트웨어 공학적 활동은 무엇인가?

 소프트웨어 사양서, 소프트웨어 개발, 소프트웨어 유효성 검사, 소프트웨어 추가개발이다.

 소프트웨어 공학과 전산학의 차이점은 무엇인가?

 전산학은 기본원칙과 이론에 초점을 맞춘다. 소프트웨어 공학은 개발의 실질적인 측면과 유용한 소프트웨어를 공급하는데 관심이 있다.

 소프트웨어 공학과 시스템 공학의 차이점은 무엇인가?

 시스템 공학은 하드웨어, 소프트웨어, 공정 공학을 포함한 모든 측면의 컴퓨터 기반 시스템에 관심이 있다. 소프트웨어 공학은 이러한 보다 일반적인 공정의 일부이다.

 소프트웨어 공학에 대한 핵심적 도전과제는 무엇인가?

 증가하는 다양성, 공급 시간의 단축에 대한 수요, 신뢰할만 한 소프트웨어의 개발에 대응하는 것이다.

 소프트웨어 공학의 비용은 무엇인가? 

 대략 소프트웨어 비용의 60%는 개발 비용이며, 40%는 테스트 비용이다. 주문제작 소프트웨어의 경우, 추가개발 비용이 종종 개발비용을 넘어선다.

 최상의 소프트웨어 공학적 기법과 방법론은 무엇인가? 

 모든 소프트웨어 프로젝트는 전문적으로 운영되고 개발되어야 하지만, 다른 종류의 시스템에는 다른 기법이 적용되어야 한다. 예를 들어, 게임은 개발되는데 연속적인 프로토타입들을 사용하는데 비해, 안전 필수적인 제어 시스템의 경우 완전하고 분석가능한 사양서를 필요로 한다. 그러므로 한가지 방법론이 다른 것보다 낫다고는 말할 수 없다.

 웹에 의해 만들어진 소프트웨어 공학의 변화는 무엇인가? 

 웹은 소프트웨어 서비스의 유용성과 고분산성 서비스 기반 시스템의 가능성을 초래했다. 웹 기반 시스템 개발은 프로그래밍 언어와 소프트웨어 재사용으로 이어졌다.


<p6~p7 요약>

두 종류의 소프트웨어 생산물이 있다. 그리고 두 제품 사이의 중요한 차이점은, 

1. 일반제품 : 소프트웨어를 개발하는 단체가 사양서를 조절한다.

2. 주문제품(혹은 맞춤제품) : 소프트웨어를 구입하는 단체가 사양서를 조절한다.

그러나 이 대조점은 점차 흐릿해져가고 있다. 점점 더 많은 시스템들이 일반 제품을 기본으로 하여 사용자에게 적합하게 조정되고 있다.

전문적인 소프트웨어의 품질을 논할 때, 개발자들 이외에 소프트웨어를 사용하고 변경하는 사람들을 고려에 넣지 않을 수 없다. 소프트웨어의 반응 시간이나 프로그램 코드의 이해의 용이성도 소프트웨어의 비기능적인 특성이다.

도표 1.2

제품 형질

설명

 유지보수성

 소프트웨어는 소비자 필요의 변화에 직면하면 추가개발이 가능한 방식으로 작성되어야 한다. 사업 환경이 변화함에 따라 소프트웨어 변화는 불가피한 요구이므로 매우 필수적인 부분이다.

 신뢰성과 보안

 소프트웨어 신뢰성은 확실성, 보안, 안전성의 다양한 형질을 포함한다. 신뢰성있는 소프트웨어는 시스템 장애가 발생할 경우에도 물리적이나 경제적인 손실을 초래하지 않아야 한다. 악질적인 사용자가 시스템에 접근하거나 피해를 입힐 수 없어야 한다.

 효율성

 소프트웨어는 메모리나 진행 사이클 같은 시스템 자원을 낭비하지 않아야 한다. 효율성은 반응성, 진행 시간, 메모리 활용 등을 포함한다.

 허용성

 소프트웨어는 그것의 디자인이 목적한 사용자들에게 받아들일만한 것이어야 한다. 이것은 이해하기 쉽고, 사용하기 쉽고, 그들이 사용하는 다른 시스템들과 호환되어야 함을 의미한다.


Posted by Maverick Unlimited