[소프트웨어공학] Chapter1. Introduction

HEEJOON MOON·2021년 9월 15일
0

1. Software engineering

Software engineering

소프트웨어공학은 professional software development에 관련한 이론들과 방법들을 다루는 것이다. 최근 소프트웨어에 대한 의존성이 높아지므로, 소프트웨어공학의 중요성은 더더욱 커지고 있다.

Software Cost

  • Software Cost는 때때로 hardware cost보다 더 많을 때가 있다.
  • Software Cost에서 초기 개발 비용보다 유지,보수 비용이 더 큰 것이 당연하다.
  • 소프트웨어공학은 cost-effective한 software development를 다루고 있다.

Causes of Software project failures

  • 1. Increasing System Complexity : 최근의 소프트웨어들은 매우 complex하며, 규모 역시 매우 크다. 이러한 소프트웨어들을 또 빠르게 개발하는 것이 요구되기도 한다.
  • 2. Failure to use Software Engineering Methods : 처음부터 개발자들이 소프트웨어공학 이론 및 방법들을 잘 적용하여 개발하는 경우는 많이 없다. 이로 인해, 소프트웨어는 비싸지며, less reliable하게 된다.

2. Professional Software Development

Frequently asked questions about S.E

  • What is Software?

    Computer programs과 관련된 documentation로 구성된다. Software products는 특정 고객이나, 일반 시장을 위해 개발된다.

  • What are the attributes of good software?

    좋은 소프트웨어는 1) Functionallity(필요 기능을 해야하며), 2)performace(성능)이 좋아야한다. 또한 유지가능하며, 재사용이 가능해야 한다.

  • What is Software Engineering?

    소프트웨어 제작에 관련한 engineering 규칙들이다.

  • What are the fundamental software engineering activities?

    Software specification(요구사항), development(개발), validation(검증), evolution(진화)가 있다.

  • Difference between S.E and C.S?

    CS는 sw basic을 위한 이론들과 기초들을 다루고 있으며, SE는 좋은 SW개발,보수를 위한 방법에 관하여 다룬다.

  • Difference between S.E and System Engineering?

    시스템 공학은 SW뿐만 아니라 hardware, process engineering와 같이 컴퓨터기반 시스템에 관한 모든 부분을 다루고 있다. Software Engineering보다 포괄적인 개념이라 할 수 있다.

  • What are the key challenges facing S.E?

    개발 시간을 줄이며, 신뢰성 있고, 다양한 SW을 만드는 것이 과제이다.

  • What are the cost of software engineering?

    유지,보수 비용이 개발비용보다 많이 든다

  • What are the best S.E techniques and methods?

    정답은 없다. 다양한 시스템에 따라 요구되는 방법들이 다를 것이다. 그러므로 우열을 가릴 수는 없을 것이다.

  • Web이 S.E에 가져온 변화?

    Web이 빠르게 발전하면서 많은 software services를 제공하게 되었다. Web-based 시스템들은 또한 SW 재사용에 관하여 중요한 advances를 가져왔다.

Software products

  • 1) Generic products
    : 일반적인 고객을 대상으로 판매되는 SW를 말한다.

  • 2) Customized products
    : 특정 고객의 needs를 만족시키는 SW를 개발할 수도 있다.

Product Specification (요구사항)

SW의 요구사항을 파악하는 것은 개발의 시작점이 되므로 매우 중요하다고 할 수 있다.

  • 1) General products
    : 개발자에 의하여 SW의 specifications(요구사항)들이 정해진다. 대표적인 예로는 MS가 windows의 spec을 정하는 경우가 있다

  • 2) Customized products
    : 특정 고객의 요구하는 spec에 따라 개발 및 수정이 일어난다.

Essential Attributes of good Software

1)유지 2) 보안,신뢰성 3) 효율성 4) 수용/호환성이 있다.

Importance of Software Engineering

  • S.E는 소프트웨어 제작 전반(초기 system specification부터 시스템 유지까지)에 관련된 engineering 규율이다. 즉, 개발에 관련한 기술적인 내용뿐만 아니라, 프로젝트 관리, 개발 도구, 방법 등에 관련한 모든 것을 다룬다.

  • 최근 software system에 대한 의존도가 많이 늘어났다. 우리는 신뢰할만하고, 경제적인 SW들을 빠르게 개발해야 한다.

  • 장기적인 관점으로 보면, 소프트웨어공학 방법과 기술들을 적용하는 것이 비용면에서도 유리하다. 수많은 사람들이 노하우가 담겨 있으므로 효과적으로 개발할 수 있다.

Software process activities

1) Software Specification: 시스템 요구사항들의 명시
2) Software Development: SW 개발
3) Software Validation: 개발한 SW의 검증(요구사항 만족 등)
4) Software Evolution: 고객과 시장의 요구에 맞춘 SW 수정

General issues affecting SW

1) Heterogeneity : 수많은 컴퓨터와 모바일 기기 위에서 distributed된 시스템에서 구동할 수 있어야 한다.
2) Business and social change : 기존의 SW은 시장,사회적인 변화에 따라 변화해야 하며, 새로운 SW도 빠르게 개발할 수 있어야 한다.
3) Security and trust : SW를 믿을 수 있어야 한다.
4) Scale : 작은 규모의 시스템부터 매우 큰 규모의 시스템까지 SW를 개발해야 한다.

