Software Engineering: Introduction

2025. 4. 16. 23:49·공부/소프트웨어 공학

소프트웨어

1. 소프트웨어란?

  • 컴퓨터 프로그램 & 그에 따른 문서
  • for 특정한 고객
  • for 일반 시장
  •  

소프트웨어 제품

-> 목적에 따라 크게 두가지로 구분 가능

 

1. 일반 제품(Generic products)

: 누구나 구매할 수 있는 독립 실행형 시스템

ex) 그래픽 프로그램, 프로젝트 관리 툴, CAD 소프트웨어, 치과 예약 시스템 등

 

2. 맞춤형 제품(Customized products)

: 특정 고객의 요구를 충족시키기 위해 개발된 소프트웨어

ex) 내장형 제어 시스템, 항공 교통 제어, 교통 모니터링 시스템

 

* 제품 명세 소유권:

  • 일반 제품: 개발자
  • 맞춤형 제춤: 고객

=> 요구사항 정의와 변경의 주체가 다름


2. 좋은 소프트웨어의 특성

  • 필요한 기능과 성능 제공
  • 유지보수 가능
  • 신뢰성 & 사용성이 좋아야함

제품 특성

1. Maintainability (유지보수성)

고객의 요구의 변화에 맞춰 수정될 수 있어야함
-> 변화하는 비즈니스 환경에서 소프트웨어 변화는 필수불가결함!

 

2. Dependability & Security (신뢰성 & 보안)

= 안정성 + 보안 + 안전성
시스템 장애 발생 시 물리적 또는 경제적 피해를 유발 X
악의적인 사용자가 시스템에 접근 or 손상을 입힐 수 X

 

3. Efficiency (효율성)

= 응답성 + 처리 시간 + 메모리 사용률
시스템 리소스(메모리 및 프로세서 사이클) 낭비적 사용 X

 

4. Acceptability (수용성)

설계된 사용자 유형에 적합해야 함
=> 사용자가 사용하는 다른 시스템과 호환가능
=> 이해하기 쉬움
=> 편리한 사용성

3. 소프트웨어 공학이란?

  • 소프트웨어 생산의 모든 측면을 다루는 공학적 학문
    • 기획 단계 ~ 시스템 유지보수

- 공학분야

: 조직적, 재정적 제약 고려 -> 적절한 이론과 방법을 사용해 문제 해결

- 소프트웨어 제품의 모든 측면
: 개발의 기술적 과정 뿐 아니라, 
프로젝트 관리 + 제작 지원 도구 + 방법론 포함

 

 

중요성

: 개인 + 사회 모두 소프트웨어에 대한 의존도 증가 -> 신뢰 할 수 있고, 경제적이며 빠르게 생산할 필요 있음

 

길게 봤을 때,

개인 프로젝트처럼 개발 하는 것보다 소프트웨어 공학 방법론과 기술을 사용하는 것이 좋음

실제로,

대부분의 비용은 사용 후 변경시 발생함

 

즉! 초기에 잘 해야한다~

체계적으로 개발하지 않으면 비용이 증가하게 됨.

 

  • 소프트웨어 공학을 쓰는 이유: 신뢰성, 경제성, 유지보수성
  • 비체계적인 개발은 결국 비용 증가로 이어짐

 


4. 소프트웨어 공학 활동의 핵심은?

 

  • 소프트웨어 명세
    : 고객과 개발자가 어떤 소프트웨어가 필요하며, 어떤 제약이 있는지 정의
  • 개발
    : 설계 & 코딩
  • 검증
    : 실제 고객의 요구와 일치하는지 체크
  • 진화
    : 고객과 시장의 요구 변화에 맞춰 수정

* 공학 활동 = 요구사항 정의 → 개발 → 테스트 → 유지보수*


