컴퓨터 프로그램 및 관련 문서입니다. 소프트웨어 제품은 특정 고객을 위해 개발될 수도 있고 일반 시장을 위해 개발될 수도 있습니다.
Generic products
일반 제품의 경우, 소프트웨어 개발자가 소유하고 소프트웨어가 어떻게 동작해야 하는지에 대한 명세를 결정하며, 소프트웨어 변경에 대한 결정을 개발자가 내립니다.
Customized products
맞춤형 제품의 경우, 소프트웨어를 위한 명세는 해당 소프트웨어의 고객이 소유하며, 필요한 소프트웨어 변경에 대한 결정을 고객이 내립니다.
좋은 소프트웨어는 사용자에게 필요한 기능(functionality)과 성능(performance)을 제공해야 하며 유지보수 가능(maintainable)하고 신뢰(dependable)할 수 있으며 사용하기(usable) 쉬워야 합니다.
Maintainability
소프트웨어는 고객의 변화하는 요구를 충족하기 위해 진화할 수 있는 방식으로 작성되어야 합니다. 이는 비즈니스 환경이 변화함에 따라 소프트웨어 변경이 필수적이기 때문에 중요한 특성입니다.
Dependabillity & security
소프트웨어의 신뢰성은 신뢰성, 보안 및 안전성을 포함한 다양한 특성을 포함합니다. 신뢰할 수 있는 소프트웨어는 시스템 장애 발생 시 물리적이거나 경제적 피해를 입히지 않아야 합니다. 악의적인 사용자가 시스템에 접근하거나 피해를 줄 수 없어야 합니다.
Efficiency
소프트웨어는 메모리 및 프로세서 사이클과 같은 시스템 자원을 낭비하지 않아야 합니다. 따라서 효율성에는 반응성, 처리 시간, 메모리 사용 등이 포함됩니다.
Acceptablility
소프트웨어는 설계된 사용자 유형에게 수용 가능해야 합니다. 즉, 이해하기 쉬워야하며 사용하기 쉬워야하며 사용하는 다른 시스템과 호환되어야합니다.
소프트웨어 공학은 소프트웨어 제작의 모든 측면에 관련된 공학 분야입니다.
소프트웨어 공학은 시스템 명세 초기 단계부터 시스템이 사용된 후 유지보수 단계까지 소프트웨어 생산의 모든 측면에 관심을 갖는 공학 분야입니다.
Engineering discipline
조직적 및 재정적 제약 사항을 고려하여 문제를 해결하기 위해 적절한 이론과 방법을 사용합니다.
All aspects of software production
개발의 기술적 과정 뿐만 아니라 프로젝트 관리 및 소프트웨어 생산을 지원하는 도구, 방법 등의 개발에도 관심이 있습니다.
소프트웨어 공학의 중요성은 점차적으로 증가하고 있습니다. 개인 및 사회는 고급 소프트웨어 시스템에 점점 더 의존하고 있습니다. 우리는 경제적으로 신뢰할 수 있고 신속하게 안정적인 시스템을 생산할 수 있어야 합니다.
대부분의 경우, 소프트웨어 시스템에 대해 소프트웨어 공학의 방법과 기술을 사용하는 것이 단순히 개인적인 프로그래밍 프로젝트처럼 프로그램을 작성하는 것보다 장기적으로 더 경제적입니다. 대부분의 시스템 유형에 대해, 소프트웨어를 사용한 후에 발생하는 변경 비용이 대부분의 비용을 차지합니다.
소프트웨어 명세(software spcification), 소프트웨어 개발(software development), 소프트웨어 검증(software validation) 및 소프트웨어 진화(software evolution).
소프트웨어 명세
고객과 엔지니어가 생산될 소프트웨어와 그 운영에 대한 제약을 정의합니다.
소프트웨어 개발
소프트웨어를 설계하고 프로그래밍합니다.
소프트웨어 검증
고객이 요구한 대로 소프트웨어가 되었는지 확인하기 위해 소프트웨어를 확인합니다.
소프트웨어 진화
고객 및 시장 요구 사항이 변경되는 것을 반영하기 위해 소프트웨어를 수정합니다.
컴퓨터 과학은 이론과 기초에 중점을 두며, 소프트웨어 공학은 유용한 소프트웨어를 개발하고 제공하는 실용적인 측면에 관심이 있습니다.
Heterogeneity (다양성)
점점 더 많은 시스템이 다양한 유형의 컴퓨터 및 모바일 장치를 포함한 네트워크를 통해 분산 시스템으로 작동해야 합니다.
Business and social change
신흥 국가가 발전하고 새로운 기술이 사용 가능해지면서 비즈니스와 사회는 빠르게 변화하고 있습니다. 기존 소프트웨어를 변경하고 새로운 소프트웨어를 신속하게 개발할 수 있어야 합니다.
Security & trust
소프트웨어가 우리 생활의 모든 측면과 깊이 연관되어 있기 때문에, 소프트웨어를 신뢰할 수 있는 것이 중요합니다.
Scale
소프트웨어는 휴대용이나 착용 가능한 장치의 매우 작은 임베디드 시스템부터 글로벌 커뮤니티를 대상으로 하는 인터넷 규모의 클라우드 기반 시스템까지 매우 다양한 규모로 개발되어야 합니다.
시스템 공학은 하드웨어, 소프트웨어 및 프로세스 공학을 포함한 컴퓨터 기반 시스템 개발의 모든 측면에 관심이 있습니다. 소프트웨어 공학은 이보다 일반적인 과정의 일부입니다.
다양성 증가에 대응하고, 납기 단축 요구를 해결하며, 신뢰할 수 있는 소프트웨어 개발하는 것입니다.
대략적으로 소프트웨어 비용의 60%는 개발 비용이며, 40%는 테스트 비용입니다. 맞춤형 소프트웨어의 경우, 진화 비용이 종종 개발 비용을 초과합니다.
모든 소프트웨어 프로젝트는 전문적으로 관리되고 개발되어야 하지만, 서로 다른 기술이 서로 다른 유형의 시스템에 적합합니다. 예를 들어, 게임은 항상 프로토타입 시리즈를 사용하여 개발되어야 하며, 안전 중요 제어 시스템은 완전하고 분석 가능한 명세서가 개발되어야 합니다. 따라서 한 방법이 다른 방법보다 우수하다고 말할 수 없습니다.
다양한 유형의 소프트웨어 시스템이 존재하며, 이들에 모두 적용 가능한 보편적인 소프트웨어 기술 집합은 없습니다.
사용되는 소프트웨어 공학 방법과 도구는 개발되는 응용 프로그램의 유형, 고객의 요구 사항 및 개발 팀의 배경에 따라 다릅니다.
Batch processing systems(일괄 처리 시스템)
대량의 데이터를 처리하기 위해 설계된 비즈니스 시스템으로, 대량의 개별 입력을 처리하여 해당하는 출력을 생성합니다.
Entertainment systems
주로 개인용으로 사용되며 사용자를 즐겁게 하는 것을 목적으로 하는 시스템입니다.
Systems for modeling and simulation
과학자 및 엔지니어가 물리적인 과정이나 상황을 모델링하기 위해 개발한 시스템으로, 많은 개별 및 상호 작용하는 객체를 포함합니다.
Data collection systems
일련의 센서를 사용하여 환경으로부터 데이터를 수집하고, 해당 데이터를 처리하기 위해 다른 시스템으로 전송하는 시스템입니다.
Systems of systems
여러 다른 소프트웨어 시스템으로 구성된 시스템입니다.
웹은 소프트웨어 서비스의 가용성과 고도로 분산된 서비스 기반 시스템의 개발 가능성을 가져왔습니다. 웹 기반 시스템 개발은 프로그래밍 언어와 소프트웨어 재사용에 중요한 발전을 가져왔습니다.
인터넷은 이제 응용 프로그램을 실행하는 플랫폼이며, 기업은 지역 시스템이 아닌 웹 기반 시스템을 점점 더 개발하고 있습니다.
웹 서비스는 웹을 통해 응용 프로그램 기능에 액세스할 수 있도록 합니다.
웹 기반 시스템은 복잡한 분산 시스템이지만, 이전에 논의한 소프트웨어 엔지니어링의 기본 원칙은 다른 유형의 시스템에 적용되는 것과 마찬가지로 그들에게도 적용됩니다.
소프트웨어 엔지니어링의 기본 아이디어는 웹 기반 소프트웨어에 다른 유형의 소프트웨어 시스템에 적용되는 것과 마찬가지로 적용됩니다.
Service-oriented systems
소프트웨어는 서비스 지향 소프트웨어 공학을 사용하여 구현될 수 있으며, 여기서 소프트웨어 구성 요소는 독립적인 웹 서비스입니다.
Rich interfaces
Angular, React, AJAX 및 HTML5와 같은 인터페이스 개발 기술이 등장하여 웹 브라우저 내에서 풍부한 인터페이스를 생성하는 데 도움을 줍니다.
소프트웨어 공학 윤리와 전문 실천에 관한 ACM/IEEE-CS 합동 소프트웨어 공학 윤리 및 전문 실천 태스크 포스
서문
이 코드의 짧은 버전은 추상화 수준에서의 목표를 요약하며, 전체 버전에 포함된 조항들은 이러한 목표가 소프트웨어 공학 전문가로서 우리의 행동 방식을 어떻게 변화시키는지에 대한 예와 세부 정보를 제공합니다. 목표 없이는 세부 사항이 법적이고 지루해질 수 있으며, 세부 사항 없이는 목표가 고급스럽지만 빈틈없게 될 수 있습니다. 목표와 세부 사항이 함께하면, 이는 일관된 코드를 형성합니다.
소프트웨어 엔지니어들은 소프트웨어의 분석, 명세, 설계, 개발, 테스트 및 유지 보수를 유익하고 존경받는 직업으로 만들기 위해 헌신할 것입니다. 대중의 건강, 안전 및 복지를 존중하기 위해 소프트웨어 엔지니어들은 다음의 여덟 가지 원칙을 준수할 것입니다:
PUBLIC(대중) - 소프트웨어 엔지니어는 대중의 이익과 일관된 방식으로 행동해야 합니다.
CLIENT AND EMPLOYER(고객 및 고용주) - 소프트웨어 엔지니어는 대중의 이익과 일관된 방식으로 고객과 고용주의 최선의 이익을 고려하여 행동해야 합니다.
PRODUCT(제품) - 소프트웨어 엔지니어는 자신의 제품과 관련된 수정 사항이 최고의 전문 기준을 준수하도록 보장해야 합니다.
JUDGMENT(판단) - 소프트웨어 엔지니어는 전문적인 판단력을 유지하고 독립성을 유지해야 합니다.
MANAGEMENT(관리) - 소프트웨어 공학 관리자와 리더는 소프트웨어 개발 및 유지 관리의 윤리적 접근을 지지하고 홍보해야 합니다.
PROFESSION(직업) - 소프트웨어 엔지니어는 대중의 이익과 일관된 방식으로 직업의 무결성과 명성을 증진해야 합니다.
COLLEAGUES(동료) - 소프트웨어 엔지니어는 동료에게 공정하고 지원적이어야 합니다.
SELF(자아) - 소프트웨어 엔지니어는 자신의 직업 실천에 대한 평생 학습에 참여하고 직업의 윤리적 접근을 촉진해야 합니다.
귀하의 고용주가 윤리적으로 부적절하게 행동하고 시스템의 테스트를 완료하지 않은 채 안전 중요 시스템을 출시
이 상황은 소프트웨어 엔지니어에게 고민을 야기합니다. 시스템이 안전성이나 신뢰성에 결함이 있을 수 있으며, 이로 인해 사용자들에게 피해를 줄 수 있습니다
군사 무기 시스템이나 핵 시스템의 개발에 참여
이러한 시스템은 전쟁이나 대규모 파괴력을 가지고 있을 수 있어서, 이에 참여함으로써 엔지니어는 인류의 안전과 안정성에 직접적으로 영향을 미칠 수 있습니다.
즉, 이런 상황에서 소프트웨어 엔지니어는 종종 고민하고, 개인적인 윤리와 조직의 요구 사항 간의 균형을 찾아야 할 수 있습니다.
소프트웨어 공학은 소프트웨어 제작의 모든 측면에 관심을 가지는 공학 분야입니다.
소프트웨어 제품의 필수 속성은 유지보수성, 신뢰성 및 보안, 효율성 및 수용성입니다.
명세, 개발, 검증 및 진화라는 고수준 활동은 모든 소프트웨어 공학 과정의 일부입니다.
소프트웨어 공학의 기본 개념은 모든 종류의 시스템 개발에 보편적으로 적용됩니다.
다양한 유형의 시스템이 있으며, 각각은 해당 시스템을 개발하기 위한 적절한 소프트웨어 공학 도구와 기술이 필요합니다.
소프트웨어 공학의 기본 아이디어는 모든 종류의 소프트웨어 시스템에 적용됩니다.
소프트웨어 엔지니어는 공학 전문가와 사회에 책임을 가지고 있습니다. 그들은 단순히 기술적 문제에 관심을 가질 뿐만 아니라 해야 합니다.
전문 기관은 회원들에게 기대되는 행동 기준을 제시하는 윤리 규범을 발표합니다.