[SE] 1. What is Software Engineering?

ChaeYuuu·2024년 7월 25일

Software Engineering

목록 보기
1/1
post-thumbnail

이번 게시물에서는 소프트웨어공학의 정의와 간단한 특징에 대해 알아볼 것이고 각 부분에 대해 자세한 내용은 뒤에 차차 다룰 예정이다.


💻 Software Engineering (SE)

: 소프트웨어를 비용 효율적 (cost-effective)으로 만들고 professional 하게 만들고자 하는 것으로 쉽게 말해 소프트웨어를 잘 개발하고 유지보수하기 쉽게 만들고자하는 공학이라고 볼 수 있다

현재 소프트웨어는

  • 큰 시스템, 여러 사람의 개발, 지속적인 유지 보수(maintenance, reuse) 로 인해 힘듦
  • 특히 개발 보다 유지보수 (maintenance)가 더 어렵고 가격이 많이 듦

이러한 어려움을 해결하기 위해 소프트웨어 공학 (software engineering)은 software production의 모든 부분과 관련되어있음

  • “All aspects of software Production”
    : technical process of development & project management & support software production
  • “Engineering discipline”
    : 문제를 해결하기 위한 적절한 이론과 방법을 사용

🌀 Fundamentals of SE

' NO SILVER BULLET '
: 소프트웨어공학을 관통하는 문장으로 SE는 워낙 다양 (diversity) 하여 정확하고 명확한 해답이 존재하지 않는다.

따라서 근본적인 원칙들을 기반으로 적용해야한다

  1. 잘 관리되어야하고 이해할 수 있는 개발 프로세스를 활용해야 함
    • ex) SDLC(생명주기 모델), development Process, Agile 등..
  2. 품질이 좋아야함 즉, dependability and 성능 (performance)가 중요함
    • ex) Software Quality
  3. 요구사항을 이해하고 만족해야함
    • ex) Requirement Engineering
  4. 적절한 곳에 이미 개발되어 있는 소프트웨어를 재사용 (software reuse) 하는 것이 가능해야 함
    -> 즉 새로 만드는 것보다 재활용하는 것이 더 나음
    • ex) Software Reuse, Open-Source Software → API와 같이 Web-based software에 대한 정보를 가져다가 씀

🌀 Types of Software Products

소프트웨어 상품은 크게 'generic software'와 'customized software'로 구분된다

  • Generic software
    : 일반적인 소프트웨어로 SRS가 개발자에 의해 결정되는 것으로 개발자가 원하는 대로 만들어 놓은 후, 그것을 원하는 사람이 있다면 사서 쓰는 방식
    • reuse의 관점 → evolution
    • ex) word, excel …
  • Customized Software
    : 사용할 사람 즉, 고객 (customer)이 개발자에게 그들의 요구 사항을 말한 후 그것을 기반으로 개발하는 방식
    • SRS는 소프트웨어의 user에 의해 결정됨
    • reuse의 관점 → maintenance
    • ex) teller가 은행에서 사용하는 시스템, 대학교 포탈

🌀 Esstential Attributes of Good Software Products

좋은 소프트웨어라고 하는 것에는 필수적인 특징들이 존재한다

  • Maintainability (=유지보수)
    • 계속하여 수정되고 변경되는 코드에 유연한 대응이 가능해야함
    • 고객 (customer)의 요구를 충족할 수 있도록해야함
  • Dependability (= 의존 가능, 신뢰 가능)
    • 의존성 (reliability), 보안 (security), 안전성 (safety) 포함해야함
    • 시스템이 안정적으로 동작할 수 있어야함
  • Efficiency
    • time, resource같은 제한된 자원을 효율적으로 사용하는 것
    • 자원을 낭비해서는 안됨
  • Acceptability (=수용성)
    • user의 타입에 accceptable 해야함
    • 이해가능하고 (understandable), 사용하기 쉽고 (usable), 호환이 편리한 (compatible) 시스템이여야 함

🌀 Typical Activities in S.E

  • Software Specification

    • 요구사항 분석
    • '요구공학 (Requirements Engineering)'의 최종산출물은 SRS이다.

    SRS(Software Requirement Specification Document)란?
    : 특정 프로젝트의 요구 사항과 요구 사항에 대한 자세한 설명을 제공하는 소프트웨어 개발에 필수적인 문서

  • Software Development

    • 프로그램 화 작업 → designed & programmed
    • ex) Architecture Design(high level), Detailed Design(low level), Implementation
    • CTIP (continuous test and integration platform): 지속적 테스트와 통합으로 빠른 피드백과 높은 품질의 소프트웨어 배포를 지원함
  • Software Validation

    • customer가 요구한대로 만들어졌는지 확인&검증
    • ex) Software V&V(Verification&Validation), Testing
      +) verfication과 validation은 엄연히 다른 과정이니 구분해야한다. 나중에 자세히 다룰 것이다.
  • Software Evolution

    • 유지보수 (Maintenance)의 일종으로 계속해서 요구 사항에 맞게 발전하는 것