5. 소프트웨어 공학 VS 컴퓨터 과학

 

  • 컴퓨터 과학: 이론과 원리에 집중
  • 소프트웨어 공학: 실제 소프트웨어를 만들고 배포하는 실용성에 집중

 

  • 이기종성 (Heterogeneity)
    • 현대 -> 여러 종류의 컴퓨터 및 모바일 장치들이 네트워크를 통해 연결된 분산 시스템으로 동작해야 함.
      => 복잡성 증가
  • 비즈니스 및 사회 변화 (Business and Social Change)
    • 새로운 기술과 신흥 경제가 등장 -> 비즈니스 환경이 급변
    • 기존 소프트웨어의 빠른 수정 및 새로운 시스템 개발 필요
      => 유연한 소프트웨어 필요
  • 보안과 신뢰 (Security and Trust)
    • 소프트웨어가 일상에 깊이 관여하게 되면서, 보안과 신뢰성 확보 필수
  • 규모 (Scale)
    • 아주 작은 임베디드 장치 ~ 전 세계적으로 운영되는 클라우드 기반 시스템까지 다양한 크기 개발됨
    • 다양한 규모에 맞는 설계/운영 능력 필요

6. 소프트웨어 공학 vs 시스템 공학?

  • 시스템 공학: 하드웨어, 소프트웨어, 공정 등 전체 시스템을 다룸
  • 소프트웨어 공학: 시스템 공학 중 소프트웨어 부분에 집중

7. 소프트웨어 공학이 직면한 주요 도전 과제는?

  • 다양성 증가
  • 짧은 기간 요구 대응
  • 신뢰할 수 있는 소프트웨어 개발

 

  •  

 


8. 소프트웨어 공학의 비용은?

  • 개발 비용: 약 60%
  • 테스트 비용: 약 40%
  • 맞춤형 시스템의 경우, 유지/진화 비용 >  개발 비용의 가능성 O

 

9. 최고의 소프트웨어 공학 방법론은?

  • 모든 시스템에 맞는 단 하나의 방법론은 없음
  • 예: 게임 → 프로토타입 중심,
    안전 시스템 → 정형 명세 필요
    = 시스템에 따라 방법론이 달라짐

- 소프트웨어 공학의 다양성

  • 소프트웨어 시스템은 매우 다양
  • 모든 시스템에 적용 가능한 보편적인 방법 X
  • 어떤 방법과 도구를 쓸지는 다음에 따라 달라짐:
    • 개발 중인 응용 프로그램의 종류
    • 고객의 요구사항
    • 개발팀의 배경

- 어플리케이션 종류

  1. 일괄 처리 시스템 (Batch processing systems)
    • 비즈니스 시스템, 대량 데이터를 한 번에 처리
    • 입력을 모아서 일괄적으로 처리 후 출력 생성
    • ex. 회계용 일괄 처리
  2. 엔터테인먼트 시스템 (Entertainment systems)
    • 주로 개인 사용을 위한 오락 목적의 시스템
    • ex. 게임
  3. 모델링 및 시뮬레이션 시스템
    • 과학자나 엔지니어가 물리적 현상을 모델링하기 위해 사용
    • 많은 개별 객체들이 상호작용하는 상황을 구현
    • ex. 과학적 시뮬레이션
  4. 데이터 수집 시스템 (Data Collection Systems)
    • 센서를 사용하여 환경에서 데이터를 수집하고, 다른 시스템으로 전송
    • ex. IoT 센서 시스템
  5. 시스템 오브 시스템즈 (Systems of Systems)
    • 여러 개의 독립된 시스템들이 조합되어 만들어진 시스템
    • ex. 통합 공항 관리 시스템

- 소프트웨어 시스템 기본 원칙

  1. 관리 & 이해되는 개발 프로세스 사용
  2. 신뢰성과 성능 중요
  3. 소프트웨어 명세와 요구사항을 이해하고 관리하는 것 중요
  4. 재사용

10. 웹이 소프트웨어 공학에 준 변화는?

  • 소프트웨어 서비스화 가능
  • 분산 시스템 설계 가능
  • 언어 및 재사용 기술 발전에 기여

- 로컬 시스템 -> 웹 베이스 시스템

- 웹을 통해 기능 접근

- 클라우딩 컴퓨팅: 소프트웨어를 사지 않고, 사용한 만큼 요금 지불

웹 시스템 => 복잡하고 분리되어있지만, 기본 소프트웨어 공학 규칙을 적용하고 있음

 

