Software Engineering Introduction part 1

Bomin Seo·2022년 7월 18일
0

Software engineering(소프트웨어 공학)

  • Professional Software 개발에 필요한 이론, 방법, 도구에 관한 학문
  • Software engineering is concerned with theories,methods and tools for professional software development.

    Professional Software

    • 상용을 목적으로 판매하거나 특수한 목적을 가지고 상호작용하는 소프트웨어

소프트웨어 공학의 중요성 증대

  • The economies of ALL developed nations are dependent on software.
  • More and more systems are software controlled.
  • Expenditure on software represents a significant fraction of GNP in all developed countries.

Software cost

  • 소프트웨어 비용이 Computer system cost의 대부분을 차지한다.
  • 소프트웨어 비용은 개발보다 유지보수 비용의 비율이 더 크다.
  • 소프트웨어 공학은 cost-effective한 소프트웨어 개발에 대한 방법론

Software project failure

왜 소프트웨어 프로젝트는 실패하는가?

  • Increasing system complexity
    • 문제의 규모와 복잡도가 증가하였으며 이에 따른 요구 사항도 변화하였다.
    • 소프트웨어의 개발과 전달이 빨라져야하며 따라서 더 복잡한 시스템이 요구된다.
    • 시스템은 이전에 다룰 수 없었던 문제도 다룰 수 있는 능력을 포함하여야 한다.

  • Failure to use software engineering methods
    • 잘못된 소프트웨어 공학 방법 / 기술의 사용
    • 설계 단계에서 회사 내에서 혹은 개인 사용을 목적으로 만들어지는 경우 프로젝트의 규모가 커짐에 따라 수요량을 제대로 예측하지 못하여 비용은 높아지며 신뢰성은 낮아지게 된다.
    • 프로젝트 설계 단계부터 소프트웨어 공학의 방법론을 가지고 소프트웨어를 설계하는 것은 어렵다.

Professional Software Development

What is Software?

  • Computer Program과 그와 관련된 Documentations
  • Software는 특정 고객이나 general market 대상으로 개발된다.

What are the attributes of good software?

  • 필요한 기능을 제공하고, 잘 동작하는지(시간, 메모리, 안정성 등)에 대한 여부
  • 수준 높게 유지보수가 가능해야하며 안정적이고 필요한 것을 필요한 때에 제공이 가능해야한다.

What is software engineering?

  • 소프트웨어가 태어나서 죽을 때까지의 모든 측면에 관한 이론, 방법, 도구에 대해 설명한다.

What are the fundamental software engineering activities?

  1. Software specification(소프트웨어 명세) : 구현해야할 기능을 서술한다.
  2. 소프트웨어 개발
  3. 소프트웨어 validation(검증 및 테스트)
  4. 소프트웨어의 유지보수 및 발전

What is the difference between software engineering and computer science?

  • 소프트웨어 공학은 실용성있는 소프트웨어의 개발과 유용한 software의 전달에 관한 방법론
  • 컴퓨터 사이언스는 소프트웨어가 사용할 기초, 이론(자료구조, 정렬, 검색), 도구에 집중하는 분야

소프트웨어 공학과 시스템 공학의 차이

system engineer

  • system programmer : 운영체제 내외부, 접경지대에 대한 소프트웨어를 개발하는 개발자
  • system engineer : Hardware, Software, infra, process engineering를 모두 관여하는 개발자

software engineer

  • system engineer보다 더 일반적인 범위를 다룬다.

What are the key challenges facing software engineering?

  • 더 높은 다양성 수준에 대처해야하며 더 빠른 전달 시간과 더 높은 신뢰성에 대한 요구사항이 발생한다.

What are the costs of software engineering?

  • 대략적으로 60%의 개발비용과 40%의 테스트 비용이 발생하며 custum software의 경우 evolution 비용이 개발 비용을 상회한다.

What differences has the web made to software engineering?

  • Web은 소프트웨어 서비스에 대한 접근성을 높였으며, 분산 시스템에서 개발하는 가능성을 제공하였다.
  • Web 기반 시스템의 개발은 프로그래밍 언어와 소프트웨어의 재사용에 대한 중요한 진전을 이루는 기반이 되었다.

Software Products

Generic products

  • 필요한 기능과 성능을 개발사에서 정의하는 products
  • 구매를 희망하는 불특정 다수에게 판매하는 Stand-alone system
  • graphics program(ex. photoshop), Project Management Tools, CAD software, MS office etc.

    CAD Software

    • Computer Aided Design
    • 공학자, 건축가, 설계 활동에서 전문적인 설계를 지원하는 컴퓨터 기반의 도구

Customized Products

  • 필요한 기능과 성능을 고객이 정의하며, 고객의 요구에 맞추어 개발되는 Software products
  • 특정 이론에 기반해 만들어지는 embedded control system
  • 특정 공항이나 지하철역에 최적화되어 만들어지는 software etc.

Software process activities

software specification

  • 고객과 엔지니어가 제작될 소프트웨어의 기능과 제한사항을 정의하는 단계

Software development

  • software가 설계되고 구현되는 단계

software validation

  • software가 고객의 요구를 만족하는지에 대하여 검증 및 시험하는 단계

software evolution

  • 변화하는 고객의 요구화 시장의 요구사항에 맞추어 software가 수정되는 단계

Essential attributes of good software

Maintainability

  • software는 변화하는 고객의 요구사항에 맞추어 변경되고 발전될 수 있는 방식으로 개발되어야 한다.
  • business environment의 변화는 필수불가결하기에 가장 중요한 특징

Dependability & Security

  • 신뢰성, 보안, 안정성의 의미를 포함한다.
  • system failure에 대한 기기적, 경제적 손실을 야기하지 않아야 하며, hacking에 대한 방어기능을 포함하여야 한다.

Efficiency

  • memory와 processor cycles와 같은 computing resource를 낭비하는 과정이 포함되지 않아야 한다.
  • responsiveness, processing time, memery utilisations etc.

Acceptability

  • 사용자가 원하는 기능을 수행할 수 있어야하며 사용가능한 상태를 유지해야 한다.
  • understandable, usable, compatible with other systems의 특징을 포함한다.

General issues that affect software

Heterogeneity

  • 다양한 유형의 컴퓨터와 모바일 기기의 출현에 따라 소프트웨어는 다양한 환경에서 구동할 수 있도록 규모가 더 커지고, 복잡성이 증가하면 다양해진다.

Business & Social Change

  • 시장이나 사회의 변화는 매우 빠르며 새로운 기술이 등장함에 따라 이미 만들어졌거나 개발이 진행 중인 소프트웨어는 변화에 대응할 수 있어야 한다.

Security & Trust

  • 소프트웨어가 컴퓨터 간 동작하거나 비즈니스적으로 중대한 사항에 관여하는 등 삶에 미치는 영향이 증대됨에 따라 보안과 신뢰성이 더욱 중요해졌다.

Scale

  • embedded system에서 data center의 규모까지, 다양한 범위의 scale에 알맞도록 개발되어야 한다.
profile
KHU, SWCON

0개의 댓글