소프트웨어
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
- 어떤 방법과 도구를 쓸지는 다음에 따라 달라짐:
- 개발 중인 응용 프로그램의 종류
- 고객의 요구사항
- 개발팀의 배경
- 어플리케이션 종류
- 일괄 처리 시스템 (Batch processing systems)
- 비즈니스 시스템, 대량 데이터를 한 번에 처리
- 입력을 모아서 일괄적으로 처리 후 출력 생성
- ex. 회계용 일괄 처리
- 엔터테인먼트 시스템 (Entertainment systems)
- 주로 개인 사용을 위한 오락 목적의 시스템
- ex. 게임
- 모델링 및 시뮬레이션 시스템
- 과학자나 엔지니어가 물리적 현상을 모델링하기 위해 사용
- 많은 개별 객체들이 상호작용하는 상황을 구현
- ex. 과학적 시뮬레이션
- 데이터 수집 시스템 (Data Collection Systems)
- 센서를 사용하여 환경에서 데이터를 수집하고, 다른 시스템으로 전송
- ex. IoT 센서 시스템
- 시스템 오브 시스템즈 (Systems of Systems)
- 여러 개의 독립된 시스템들이 조합되어 만들어진 시스템
- ex. 통합 공항 관리 시스템
- 소프트웨어 시스템 기본 원칙
- 관리 & 이해되는 개발 프로세스 사용
- 신뢰성과 성능 중요
- 소프트웨어 명세와 요구사항을 이해하고 관리하는 것 중요
- 재사용
10. 웹이 소프트웨어 공학에 준 변화는?
- 소프트웨어 서비스화 가능
- 분산 시스템 설계 가능
- 언어 및 재사용 기술 발전에 기여
- 로컬 시스템 -> 웹 베이스 시스템
- 웹을 통해 기능 접근
- 클라우딩 컴퓨팅: 소프트웨어를 사지 않고, 사용한 만큼 요금 지불
웹 시스템 => 복잡하고 분리되어있지만, 기본 소프트웨어 공학 규칙을 적용하고 있음
인터넷/웹 소프트웨어 개발 방식
- 소프트웨어 재사용
기존 소프트웨어 구성 요소와 시스템 조합 -> 새로운 소프트웨어를 만듦 - 점진적 & 애자일 개발
단계적으로 개발하여 출시
요구사항을 처음부터 끝까지 완전히 정의 -> 비현실적 - 서비스 지향 시스템
독립적인 기능 단위(서비스)를 조합해서 시스템 구성
각 서비스는 웹에서 독립적으로 운영됨 (ex. REST API, SOAP) - 풍부한 인터페이스 기술
Angular, React, AJAX, HTML5 등
=> 브라우저 상에서도 복잡하고 역동적인 UI 구현 가능
소프트웨어 엔지니어의 책임
- 기밀성 (Confidentiality)
- 고객이나 고용주의 정보를 외부에 유출하지 않아야 함
- 역량 (Competence)
- 자신이 충분히 숙련된 일만 수행해야 함.
(능력 밖의 일은 솔직히 인정해야 함)
- 자신이 충분히 숙련된 일만 수행해야 함.
- 지적 재산권 (Intellectual Property Rights)
- 저작권, 특허 등 타인의 소프트웨어 자산을 존중해야 함
- 컴퓨터 오용 (Computer Misuse)
- 해킹, 불법 접근, 시스템 파괴 등을 절대 해서는 안 됨
ACM/IEEE의 윤리 강령
- Aspirations (고결한 목표)
- Details (구체적 실행)
이 둘의 조화로 공허하지 않고 실천 가능한 윤리기준을 세움
소프트웨어 엔지니어는
분석, 설계, 구현, 테스트, 유지보수의 모든 활동에서 사회에 이롭게 행동해야 하며,
공공의 건강·안전·복지에 책임을 진다.
8가지 윤리 원칙
- 공공 (Public)
: 대중의 이익에 부합하게 행동할 것 - 고객과 고용주 (Client & Employer)
: 고객/고용주의 이익을 공공의 이익과 조화롭게 추구할 것 - 제품 (Product)
: 최고 수준의 품질과 기준을 충족할 것 - 판단 (Judgment)
: 독립적이고 정직한 판단 유지 - 관리 (Management)
: 윤리적 프로젝트 관리 추진 - 직업 (Profession)
: 소프트웨어 공학 분야의 명성과 진실성을 높이기 - 동료 (Colleagues)
: 공정하고 협력적인 태도로 동료 대하기 - 자기 자신 (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 |