software engineering
배경 : '소프트웨어의 위기'를 극복하기 위해 conference에서 처음 등장
==> 소프트 웨어의 위기란?
: 소프트웨어의 등장 초기에는 소프트웨어의 기술을 따라갈 수 있는 하드웨어의 기술이부족해 그 격차를 극복하기 위해 등장했지만, 최근 하드웨어가 급속한 발전을 이뤄냄에
따라 소프트웨어의 시스템 복잡도가 크게 증가했으며 그에 따라 인수 및 개발에 필요한
비용과 시간도 늘어가게 되었다.
====> 이러한 배경에 의한 software engineering의 정의
: 전문적인 소프트웨어 개발(대규모 SW개발)을 위한 이론, 방법, 도구를 배우는 과목
FAQs about software engineering
* software란?
: programs과 관련된 문서들(menual)의 합
* good software란?
다양한 기능, 성능, 유지보수의 용이성, 의존성 및 사용의 용이성을 제공해야함
=> ex. 어떤 회사의 전산프로그램이 good software가 되기 위해서는
=> 다양한 기능 : 입출력, 각종 계산, redo, undo... 와 같은 여러 기능
=> 성능 : 하드의 자원을 적게 사용할수록 good!
=> 유지보수의 용이성 : 구매자(회사)가 해당 프로그램을 쉽게
유지보수 할 수 있도록
=> 의존성(확실성) : 신뢰성, 보안성, 안정을 모두 포함함
* 신뢰성 : 오류가 없다!
* 보안성 : 악의적인 사용자의 접근을 막는다!
* 안정성 : 시스템에 문제가 생기더라도 피해가 없다!
ex) 사용자의 정보를 예비 DB와 Main DB를 중복해서 저장!!
=> ps) 수용성 : 사용이 편하고 호환성이 좋을수록 good!
=> ps) 효율성 : 적은 자원을 사용하고 처리시간이 빠를수록 good!
* 결국 software engineering이란?
: good software를 개발하는 방법!
* software enginnering의 기본 activities
: 1. software specification : 고객과 개발자가 소프트웨어의 기능과 제한사항을 정의함
ex. chrome .. 기능 => redo, undo.....
.. 제한 사항 => 클릭하고 8초안에 작업이 이뤄져야 한다.(버블x, 퀵 o)
==> 이러한 기능과 제한사항을 알기위해 의사소통이 중요하다.
2. software development : designed(분석과 설계를 통해)와 programmed(코딩함)
3. software validation : optimal test set 등으로 검증함
=> 분석 및 설계를 통해 코딩보다 먼저 테스트 셋을 개발함
4. software evolution : 사용자의 요구사항이나 법규에 따라 계속적으로 수정함
* software engineering VS computer science
: computer science는 이론과 기반에 중점을 두는 반면 software engineering은 유용한
software를 개발하기 위해 실용성에 중점을 둔다.
* software engineering VS system engineering
: 과거 system engineering은 시스템 개발을 위한 전반적인 내용을 다룸으로서 software는 system에 포함되어 있다고 보는 것이 일반적이었나 최근 software가 전문화되고 세분화됨에 따라 오히려 software가 system을 조정하는 입장이 되고 있다.
* software engineering의 key challenges
: 다양성(프로그래밍 언어의 다양성으로 인해 선택의 폭이 굉장히 넓어짐 ex. C, JAVA..),
개발시간단축(경쟁의 과열로 인해 누가 먼저 출시하느냐가 중요시 됨. ex. game..),
믿을수 있는 software개발(good software의 개발이 요구됨. ex. IoT..)
* software engineering 비용
: 개발 비용: 60%, 테스트 비용 : 40%
but, custom software의 경우 evolution비용이 개발비용보다 매우 많이 든다!!!
/ generic product : 일반사용자를 대상으로하며 개발자가 명세, 변경을 주도함
| ex. window, chrome...
\customized product : 특정 사용자를 대상으로하며 고객이 명세, 변경을 주도함
==> 고객의 요구에 따라 잦은 변경이 요구됨
=> 따라서, evolution비용이 개발비용보다 많이 든다!!!
ex. 학교 개인 전산망...
* Best software engineering 기술과 방법?
: 없다! => 어떤 software를 개발하느냐에 따라 매우 다양한 기술과 방법이 사용된다!
==> 즉, 그때그때 다르다.
ex. game의 경우, 완벽한 software보다는 빠르게 출시할 수 있는 software가 중요!
critical control system(IoT, 하드웨어 제어프로그램)의 경우,
완벽한 software(분석 가능하고 명확한 명세를 동반하는)가 중요하다!
하지만, 소프트웨어를 몇몇 유형으로 나눠 그때마다 다른 방법 또는 기술을 적용한다.
* 소프트웨어 유형
- stand-alone applications(독립형 applications)
: 네트워크 같은 것 없이 컴퓨터에서 혼자 작동할 수 있는 프로그램
ex. 지뢰찾기, 메모장, office programs
- Interactive transaction-based applications
: 원격 컴퓨터 상에서 작동하며 사용자의 pc에서 접근됨.
ex. ATM, 대부분의 web apps, e-commerce applications
- Embedded control systems
: Hardware devices를 제어하는 소프트웨어
ex. driver
- Data collection & Analysis systems
: Sensor로 부터 data를 수집하고, 처리를 담당하는 다른 시스템과 연결됨
ex. Big data
- System of systems
: Software systems들의 집합으로 구성된 시스템
ex. pos(편의점 결제시스템)
===> software engineering fundamentals
1. system은 관리되고 이해 될 수 있는 개발과정에 의해 개발되어야 한다.
2. 어떤 시스템이건 의존성과 성능은 중요
3. software의 명세 및 요구사항을 이해하고 관리하는 것은 매우 중요!!!
4. 소프트웨어의 신규 개발보다는 재사용하는 것이 바람직함
하지만, 소프트웨어를 몇몇 유형으로 나눠 그때마다 다른 방법 또는 기술을 적용한다.
* 소프트웨어 유형
- stand-alone applications(독립형 applications)
: 네트워크 같은 것 없이 컴퓨터에서 혼자 작동할 수 있는 프로그램
ex. 지뢰찾기, 메모장, office programs
- Interactive transaction-based applications
: 원격 컴퓨터 상에서 작동하며 사용자의 pc에서 접근됨.
ex. ATM, 대부분의 web apps, e-commerce applications
- Embedded control systems
: Hardware devices를 제어하는 소프트웨어
ex. driver
- Data collection & Analysis systems
: Sensor로 부터 data를 수집하고, 처리를 담당하는 다른 시스템과 연결됨
ex. Big data
- System of systems
: Software systems들의 집합으로 구성된 시스템
ex. pos(편의점 결제시스템)
===> software engineering fundamentals
1. system은 관리되고 이해 될 수 있는 개발과정에 의해 개발되어야 한다.
2. 어떤 시스템이건 의존성과 성능은 중요
3. software의 명세 및 요구사항을 이해하고 관리하는 것은 매우 중요!!!
4. 소프트웨어의 신규 개발보다는 재사용하는 것이 바람직함
댓글 없음:
댓글 쓰기