Application types

  • Stand-alone applications
    : network와의 연결 없이도, 모든 필수적인 기능을 포함하고 있는 SW이다.

  • Interactive transaction-based applications
    : 개인 PC에서 원격 컴퓨터로 연결되어, 원격 컴퓨터 위에서 실행되는 SW. 대표적으로 web applications이 있다.

  • Embedded control systems
    : Hardware 제어 및 관리하는 software. 임베디드 시스템은 정말 다양한 종류가 있다.

  • Batch processing systems
    : large batch단위로 데이터를 처리한다.

  • Entertainment systems
    : 오락 목적으로 사용되는 시스템

  • Modeling and Simulation
    : 과학자나 공학자들이 물리학적 process나 상황들을 모델링할 때 사용한다.

  • Data Collection systems
    : 센서를 통해 데이터를 수집하고 처리를 위해 다른 시스템에 송신. 대표적으로 IOT.

  • System of Systems
    : 회사 등에서 하위 시스템들을 관리하는 총괄 시스템

    Software engineering fundamentals

    몇몇의 소프트웨어공학 기초들은 모든 소프트웨어에 적용 가능하다.

  • 시스템들은 관리되고 이해되는 개발과정을 따라야 한다.

  • 신뢰성과 성능은 모든 시스템에서 중요한 사항들이다.

  • SW specification과 요구사항을 이해하고 관리하는 것은 매우 중요하다

  • SW를 새로 만드는 것보다는, 재활용하는 것이 더 낫다.
    C++(class)는 이를 용이하게 해준다.

    Web-based Software Engineering

  • 웹기반 시스템들은 complex한 분산형 시스템이지만, 앞서 살펴본 소프트웨어공학 기본적인 원리들을 적용 가능하다. Reusing이나 agile-development가 대표적이다.

  • 웹기반에 적용되는 ideas은 마찬가지로 다른 시스템들에서도 적용 가능하다.

  • Software reuse : 기존의 software 구성요소들을 사용하여 새로운 시스템을 만들 수 있다

  • Incremental & agile development : 점진적으로 개발이 이뤄져야한다.

  • Service-oriented system : stand-alone web services를 바탕으로 서비스 중심의 SW가 개발되어야 한다.

  • Rich interfaces : 풍부한 Interface들이 개발되고 있다.

3. Software engineering ethics

단순히 코드를 짜는 것 이상의 책임감이 요구되고 있다. 소프트웨어 개발자들은 정직해야하며, 전문성에 걸맞는 책임감을 가져야 한다. Ethics은 단지 듣기 좋은 말이 아니며, 반드시 지켜야 하는 것이다. 특히 최근 AI/Big-data/Open-Source 기반의 SW가 많이 있으므로, 윤리를 지키지 않으면 심각한 결과들을 초래할 수 있다.

Issues of Professional Responsibility

  • 1) Confidentaility(보안의식) : 개발자들은 개발에 관련한 내용에 관하여 함구하여야 한다.
  • 2) Competence : 본인의 개발능력에 관하여 정직하게 얘기하여야 한다.
  • 3) Intellectual property rights : 특허와 저작권 같은 지적재산권을 존중해야 한다.
  • 4) Computer misuse : 다른 사람들의 컴퓨터를 오남용 해서는 안된다. 즉, 업무외 목적으로 사용해서는 안된다.(game, virus)

ACM/IEEE code of ethics

p.s 「컴퓨팅 전문가 윤리 강령의 최신 개정과 주요 변화」

4. Case Studies

1. 인슐린 펌프

임베디드 기반 시스템이다. 사용자의 혈당량을 모니터링 하여 적기에 적정량의 인슐린을 투입하는 것이 매우 중요하다. 이 시스템은 신뢰성이 매우 중요하다.

2. Mentcare

정신병 환자들을 모니터링 하는 시스템이다. 환자 정보를 중앙 데이터베이스에 저장하고, 보안 네트워크를 사용하여 원격에서 관리가 가능할 수 있어야한다. 환자 개개인 정보 보호, 환자 감시, 이상징후 보고, 보안, 환자 안전 감시 등의 요구사항이 있다.

3. 기상시스템

기상 요소들의 수집, 데이터 관리와 저장, 시스템 유지 및 관리 등이 필요하다. 특히 시스템 version upgrade 경우, new ver을 다운받는 과정에서도 작동해야 하므로, 기존 시스템이 작동해야 한다. 완전히 설치된 이후 새로운 ver이 실행된다.

4. e-campus

  • 교수/학생/조교 마다 필요한 서비스들과 도구들이 다르다.
  • service-oriented system이며, 독립적인 하위 서비스들로 구성되어 있다. e-mail, 강의록 등.

5. Summary (key-points)

  • Software engineering은 전반적인 sw제작에 관련한 engineering 규율이다
  • 필수적인 software 특징으로는 유지성, 신뢰도, 보안, 효율성, 수용성이다
  • 고차원적인 specification, development, validation, evolution은 소프트웨어 process의 부분이다.
  • 기본적인 software engineering의 개념들은 모들 시스템개발에 적용 가능하다.
  • 시스템마다 요구되는 개발 도구와 방법이 있다. BEST한 개발방법은 존재 X.
  • 소프트웨어 개발자들은 책임감과 전문성을 갖춰야한다.

6. Reference

  • 「Software Engineering, 10th edition」, Ian Sommerville
  • 경희대학교 소프트웨어융합학과 이성원 교수님「소프트웨어공학」 강의자료
profile
Robotics, 3D-Vision, Deep-Learning에 관심이 있습니다

0개의 댓글