티스토리 뷰
1. Introduction to preofessional software development
Software in the Modern world
대부분의 시스템이 software-controlled
-국가 시설, 전자제품, 재정시스템, 엔터테인먼트, 산업 등
-> 따라서, software engineering 은 우리 사회에서 필수적인 기능을 하는 요소가 되었다.
Software 의 특징
소프트웨어 시스템은 추상적(abstract)이고 만질 수 없는 것(intangible)
- material의 특성에 제약을 받지 않음
- 물리적 특징이나 형태가 없음
- 물리적인 법이나 제조 과정에 따르지 않음
위처럼 같은 내용이더라도 2줄이 될수도 있고 10줄이 될 수도 있음.
-> 매우 복잡하고, 이해하기 어렵고, 변경할때 비용이 많이 드는, 그런식으로 될 가능성 충분
Software Costs
- 컴퓨터 시스템 비용은 hardware costs보다 software costs에 영향을 받는다.
ex) PC (software cost > hardware cost) –
ex) Fighters (e.g., F-22, F-35) (the software cost is more than 80%)
- software engineering은 cost-effective software development와 관련이 깊다.
- software costs는 개발할 때보다 유지,보수할 때 더 든다.
- 시스템의 긴 수명을 위해서, 유지보수 비용은 개발비용보다 몇배는 더 들수도 있다!
Software Engineering
- Software engineering은 professional software divelopment 을 위한 theories, methods, tools과 관련이 깊다.
(* professional : 한번 만들고 유지보수하면서 쭉 이어가는 s/w)
- 소프트웨어가 어떤 타입이나 따라 다른 방식의 software engineering을 해야한다.
- Web-based information systems : 약간의 버그가 있어도 ㄱㅊ. but, 소비자의 요구를 바르게 들어주지 않는다면 시장에서 도태. 빠르게 시장에 내놓고, 빠르게 피드백받고 고치기
- Embedded systems : 다시는 못고친다는 마인드로 완벽하게.
- Computer games : web과 비슷하지만, 내놓기 전에 잘 체크해야함. 밸런스라든지
Software Failures
Software가 망한다는 것? 3가지 의미
- 요구하는 기능을 가지지 못할 때
- overdue 기한을 넘겼을 때
- cost overrun 비용을 넘겼을 때
software project의 20%나 실패한다.
software failures의 2가지 요인(원인)
- Increasing demands
항상 이전의 것과 다른 새로운 것을 개발. 시스템이 이전에 생각지도못한 새로운 능력을 가져야함.
- Poor management
많은 회사가 일하면서 software engineering 기법(method)을 이용하지 않음.
결과적으로 그들의 소프트웨어는 비싸지고 신뢰도 떨이짐.
-> software engineering 은 software failures으로부터 피할 수 있게 도와준다.
Software Development (소프트웨어개발)의 종류
1) Personal (=amateur) software development
- 개인의 흥미를 위해, 개인에 의해 만들어진 것
2) Professional Software Development
- 비즈니스적 목적으로 위해 개발됨 (OS, DBMS, portal)
- 보통 팀 단위로 개발됨
- 소프트웨어에 추가적인 materials이 제공됨 (documentation, configuration files, customer support 등)
* Software engineering
- 위 둘중에서 Personal 말고 Professional software development을 위한 것!
- 4단계(이후에 다룸)
Software Products
1) Generic products (범용적 제품)
- Stand-alone systes. 특정 사람, 단체를 타켓팅한 것이 아님. 개발해놀 테니 맘에 드는 사람 가져가라~~
- customer와 developer 중, s/w 기능을 제어하는 사람 = developer
ex) software for PCs : OS, 워드 프로세서, 드로잉 패키지, 멀티미디어 플레이어 등..
ex) software for expcific markets : 좁은 시장을 노린 것. 헷갈릴수 있는데, 특정 사람/단체를 위한 것이 아니므로 generic임.
도서관 정보 시스템, 치과의사를 위한 예약 시스템 등..
* open the selves : 선반 위에 올려놓고 맘에 들면 가져가라
2) Customized products
- customer가 '발주'해서 s/w 만듬. 그러니 당연하게도 s/w 기능 제어하는 사람 = customer
ex) control systems for electronci devices, air traffic control systems
ex) 대기업- IT하청업체
-> However, 이 기준은 점점 없어지는 중임
많은 시스템이 첨엔 generic products로 개발되었다가, customer의 요청에 맞게 수정되는 경우가 많음.
ex) ERP(Enterprise Resource Planning) systems, 예를들어 SAP(숙명 포털)
Software Engineering에 관한 것
1. software가 무엇인가?
= computer program(코드 자체) + documentation(사용자 메뉴얼/ 개발자를 위한 설계문서)
소프트웨어 제품은 특정 고객을 위해 개발될 수도 있고(customized), 일반적인 마켓을 위해 개발될 수도 있다.(generic)
2. 좋은 소프트웨어의 특징은?
원래의 기능명세(Requirement)에 따라 돌아가는 것
* 기능 명세 : Fuctional Requirement(주기능) + non-fuctional Requirement(속도, 용량, 성능, ..)
또한 maintainable하고 dependable한 것.
maintainable : 코드가 깔끔하고 (clean code), 아키텍처가 잘 잡힌 것(clean architecture)
dependable : 잘 죽지 않는 것.
4. Software engineering의 fundamental activities란? (중요)
Software specification 기능 명세
software development 개발 = 디자인+코딩
software validation 검증
software evolution 평가
5. software engineering이 마주하고 있는 주요 도전들?
- Coping with increasing demands
- Demands for reduced delivery times
- Developing trustworthy software
6. software engineering 의 cost란 ?
60% : development costs 40% : testing costs
For custom software, evolution costs often exceed development costs.
7. What are the best software engineering techniques and methods?
서로 다른 시스템의 type에 맞는 적절한 기술을 적용하는 것.
Good Sortware의 주요특징 (Essential Attributes)
1) Maintainability : clean code + clean architecture
2) Dependability : reliability(죽지않아), security(정보보안), safety(안정적=물리적, 재정적 피해 없는 것)
3) Efficiency : 효율성. 자원을 적게 쓰는 것.
*컴퓨터의 자원 3개 : CPU, 메모리, 저장공간(disk)
4) Acceptability : understandable, usable, compaitble. 실제 사용자가 잘 쓸수 있어야함.
ex) 어르신들이 글자가 작아서 잘 못쓴다? -> acceptability X
Software Engineering의 정의
Software engineering is an engineering discipline that is concerned with all aspects of software production.
- engineering discipline : 일정한 제약 하에서, 문제들을 해결하기 위해 적절한 이론과 method를 사용하는 것
- all aspects of software production : 개발의 기술적 과정 뿐만 아니라, 프로젝트 관리와 tools, methods 등을 포함. 소프트웨어 개발을 위한 것들.
Software Engineering, 왜 중요한가
More and more, our society rely on advanced software systems
Thus, we need to be able to produce reliable and trustworthy systems economically and quickly
For most types of system, the majority of costs are the costs of changing the software after it has gone into use
Thus, it is usually cheaper, in the long run, to use software engineering methods and techniques rather than just write the programs as if it was a personal programming project
Software Process
A systematic approach that is used in software engineering
A sequence of activities that leads to the production of a software product
Four fundamental activities (개중요*암기**)
1) Software specification : 기능명세. Requirement 결정하는 단계
Requirement 체계를 잘 안잡아놓으면, 전단계로 되돌아갈 수 없음. 자세한 document
2) Software development : 개발. design + programming 둘이 같이 가는 단계
3) Software validation : 검증. 만든 s/w가 requirement와 맞게 만들어졌는지.
validation의 여러 방식 중 하나가 testing임.
4) Software evolution : 지속적으로 발전시켜나가는 것.
소비자의 요구도 받아들이고, 기술 발전도 따라가고, 자체적으로 기능 추가도 하고, 등등
중요하고 기술을 요하는 단계.
Software Engineering Diversity - software system TYPE에 따른
S/W가 어떤 타입이냐에 따라 1) 빨리 출시해서 시장의 반응을 보고, 다음으로 넘어갈지 2) requirement를 모두 파악한 다음, 완벽한 상태에서 시장에 출시할지
모든 소프트웨어 시스템을 아우르는 software engieering method는 없다.
software engieering method는 4가지에 따라 결정된다.
- type of software : web, sns, game 등 / 임베디드 시스템
- 개발하는 조직organization : 개발 조직이 대기업/ 벤처기업
- 개발하는 사람들 : 소수, 개발실력 high / 다수, 개발실력 low
- customer의 requirement
Different Types of Applications
1. Stand-alone applications
PC, mobile app 등. 모든 기능을 탑재하고 있고, 네트워크에 연결될 필요 없음.
ex) office application, CAD, photo manipulation apps 등 PC or mobile applications
2. Interactive web-based applications
코드는 remote computer에 있고, 사용자 각각의 PC or mobile device로 사용 가능함.
ex) e-commerce와 같은 web application, mail service같은 business systems, SNS, 틱톡 등의 앱
약간의 버그가 있어도 ㄱㅊ. but, 소비자의 요구를 바르게 들어주지 않는다면 시장에서 도태. 빠르게 시장에 내놓고, 빠르게 피드백받고 고치기.
반복적으로 개발. 계속 버전 up시킴
3. Embedded control systems
하드웨어 기기를 조종하는 software control system
ex) software in mobile phone, anti-lock braking system(ABS) in a car, s/w in 전자레인지
철저한 검증(verification, validation) 필요.
4. Batch processing systems 일괄처리 시스템
대량의 개인 데이터를 다루고(input), 이에 상응하는 output을 창출함.
* non-funciontal Req. 성능, 속도 등이 중요
ex) 과금처리 시스템, 월급처리 시스템
Software Engineering Fundamentals
모든 타입의 소프트웨어 시스템을 아우르는 것.
1) Process : 시스템은 반드시 개발 프로세스를 이해하고 관리하며 개발되어야 한다. 전자인지 후자인지 따져보자.
2) Dependability & Performance
Dependability : reliability + security + safety
3) Requirements
4) Reuse** : 검증된 모듈을 가져와서 쓰는 것.
Internet Software Engineering
Web 이전에
- 하나의 컴퓨터 내에서 돌아가는 무거운 프로그램
- 커뮤니케이션은 그 장소, 조직 내에서 이루어짐
현재
- s/w 완전 분산. 전세계적으로
- reuse 흥행(?)
- 로컬 서버 대신, cloud 로 많이 돌아감
아래와 같은 변화들이 software engineering에 큰 영향을 준다.
- software reuse **
- Incremental development and delivery
req를 미리 명시하는 것은 실용적이지 않다. -> 전통적인 s/w engineering 방식에서 agile같은 방식으로의 변화?
- service-oreiented architecuture
s/w 요소는 stand-alone web services 다 ??
- rich interface development tech
AJAX, HTML5 등 rich interface를 지원하는 기술들 발달
'Study > 소프트웨어공학' 카테고리의 다른 글
Chapter4. Requirements Engineering (0) | 2020.10.20 |
---|---|
Chapter 3. Agile Software Development (0) | 2020.10.19 |
Chapter2. Software Processe (0) | 2020.10.19 |
- Total
- Today
- Yesterday
- SpacewBetween
- easycode chatGPT
- aws생성형ai
- 병돌리기구현
- 오블완
- 파이썬
- 생성형AI
- ChatGPT
- easycode
- AWSBedrock
- partyrock무료
- partyrock사용볍
- BOJ
- 알고리즘
- partyrock앱
- genaiapp
- partyrock생성
- 백준
- S3배포
- PYTHON
- 티스토리챌린지
- partyrock
- 정적 웹페이지 배포
- React native 작동 원리
- awsgenai
- S3 403 forbidden
- 술자리병돌리기게임
- vscode easycode
- 코딩테스트
- 정적 웹사이트 배포
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |