소프트웨어 공학/Theorem 12

[소프트웨어 공학] 13. Software Reuse

Software reuse대부분의 공학 분야에서 시스템은 다른 시스템에서 사용된 기존 구성 요소를 조합하여 설계됩니다.소프트웨어 공학은 원래 개발에 더 집중했지만, 이제는 더 나은 소프트웨어를 더 빠르게, 더 저렴하게 달성하기 위해 체계적인 소프트웨어 재사용(systematic software reuse)에 기반한 설계 프로세스가 필요하다는 것을 인식하게 되었습니다.과거에는 커스텀 소프트웨어를 만들었지만, 현재 에자일 환경에서는 온라인 서비스 환경속에서 소프트웨어 재사용이 중요하게 되었다.지난 10년 동안 재사용 기반 개발로의 큰 전환이 있었고, 변화는 계속 진행 중입니다.(교수님이 캡디할 때 Reuse 해서 좋은 작품을 만드는게 좋다고 합니다)Reuse-based software engineeringS..

[소프트웨어 공학] 12. Safety Engineering

Safety안전(Safety)은 시스템이 정상적이든 비정상적이든 작동하면서 인간에게 상해나 사망을 초래하지 않고 시스템 환경에 손상을 주지 않는(the system's ability to operate without danger of causing human injury or death and witout damage to the system's environment) 시스템의 능력을 반영하는 속성입니다.소프트웨어 안전(software safety)을 고려하는 것이 중요합니다. 왜냐하면, 대부분의 장치들이 소프트웨어 기반 제어 시스템을 통합하고 있기 때문입니다.Software in safety-critical systems시스템은 소프트웨어로 제어되어, 소프트웨어의 결정과 그에 따른 행동이 안전에 중요한..

[소프트웨어 공학] 11. Reliability Engineering

Software reliability일반적으로, 소프트웨어 고객은 모든 소프트웨어가 신뢰할 수 있기를 기대합니다.그러나, 비중요 응용 프로그램의 경우, 일부 시스템 실패를 수용할 수도 있습니다.일부 응용 프로그램(중요 시스템)은 매우 높은 신뢰성 요구 사항을 가지며, 이를 달성하기 위해 특별한 소프트웨어 공학 기술이 사용될 수 있습니다.의료 시스템통신 및 전력 시스템항공우주 시스템Faults, errors and failures용어설명Human mistake시스템에 결함을 도입하게 되는 인간 행동System fault시스템 오류로 이어질 수 있는 소프트웨어 시스템의 특성System error시스템 사용자가 예상하지 못한 시스템 상태System failure시스템이 기대한 서비스를 제공하지 못할 때 발생하..

[소프트웨어 공학] 10. Dependable Systems