🌀 Software Application Types

소프트웨어 어플리케이션 종류에는 여러 종류가 존재하는데 몇 개만 알아보도록 하겠다. 그냥 이런 종류가 있구나 하고 넘어가도 된다.

  • stand-alone applications

    • 네트워크 연결 없이 잘 돌아가는 독립적인 application
      (= do not need to be connected to network)
  • Interactive transcation-based applications (=~ Web-based Systems)

    • 사용자의 입력에 반응하여 application을 수행하는 것으로 네트워크를 필요로함
      ex) online-game 종류, 예약 시스템
  • Embedded control systems

    • 하드웨어 장치를 관리하고 제어하는 software control system
      ex) 전국 T-money, 전투기 등..
  • Batch processing systems

    • 중간에 개입이나 인터럽트 없이 한 번에 쭉 진행되어 결과를 내놓는 시스템
      ex) 월급이나 성과금 계산
  • Systems for modelling and simulation (M&S)

    • 하드웨어와 소프트웨어 동시에 보는 것
    • 복잡한 현실 세계의 시스템이나 프로세스를 표현하고 실험하는데 사용
      ex) matlab
  • Data collection systems

    • 센서를 통해 데이터를 수집하고 처리를 위해 다른 시스템 송신
      ex) IOT
  • Systems of systems (= CPS: cyber physical system)

    • 여러 다른 소프트웨어 시스템으로 구성되어있음 (서로 communication허는 software로 구성)
    • 회사 등에서 하위 시스템들을 관리하는 총괄 시스템


🌀 10 FAQs about Software Engineering

소프트웨어 공학에 대해 자주 묻는 10가지의 질문에 대해 정리해보았다

1. 소프트웨어란 무엇인가?
: 컴퓨터 프로그램과 관련 문서로 소프트웨어 제품은 특정 고객을 위해 개발되거나 일반 시장을 위해 개발될 수 있다

2. 좋은 소프트웨어의 속성은?
: 좋은 소프트웨어는 요구된 기능과 성능을 사용자에게 제공하고 유지보수 가능하고 신뢰성 있으며 사용하기 쉬워야 한다

3. 소프트웨어 공학이란?
: 소프트웨어 공학은 소프트웨어 생산의 모든 측면을 다루는 엔지니어링 학문이다

4. 기본적인 소프트웨어 공학 활동은?
: 소프트웨어 구체화 (software specification), 소프트웨어 개발 (software development), 소프트웨어 검증 (software validation) 및 소프트웨어 진화 (software evolution) 이다

5. 소프트웨어 공학과 컴퓨터 과학의 차이는?
: 컴퓨터 과학은 이론기초에 중점을 두는 반면 소프트웨어 공학은 유용한 소프트웨어를 개발하고 제공하는 실용성에 중점을 둔다

6. 소프트웨어 공학과 시스템 공학의 차이는?
: 시스템 공학은 하드웨어, 소프트웨어 및 프로세스 엔지니어링을 포함한 컴퓨터 기반 시스템 개발의 모든 측면을 다루는 반면 소프트웨어 공학은 이 더 일반적인 과정의 일부이다

7. 소프트웨어 공학이 직면한 주요 과제는?
: 증가하는 개발의 다양성, 짧은 시간 내의 요구 및 신뢰할 수 있는 소프트웨어 개발에 대처하는 것이다

8. 소프트웨어 공학의 비용은 얼마나 되나요?
: 일반적으로 소프트웨어 비용의 약 60%는 개발 비용이고 40%는 테스트 비용입니다.

9. 가장 좋은 소프트웨어 공학 기법과 방법은 무엇인가요?
: 모든 소프트웨어 프로젝트는 전문적으로 관리되고 개발되어야 하고 특정 유형의 시스템에는 특정 기법이 적합하기 때문에 한 가지 방법이 다른 방법보다 낫다고 할 수 없다. 앞서 말했듯이 소프트웨어공학은 'NO SILVER BULLET'이다.

10. 웹이 소프트웨어 공학에 미친 영향은?
: 웹 기반 시스템 개발은 프로그래밍 언어와 소프트웨어 재사용의 발전을 가져왔다


<참고: 소프트웨어공학 수업 자료, Software Engineering 10th edition>

소프트웨어 공학 수업을 들으면서 정리했던 자료를 복습하면서 올려보고자한다. 다시 공부하면서 업로드해야지 !!

profile
아무것도 머르게떠염

0개의 댓글