소프트웨어 공학 18

[소공 시험공부] Software Reuse

Software Reuse를 왜 하나요?더 나은 SW를 빠르고 저렴하게 달성하기 위해서 하는 것.System부터 Application, component, Object and function 까지 모두 가능 Benefits of software reuse (외워야 하나..?)BenefitExplanationAccelerated development시스템을 가능한 한 빨리 시장에 출시하는 것이 전체 개발 비용보다 중요한 경우가 많습니다. 소프트웨어 재사용은 개발 및 검증 시간의 단축(both development and validation time may be reduced)으로 시스템 생산을 가속화할 수 있습니다.Effective use of specialists동일한 작업을 반복해서 수행하는 대신, 응..

[소공 시험공부] Safety Engineering

지금까지 Dependability 중 Availability, Reliability를 다뤘으니 이제 Safety를 다룰 차례이다. Safety란?시스템이 비정상/정상이든 작동하면서 인간에게 상해나 사망을 초래하지 않고, 시스템 환경에 손상을 주지 않는 속성을 말한다availability와 Reliability를 만족한다고 해서 Safety 한게 아니다. 명세와 부합하는지는 관련이 없다. Unsafe 하다는 건 어떤건가요?시스템에서 오랫동안 감지되지 않다가 드물게 결함이 나탈수도 있고, 명세에 오류가 있을수도 있고, 하드웨어 고장일수도, Context-sensitive 명령일수도... 요런 것들이다 중요한 용어 암기하기safety-critical system : 시스템 작동이 항상 안전해야 하는 시스템Ac..

[소공 시험공부] Software Reliability

들어가기 앞서 먼저 용어를 좀 알아보자Human mistake시스템에 결함을 도입하게 되는 인간 행동 System fault시스템 오류로 이어질 수 있는 소프트웨어 시스템의 특성System error시스템 사용자가 예상하지 못한 시스템 상태System failure시스템이 기대한 서비스를 제공하지 못할 때 발생하는 이벤트 System fault (버그가 존재함) -> Human mistake(버그를 발생시킴) -> System error(예상치 못한 결과가 나타남) -> System failure(Crash report 같은 결과 등장. system error의 결과) fault가 반드시 error를 발생시키는 것은 아니고(오류 발생 전에 수정하거나 아에 오류 있는 코드가 실행 안될수도), error가 ..

[소공 시험공부] System Dependability

내가 이 시스템을 사용하는 입장이라고 봤을 때 이 System에서 가장 중요한 건 바로 Dependability다.  신뢰할 수 없는 시스템을 사용자가 애초에 거부할수도 있고, 경제적 손실로 이어질 수도 있고, 신체적 손상 등등 발생할 수 있는 문제가 많다. 어떤 것들이 Dependability 에 해당하죠?가용성(Availability): 요청 시 서비스를 제공할 수 있는 시스템의 능력원할 때 시스템을 사용할 수 있을까?신뢰성(Reliability): 지정된 대로 서비스를 제공할 수 있는 시스템의 능력원하는 대로 시스템이 작동하는가?안전성(Safety): 치명적인 실패 없이 작동할 수 있는 시스템의 능력이 시스템이 안전한가?ex) 자율주행 시스템보안(Security): 의도적이거나 우발적인 침입으로부터..

[소공 시험공부] Software Evolution

비즈니스 환경이 변하고, 컴퓨터 장비 스펙도 오르고, 신뢰성 향상을 위해서는 소프트웨어의 변화는 필요하다 Software 시스템 자체로서 중요한 비즈니스 자산이고, 이 가치를 유지하기 위해서는 반드시 change, update가 필요하다.대부분 예산을 새로운 것들을 개발하는게 아니라, SW 변경과 진화에 사용하게 된다. 그래서 대부분 소프트웨어는 개발(development), 진화(evolution), 서비스(servicing), 퇴출(retirement) 과정을 거치게 된다 이 중 development와 evolution 단계에서는 명세(specification), 구현(implementation), 운영(operation), 검증(validation) 단계가 반복된다.  Program understa..

[소공 시험공부] Software Testing

Program Testing은 프로그램이 의도하는 대로 작동, 결함을 발견하기 위해서 하는 것이다. 어떤 것을 테스트 하는지를 기준으로 보면 Validating Testing, Defect Testing이 있다.  Validating Testing은 사용자의 요구사항을 충족함을 보이고, 의도한 대로 시스템이 작동하는지 보이는 것이다.Defect Testing은 잘못된 동작, 명세와 일치하지 않는 결함을 발견. 잘못 동작하도록 하여 결함을 노출시킨다. 결함을 찾는 것! Q) 이러한 Testing을 어떻게 해서 어떤 것을 확인하면 되나요? artificial data를 사용하여 프로그램을 실행하고, 테스트 결과로부터 오류와 비기능적 속성을 확인한다.  프로그램 품질 보장, 결함을 발견하기 위해서는 Inspe..

[소프트웨어 공학] 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분 전 트래픽이 몰려서 제출하지 못함신뢰성은 ..