System Dependability많은 컴퓨터 기반 시스템에서 가장 중요한 시스템 속성은 시스템의 신뢰성(dependability)이다.시스템의 신뢰성은 사용자가 해당 시스템에 대한 신뢰의 정도를 반영한다.(The dependability of a system relfects the user's degree of trust in that system)이는 사용자가 시스템이 사용자가 기대하는 대로 작동(it will operate as users expect)하고, 정상 사용 중에 '실패'하지 않을 것(it will not 'fail' in normal use)이라는 확신의 정도를 반영한다.사용자가 이 시스템을 얼마나 믿을 수 있는가?실패 예시) 과제 마감 2분 전 트래픽이 몰려서 제출하지 못함신뢰성은 ..

[소프트웨어 공학] 09. Software Evolution

Software EvolutionSoftware change (소프트웨어 변경)소프트웨어 변경은 필연적입니다.소프트웨어를 사용할 때 새로운 요구사항(requirements)이 생겨납니다.비즈니스 환경(business environment)이 변합니다;오류(errors)는 수정되어야 합니다;시스템에 새로운 컴퓨터(computers)와 장비(equipment)가 추가됩니다;시스템의 성능(performance) 또는 신뢰성(reliability)이 향상되어야 할 수 있습니다.모든 조직에 있어 기존 소프트웨어 시스템에 대한 변경을 구현하고 관리하는 것이 주요 문제입니다.Importance of evolution (진화의 중요성)조직은 소프트웨어 시스템에 큰 투자를 합니다 - 그것들은 중요한 비즈니스 자산(bus..

[소프트웨어 공학] 08. Software Testing

Software Testing Program Testing(프로그램 테스트)테스팅은 프로그램이 의도한 대로 작동하는지(a program does what it is intended to do), 사용 전에 프로그램 결함을 발견(to discover program defect)하기 위해 수행됩니다.소프트웨어를 테스트할 때, artificial data(인공 데이터)를 사용하여 프로그램을 실행합니다.테스트 결과를 검토하여 오류, 이상 현상 또는 프로그램의 비기능적 속성에 대한 정보를 확인합니다.오류의 존재만을 나타내며(the presence of error), 그 부재를 나타내지는 않습니다.(Not their absence)테스팅은 정적 검증 기법도 포함하는 보다 일반적인 검증 및 확인 과정의 일부입니다.P..

[소프트웨어 공학] 06&07. Architecture Design / Design and Implementation

Architectural design(아키텍쳐 설계)아키텍쳐 설계는 소프트웨어 시스템의 구성을 이해하고,그 시스템의 전체 구조를 설계하는 것과 관련이 있습니다(designing the overall structure of that system).아키텍쳐 설계는 설계와 요구 사항 공학 간의 중요한 연결 고리로서,시스템의 주요 구조적 요소와 그들 간의 관계를 식별합니다.애자일 프로세스의 초기 단계에서 전체 시스템 아키텍쳐를 설계하는 것이 일반적으로 받아들여집니다.시스템 아키텍쳐을 리팩터링하는 것은 일반적으로 비용이 많이 듭니다. 왜냐하면 이것은 시스템의 많은 구성 요소에 영향을 미치기 때문입니다.Architectural abstraction(아키텍쳐 추상화)소규모에서의 아키텍쳐는 개별 프로그램의 아키텍쳐(t..

[소프트웨어 공학] 05. Requirements engineering

Requirements engineering(요구 공학) 고객이 요구하는 서비스를 제공(establishing the services)하고 운영되는 제약 조건(the constraints)을 설정하는 과정입니다. 시스템 요구사항은 요구 공학 과정에서 생성된 시스템 서비스 및 제약 조건의 설명입니다. What is a requirement?(요구사항이란?) 시스템 제약에서 상세한 수학적 기능 사양에 이르기까지 다양할 수 있습니다. 요구사항은 이중 기능을 수행할 수 있으므로 피할 수 없습니다(요구사항이 제공하는 두 가지 기능). 계약 입찰의 기초가 될 수 있으며 해석의 여지가 있어야 합니다(이해할 수 있어야 한다); 계약 자체의 기초가 될 수 있으며 상세하게 정의되어야 합니다; 이 두 명제 모두 요구사항이라..

[소프트웨어 공학] 04. Quality Configuration and Management

Software quality management(소프트웨어 품질 관리) 소프트웨어 제품에서 필요한 품질 수준이 달성되도록 보장하는 데에 중점을 둡니다. 세 가지 주요 관심사: 조직 수준(Organization level) 품질 관리(QM)는 고품질 소프트웨어로 이어질 조직 프로세스 및 표준의 체계(a framework of organizational processes and standards)를 수립하는 데 중점을 둡니다. 프로젝트 수준(Project level) QM은 특정 품질 프로세스(quality processes)의 적용과 이러한 계획된 프로세스가 따라졌는지 확인하는 데 관여합니다. QM은 또한 프로젝트를 위한 품질 계획(quality plan) 수립에도 관심이 있습니다. Quality man..

[소프트웨어 공학] 03. Agile Software Development

Agile Software Development Rapid Software development 빠른 개발과 배포는 이제 소프트웨어 시스템에 대한 가장 중요한 요구 사항 중 하나입니다. 비즈니스는 빠르게 변하는 요구 사항 속에서 운영되며, 안정적인 소프트웨어 요구 사항을 도출하는 것은 실질적으로 불가능합니다. 소프트웨어는 변화하는 비즈니스 요구 사항을 신속하게 반영하기 위해 빠르게 진화해야 합니다. 일부 시스템 유형에 계획 주도 개발이 필수적일 수 있지만, 이는 이러한 비즈니스 요구 사항을 충족시키지 못합니다. 애자일 개발 방법은 1990년대 후반에 등장하여 작동하는 소프트웨어 시스템의 배송 시간을 극적으로 줄이는 것을 목표로 했습니다. Agile Development 프로그램 명세, 설계, 구현 및 테..