학교
L02-Introductuction to Software Engineering (2)
10가지 소프트웨어 공학 관련 질문 (7')
https://www.youtube.com/watch?v=gi5kxGslkNc
10가지 소프트웨어 공학에 대한 FAQ
질문 | 답변 |
1. 소프트웨어란 무엇인가? | 컴퓨터 프로그램과 관련 문서. 소프트웨어 제품은 특정 고객을 위해 개발될 수도 있고 일반 시장을 위해 개발될 수도 있다. |
2. 좋은 소프트웨어의 속성은 무엇인가? | 좋은 소프트웨어는 사용자에게 필요한 기능과 성능을 제공해야 하며, 유지 관리 가능하고 신뢰할 수 있으며 사용하기 쉬워야 한다. |
3. 소프트웨어 공학이란 무엇인가? | 소프트웨어 공학은 소프트웨어 생산의 모든 측면에 관한 엔지니어링 분야이다. |
소프트웨어 제품
1. 일반 제품 (Generic pdoructs)
- 마케팅되고 판매되는 독립 시스템(stand-alone systems)으로, 구매를 원하는 모든 고객에게 제공된다.
- 예시 – 그래픽 프로그램, 프로젝트 관리 도구, CAD 소프트웨어, 치과의사를 위한 예약 시스템과 같은 특정 시장을 위한 소프트웨어.
- Github, KakaoTalk, Chrome, Zoom
2. 맞춤형 제품 (Cutomized products)
- 특정 고객의 필요를 충족하기 위해 의뢰받은(is commissioned) 소프트웨어이다.
- 예시 – 임베디드 제어 시스템, 항공 교통 관제 소프트웨어, 교통 모니터링 시스템.
- CCTV 관리 소프트웨어, 대학 학사 행정 시스템, 병원 전자의무기록(EMR) 시스템, Hisnet
3. LMS는 두 개 모두 충족한다고 볼 수 있다.
제품 사양 (Product specification)
1. 일반 제품
- 소프트웨어가 수행해야 할 작업의 사양은 소프트웨어 개발자가 소유하며, 소프트웨어 변경에 대한 결정은 개발자가 한다.
2. 맞춤형 제품
- 소프트웨어가 수행해야 할 작업의 사양은 소프트웨어의 고객이 소유하며, 그들이 필요한 소프트웨어 변경에 대한 결정을 한다.
10가지 소프트웨어 공학에 대한 FAQ
질문 | 답변 |
1. 소프트웨어란 무엇인가? | 컴퓨터 프로그램과 관련 문서. 소프트웨어 제품은 특정 고객을 위해 개발될 수도 있고 일반 시장을 위해 개발될 수도 있다. |
2. 좋은 소프트웨어의 속성은 무엇인가? | 좋은 소프트웨어는 사용자에게 필요한 기능(functionality)과 성능을 제공(Deliver)해야 하며, 유지 관리 가능(maintainable)하고 신뢰할 수 있으며(dependable) 사용하기 쉬워야 한다. |
3. 소프트웨어 공학이란 무엇인가? | 소프트웨어 공학은 소프트웨어 생산의 모든 측면에 관한 엔지니어링 분야이다. |
좋은 소프트웨어의 필수 속성 (Essential attributes of good software)
제품 특성 | 설명 |
유지 관리성(Maintainability) | 소프트웨어는 고객의 변화하는 요구를 충족할 수 있도록 작성되어야 한다. 이는 변화하는 비즈니스 환경에서 소프트웨어 변경이 불가피한 요구사항이기 때문에 중요한 속성이다. |
신뢰성과 보안(Dependability and Security) | 소프트웨어의 신뢰성은 신뢰성(reliability), 보안(security) 및 안전성(safety)을 포함한 다양한 특성을 포함한다. 신뢰할 수 있는 소프트웨어는 시스템 실패 시 물리적 또는 경제적 피해를 일으키지 않아야 한다. 악의적인(Malicious) 사용자는 시스템에 접근하거나 시스템을 손상시킬 수 없어야 한다. |
효율성(Efficiency) | 소프트웨어는 메모리 및 프로세서 사이클과 같은 시스템 자원을 낭비하지 않아야 한다. 따라서 효율성은 반응성(responsiveness), 처리 시간, 메모리 활용(memory utilisation) 등을 포함한다. |
수용성(Acceptability) | 소프트웨어는 설계된 사용자 유형에게 수용 가능해야 한다. 이는 소프트웨어가 이해 가능하고(understandable) 사용하기 쉬우며 그들이 사용하는 다른 시스템과 호환되어야 함(compatible)을 의미한다. |
10가지 소프트웨어 공학에 대한 FAQ
질문 | 답변 |
1. 소프트웨어란 무엇인가? | 컴퓨터 프로그램과 관련 문서. 소프트웨어 제품은 특정 고객을 위해 개발될 수도 있고 일반 시장을 위해 개발될 수도 있다. |
2. 좋은 소프트웨어의 속성은 무엇인가? | 좋은 소프트웨어는 사용자에게 필요한 기능과 성능을 제공해야 하며, 유지 관리 가능하고 신뢰할 수 있으며 사용하기 쉬워야 한다. |
3. 소프트웨어 공학이란 무엇인가? | 소프트웨어 공학은 소프트웨어 생산의 모든 측면에 관한(is concerned) 엔지니어링 분야(engineering discipline)이다. |
소프트웨어 공학 (Software engineering)
- 소프트웨어 공학은 시스템 사양의 초기 단계부터 시스템이 사용된 후 유지 관리에 이르기까지 소프트웨어 생산의 모든 측면에 관한 엔지니어링 분야이다.
- 엔지니어링 분야(Engineering discipline)
: 조직적 및 재정적 제약을 염두에 두고(bearing in mind) 문제를 해결하기 위해 적절한(appropriate) 이론(theories)과 방법(methods)을 사용하는 것이다.
- 소프트웨어 생산의 모든 측면 (All aspects of sofrware production)
: 단순히 개발의 기술적 과정이 아니다. 또한 프로젝트 관리 및 소프트웨어 생산을 지원하기 위한 도구, 방법 등을 개발하는 것도 포함된다.
소프트웨어 공학의 중요성 (Importance of sofware engineering)
- 개인(individuals)과 사회는 점점 더 고급(advanced) 소프트웨어 시스템에 의존하고 있다(rely on). 우리는 신뢰할 수 있고 믿을 수 있는 시스템을 경제적으로 그리고 신속하게 생산할 수 있어야 한다.
- 일반적으로 소프트웨어 시스템에 소프트웨어 공학 방법 및 기술을 사용하는 것이 개인 프로그래밍 프로젝트처럼 프로그램을 단순히 작성하는 것보다 장기적으로 더 저렴하다. 대부분의 유형의 시스템에서, 비용의 대부분은 소프트웨어가 사용된 후 변경하는 비용이다.
10가지 소프트웨어 공학에 대한 FAQ
질문 | 답변 |
4. 소프트웨어 공학의 기본(fundamental) 활동은 무엇인가? | 소프트웨어 사양(specification), 소프트웨어 개발(development), 소프트웨어 검증(validation) 및 소프트웨어 진화(evolution)이다. |
5. 소프트웨어 공학과 컴퓨터 과학의 차이는 무엇인가? | 컴퓨터 과학은 이론과 기본에 중점을 두며, 소프트웨어 공학은 유용한 소프트웨어를 개발하고 제공하는 실용적인 측면에 중점을 둔다. |
소프트웨어 프로세스 활동
- 소프트웨어 사양(specification) : 고객과 엔지니어가 생산될 소프트웨어와 그 작동(operation)에 대한 제약을 정의하는 단계이다.
- 소프트웨어 개발(development) : 소프트웨어가 설계되고 프로그래밍되는 단계이다.
- 소프트웨어 검증(validation) : 소프트웨어가 고객의 요구 사항을 충족하는지(to ensure) 확인하는 단계이다.
- 소프트웨어 진화(evolution) : 소프트웨어가 변화하는 고객과 시장 요구를 반영하도록(to reflect) 수정되는 단계이다.
10가지 소프트웨어 공학에 대한 FAQ
질문 | 답변 |
4. 소프트웨어 공학의 기본 활동은 무엇인가? | 소프트웨어 사양, 소프트웨어 개발, 소프트웨어 검증 및 소프트웨어 진화이다. |
5. 소프트웨어 공학과 컴퓨터 과학의 차이는 무엇인가? | 컴퓨터 과학은 이론과 기본에 중점을 두며, 소프트웨어 공학은 유용한 소프트웨어를 개발하고 제공하는 실용적인 측면에 중점을 둔다(is concerned). |
소프트웨어에 영향을 미치는 일반적인 문제
- 이질성(Heteogeneity)
: 시스템은 점점 더(Increasignly) 다양한 유형의 컴퓨터 및 모바일 장치를 포함하는 네트워크에서 분산 시스템으로 작동해야 한다.(to operated)
- 애플은 폐쇄적인 생태계를 기반으로 기기간 호환성을 유지하는 반면, 플러터는 이질적인 환경을 고려하여 다양한 플랫폼을 지원하는 접근 방식을 따른다.
- 비즈니스 및 사회 변화(Business and social change)
: 비즈니스와 사회는 신흥 경제국의 발전과 새로운 기술의 가용성에 따라 매우 빠르게 변화하고 있다. 기존 소프트웨어를 변경하고 새로운 소프트웨어를 신속하게 개발할 수 있어야 한다.
- LMS(Learning Management System): COVID-19 팬데믹으로 인해 온라인 교육이 급격히 확산되면서, 기존 오프라인 중심의 교육 환경이 LMS 기반의 원격 학습 환경으로 빠르게 전환되었다. 이에 따라 많은 교육 기관이 기존 LMS 시스템을 확장하거나 새로운 기능(예: 실시간 강의, 자동 채점, AI 기반 맞춤 학습 추천)을 추가하여 변화하는 교육 환경에 대응해야 했다.
- 보안과 신뢰(Security and trust)
: 소프트웨어가 우리의 삶의 모든 측면과 얽혀 있으므로(is intertwined), 우리는 소프트웨어를 신뢰할 수 있어야 한다.
- 규모 (Scale)
: 소프트웨어는 포터블 또는 웨어러블 장치의 매우 작은 임베디드 시스템부터 전 세계 커뮤니티에 서비스를 제공하는 인터넷 규모의 클라우드 기반 시스템에 이르기까지 매우 넓은 범위의 규모에서 개발되어야 한다.
10가지 소프트웨어 공학에 대한 FAQ
질문 | 답변 |
6. 소프트웨어 공학과 시스템 공학의 차이는 무엇인가? | 시스템 공학은 하드웨어, 소프트웨어 및 프로세스 공학을 포함한 컴퓨터 기반 시스템 개발의 모든 측면에 관한 것이다. 소프트웨어 공학은 이보다 더 일반적인 과정의 일부이다. |
7. 소프트웨어 공학이 직면한 주요 도전 과제는 무엇인가? | 증가하는 다양성(diversity)에 대응하고(Coping), 단축된 납기 요구를 처리하며(demands), 신뢰할 수 있는 소프트웨어를 개발하는 것이다. |
질문 | 답변 |
8. 소프트웨어 공학의 비용은 얼마인가? | 대략 소프트웨어 비용의 60%는 개발 비용이고, 40%는 테스트 비용이다. 맞춤형 소프트웨어의 경우, 진화 비용이 종종 개발 비용을 초과한다. |
9. 최고의 소프트웨어 공학 기법과 방법은 무엇인가? | 모든 소프트웨어 프로젝트는 전문적으로 관리되고 개발되어야 하지만, 시스템의 유형에 따라 적합한(appropriate) 기법이 다르다. 예를 들어, 게임은 항상 일련의 프로토타입을 사용하여 개발되어야 하며, 안전-critical 제어 시스템은 완전하고 분석 가능한 사양(specification)이 개발되어야 한다. 따라서 한 방법이 다른 방법보다 낫다고 말할 수는 없다. |
10. 웹이 소프트웨어 공학에 미친 영향은 무엇인가? | 웹은 소프트웨어 서비스의 가용성과 고도로 분산된 서비스 기반 시스템 개발 가능성을 가져왔다. 웹 기반 시스템 개발은 프로그래밍 언어 및 소프트웨어 재사용에 중요한 발전을 가져왔다 |
소프트웨어 공학의 다양성
- 다양한 유형의 소프트웨어 시스템이 존재하며, 모든 유형에 적용될 수 있는(applicable) 보편적인(universal) 소프트웨어 기법은 없다.
- 사용되는 소프트웨어 공학 방법 및 도구는 개발되는 응용 프로그램의 유형, 고객의 요구 사항 및 개발 팀의 배경에 따라 다르다.
응용 프로그램 유형 (Application types)
1. 배치 처리 시스템 (Batch processing systems)
: 대량의 데이터(data in large batches)를 처리하도록 설계된 비즈니스 시스템으로, 많은 개별(individual) 입력을 처리하여 해당 출력 결과(conrresponding outputs)를 생성한다.
2. 엔터테인먼트 시스템 (Entertainment systems)
: 개인 사용(primarily fr perosonal use)을 위한 시스템으로, 사용자를 즐겁게 하도록 설계된다(intended).
3. 모델링 및 시뮬레이션 시스템 (Systems for modeling and simulation)
: 과학자와 엔지니어가 물리적 과정이나 상황을 모델링하기 위해 개발한 시스템으로, 많은/ 개별 / 객체가 상호 작용한다.
4. 데이터 수집 시스템 (Data collection systems)
: 센서를 사용하여 환경에서 데이터를 수집하고, 그 데이터를 처리하기 위해 다른 시스템으로 전송하는 시스템이다.
5. 시스템의 시스템 (Systesm of systems)
: 여러 다른 소프트웨어 시스템으로 구성된 시스템이다.
소프트웨어 공학의 기본 원칙 (Software engineering fundamentals)
: 모든 유형의 소프트웨어 시스템에 적용되는 몇 가지 기본 원칙이 있다. 개발 기법과 관계없이:
- 시스템은 관리되고 이해된 개발 프로세스를 사용하여 개발되어야 한다. 물론, 소프트웨어 유형에 따라 서로 다른 프로세스가 사용된다.
- 신뢰성(Dependability)과 성능은 모든 유형의 시스템에서 중요하다.
- 소프트웨어 사양(specifiation) 및 요구 사항(소프트웨어가 수행해야 할 작업)을 이해하고 관리하는 것이 중요하다.
- 적절한 경우(Where appropriate), 새로운 소프트웨어를 작성하기보다 이미 개발된 소프트웨어를 재사용해야 한다.
10가지 소프트웨어 공학에 대한 FAQ
질문 | 답변 |
8. 소프트웨어 공학의 비용은 얼마인가? | 대략 소프트웨어 비용의 60%는 개발 비용이고, 40%는 테스트 비용이다. 맞춤형 소프트웨어의 경우, 진화 비용이 종종 개발 비용을 초과한다. |
9. 최고의 소프트웨어 공학 기법과 방법은 무엇인가? | 모든 소프트웨어 프로젝트는 전문적으로 관리되고 개발되어야 하지만, 시스템의 유형에 따라 적합한 기법이 다르다. 예를 들어, 게임은 항상 일련의 프로토타입을 사용하여 개발되어야 하며, 안전-critical 제어 시스템은 완전하고 분석 가능한 사양이 개발되어야 한다. 따라서 한 방법이 다른 방법보다 낫다고 말할 수는 없다. |
10. 웹이 소프트웨어 공학에 미친 영향은 무엇인가? | 웹은 소프트웨어 서비스의 가용성(availability)과 고도로 분산된 서비스 기반 시스템 개발 가능성(availability)을 가져왔다. 웹 기반 시스템 개발은 프로그래밍 언어 및 소프트웨어 재사용에 중요한 발전을 가져왔다 |
인터넷/웹 소프트웨어 공학
- 웹은 이제 애플리케이션 실행 플랫폼이 되어 조직들이 점점 더 로컬 시스템보다 웹 기반 시스템을 개발하고 있다.
- 웹 서비스는 애플리케이션 기능을 웹을 통해 접근할 수 있게 한다.
- 클라우드 컴퓨팅은 애플리케이션이 원격으로(remotely) '클라우드'에서 실행되는 컴퓨터 서비스 제공 접근 방식(approach to the provision)이다.
- 사용자는 소프트웨어를 구매하지 않고 사용량에 따라 비용을 지불한다.
- 웹 기반 시스템은 복잡한 분산 시스템이지만, 이전에 논의된 소프트웨어 공학의 기본 원칙은 다른 유형의 시스템과 마찬가지로 적용된다.
- 소프트웨어 엔지니어링의 기본 개념은 다른 유형의 소프트웨어 시스템에 적용되는 것과 동일한 방식으로 웹 기반 소프트웨어에도 적용된다.
- 소프트웨어 재사용: 소프트웨어 재사용은 웹 기반 시스템 구축의 지배적인(dominant) 접근 방식이다. 이러한 시스템을 구축할 때는 기존 소프트웨어 구성 요소 및 시스템을 조립할(assemble) 방법을 생각해야 한다.
- 점진적(Incremental) 및 민첩한(agile) 개발: 웹 기반 시스템은 점진적으로 개발되고 제공되어야 한다. 이러한 시스템의 모든 요구 사항을 사전에 지정하는 것은 비현실적(Impractical)이라는 것이 일반적으로 인식되고 있다(recognized).
- 서비스 지향 시스템 (Service-oriented systems)
: 소프트웨어 구성 요소가 독립형 웹 서비스인 서비스 지향 소프트웨어 엔지니어링을 사용하여 소프트웨어를 구현할 수 있습니다.
- 풍부한 인터페이스 (Rich interfaces)
: 웹 브라우저 내에서 풍부한 인터페이스를 생성할 수 있도록 지원하는 Angular, React, AJAX, HTML5와 같은 인터페이스 개발 기술이 등장했습니다.
웹 소프트웨어 공학
- 서비스 지향 시스템: 소프트웨어는 독립적인 웹 서비스로 구성된 서비스 지향 소프트웨어 공학을 사용하여 구현될 수 있다.
- 풍부한 인터페이스: Angular, React, AJAX, HTML5와 같은 인터페이스 개발 기술이 등장하여 웹 브라우저 내에서 풍부한 인터페이스를 생성할 수 있도록 지원한다.
목차
- 전문 소프트웨어 개발
- 소프트웨어 공학 윤리(ethics)
소프트웨어 엔지니어로서의 책임은?
전문 책임 문제
- 기밀성 (Confidentiality)
- 능력 (Competence)
- 지적 재산권 (Intellectual property rights)
- 컴퓨터 남용 (Computer misuse)
ACM/IEEE 윤리 강령
- 소프트웨어 공학 윤리 및 전문 관행 강령
- ACM/IEEE-CS 공동 작업 그룹의 소프트웨어 공학 윤리 및 전문 관행
- 서문: 이 강령의 짧은 버전은 높은 수준의 추상화에서의 열망을 요약하고 있으며, 전체 버전의 조항은 이러한 열망이 소프트웨어 공학 전문가로서 우리가 행동하는 방식을 어떻게 변화시키는지를 설명하는 예시와 세부 사항을 제공한다. 열망 없이는 세부 사항이 법적이고 지루해질 수 있으며, 세부 사항 없이는 열망이 고상하지만 공허하게 될 수 있다. 따라서 열망과 세부 사항이 함께 결합되어 응집력 있는 강령을 형성한다.
: 소프트웨어 엔지니어는 소프트웨어의 분석, 사양, 설계, 개발, 테스트 및 유지 관리가 유익하고 존중받는 직업이 되도록 하는 데 전념해야 한다. 공공의 건강, 안전 및 복지에 대한 그들의 약속에 따라 소프트웨어 엔지니어는 다음 여덟 가지 원칙을 준수해야 한다.
윤리적 원칙
1. PUBLIC - 소프트웨어 엔지니어는 공공의 이익에 부합하는 방식으로 행동해야 한다.
2. CLIENT AND EMPLOYER - 소프트웨어 엔지니어는 공공의 이익과 일치하는 방식으로 고객 및 고용주에게 가장 이익이 되는 방식으로 행동해야 한다.
3. PRODUCT - 소프트웨어 엔지니어는 제품 및 관련 수정 사항이 가능한 한 높은 전문 표준을 충족하도록 해야 한다.
4. JUDGMENT - 소프트웨어 엔지니어는 전문적인 판단에서 정직성과 독립성을 유지해야 한다.
5. MANAGEMENT - 소프트웨어 공학 관리자와 리더는 소프트웨어 개발 및 유지 관리의 윤리적 접근 방식을 구독하고 이를 촉진해야 한다.
6. PROFESSION - 소프트웨어 엔지니어는 공공의 이익에 따라 직업의 무결성과 명성을 증진해야 한다.
7. COLLEAGUES - 소프트웨어 엔지니어는 동료들에게 공정하고 지지해야 한다.
8. SELF - 소프트웨어 엔지니어는 자신의 직업 관행에 대한 평생 학습에 참여하고 직업 관행에 대한 윤리적 접근 방식을 촉진해야 한다.
- 고용주가 비윤리적인 방식으로 행동하고 시스템 테스트를 완료하지 않은 채 안전에 중요한 시스템을 출시하는 경우.
- 군사 무기 시스템 또는 핵 시스템 개발에 참여한 경우.
요약
- 소프트웨어 공학은 소프트웨어 생산의 모든 측면에 관한 공학 분야이다.
- 필수 소프트웨어 제품 속성은 유지 보수성, 신뢰성 및 보안, 효율성 및 수용성이다.
- 사양, 개발, 검증 및 진화의 고수준 활동은 모든 소프트웨어 프로세스의 일부이다.
- 소프트웨어 공학의 기본 개념은 모든 유형의 시스템 개발에 보편적으로 적용 가능하다.
- 다양한 유형의 시스템이 있으며 각각은 개발을 위해 적절한 소프트웨어 공학 도구와 기술이 필요하다.
- 소프트웨어 공학의 기본 개념은 모든 유형의 소프트웨어 시스템에 적용 가능하다.
- 소프트웨어 엔지니어는 공학 전문직 및 사회에 대한 책임이 있으며, 단순히 기술적인 문제에만 관심을 가져서는 안 된다.
- 전문 사회는 회원에게 기대되는 행동 기준을 설정하는 행동 강령을 발표한다.