인터넷/웹 소프트웨어 개발 방식

  1. 소프트웨어 재사용
    기존 소프트웨어 구성 요소와 시스템 조합 -> 새로운 소프트웨어를 만듦

  2. 점진적 & 애자일 개발
    단계적으로 개발하여 출시
    요구사항을 처음부터 끝까지 완전히 정의 -> 비현실적

  3. 서비스 지향 시스템
    독립적인 기능 단위(서비스)를 조합해서 시스템 구성
    각 서비스는 웹에서 독립적으로 운영됨 (ex. REST API, SOAP)

  4. 풍부한 인터페이스 기술
    Angular, React, AJAX, HTML5 등
    => 브라우저 상에서도 복잡하고 역동적인 UI 구현 가능

소프트웨어 엔지니어의 책임

 

  • 기밀성 (Confidentiality)
    • 고객이나 고용주의 정보를 외부에 유출하지 않아야 함
  • 역량 (Competence)
    • 자신이 충분히 숙련된 일만 수행해야 함.
      (능력 밖의 일은 솔직히 인정해야 함)
  • 지적 재산권 (Intellectual Property Rights)
    • 저작권, 특허 등 타인의 소프트웨어 자산을 존중해야 함
  • 컴퓨터 오용 (Computer Misuse)
    • 해킹, 불법 접근, 시스템 파괴 등을 절대 해서는 안 됨

ACM/IEEE의 윤리 강령

 

  1. Aspirations (고결한 목표)
  2. Details (구체적 실행)

이 둘의 조화로 공허하지 않고 실천 가능한 윤리기준을 세움

소프트웨어 엔지니어는 
분석, 설계, 구현, 테스트, 유지보수의 모든 활동에서 사회에 이롭게 행동해야 하며, 
공공의 건강·안전·복지에 책임을 진다.

 

8가지 윤리 원칙

  1. 공공 (Public)
    : 대중의 이익에 부합하게 행동할 것
  2. 고객과 고용주 (Client & Employer)
    : 고객/고용주의 이익을 공공의 이익과 조화롭게 추구할 것
  3. 제품 (Product)
    : 최고 수준의 품질과 기준을 충족할 것
  4. 판단 (Judgment)
    : 독립적이고 정직한 판단 유지
  5. 관리 (Management)
    : 윤리적 프로젝트 관리 추진
  6. 직업 (Profession)
    : 소프트웨어 공학 분야의 명성과 진실성을 높이기
  7. 동료 (Colleagues)
    : 공정하고 협력적인 태도로 동료 대하기
  8. 자기 자신 (Self)
    : 지속적 학습과 윤리적 성장

 

'공부 > 소프트웨어 공학' 카테고리의 다른 글

Software Engineering: Agile  (0) 2025.04.20
Software Engineering: Plan-driven development & Project Plans  (0) 2025.04.20
Software Engineering: Project Planning & Software Price  (0) 2025.04.20
Software Engineering 소프트웨어 공학: Project Management 프로젝트 관  (0) 2025.04.19
SoftwareEngineering: Software Process  (0) 2025.04.19
'공부/소프트웨어 공학' 카테고리의 다른 글
  • Software Engineering: Plan-driven development & Project Plans
  • Software Engineering: Project Planning & Software Price
  • Software Engineering 소프트웨어 공학: Project Management 프로젝트 관
  • SoftwareEngineering: Software Process
rlacofls294
rlacofls294
아좌잣!~!
  • rlacofls294
    정신채린
    rlacofls294
  • 전체
    오늘
    어제
    • 분류 전체보기 (17)
      • 공부 (15)
        • 코딩테스트 (4)
        • 데이터베이스 (3)
        • 소프트웨어 공학 (7)
        • SQL (1)
      • 애니메이션 (1)
        • 생각정리 (1)
      • 프로젝트 (1)
        • 1 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    DP
    알고리즘
    Software Engineering
    무한성편
    다이나믹프로그래밍
    DML
    동적 계획법
    database
    백준
    소프트웨어 공학
    SE
    다이나믹 프로그래밍
    소공
    귀멸의칼날
    소프트웨어공학
    코테
    귀칼
    컴공
    디비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
rlacofls294
Software Engineering: Introduction
상단으로

티스토리툴바