| 소프트웨어 공학의 필요성
- 소프트웨어 공학이란? 시스템 초기부터 오픈 후 유지/보수까지의 소프트웨어 개발과 관련된 모든 측면을 의미
- 왜 필요한가?
(1) 비용의 문제 (개발 60% + 테스트 40%) : 계획 없는 개발은 추가 비용을 발생시킨다.
(2) 시스템 복잡도 향상 : 점차 복잡해지는 시스템 속에서 방향성을 잡는 것이 필요해졌다.
- 소프트웨어의 종류
Generic products | 어떤 기능을 수행할지 개발자의 결정에 의해 만들어진 소프트웨어 |
Customized products | 특정 고객의 요구사항에 맞추어 개발되는 소프트웨어 |
- 좋은 소프트웨어란? 고객에게 필요한 기능과 성능을 제공하는 소프트웨어
> "높은 다양성과, 믿을 수 있는 소프트웨어"
> 좋은 소프트웨어가 꼭 가져야하는 특성 : 유지가능성, 신뢰성과 보안, 효율성, 접근가능성(쉽고 단순해야)
| 소프트웨어 프로세스 정형화
1. 전통적인 방식
- 고객/사용자(Client)/플젝 관리자(PM)/개발자
- SI의 방식과 비슷하다.
- 요구사항 > 요구명세 & 요구분석 > 설계 > 구현 > 테스트 > 납품/유지보수
단계 | 내용 |
요구사항 | 고객의 요구 사항 (Pain point + scope + benefit) |
요구명세 & 분석 | 실제 구현을 위한 상세한 기능 분석 - 요구사항에 대한 구체화를 위한 유도, 분석, 기록 - 기능 레벨, 필요 시스템, 테스트 요구사항, 외부 시스템과의 연결 요구사항, 제약 사항 |
설계(Design) | 세부적인 구현 레벨의 설계 (절차지향 / 객체지향) - 객체지향 : Use Case Diagram, Class Diagram, Sequence Diagram * Use Case는 사용자가 여러명이 있을 때 유용 * Class Diagram은 Class간 관계를 구체화할 때 유용 * Sequence Diagram은 각 Class간 호출 관계 간단히 표현 |
구현(Implemenation) | Project Management로 각 개발 단계 세부화(WBS) * 과거에는 MS Project 툴을 사용했다고 한다. |
테스트 | QA라고도 하며 발생할 수 있는 버그 사항들에 대해 테스트 |
오픈(Release) | 여러 버전의 사전 오픈에서 실제 오픈에 이르기까지 - pre-alpha, alpha, beta, RC(release candidate), official release |
유지보수 | 오픈 후 운영 시 개선이 필요한 사항에 대해 하나씩 개선 |
1-1. 고전적인 개발 방법론
폭포수 모델 | 프로토타입 모델 | 나선형 모델 | |
내용 | 순차적인 단계 | 간단한 프로토타입을 만든 후 수정 | 작은 단위의 task로 점진적 개발 |
장점 | 사전 설계가 세부적일 때 유용 | 폭포수 보다 요구사항 도출 용이 | 프로토타입 보다 요구사항 파악 쉬움 위험을 최소화할 수 있음 대규모 시스템에 유리 |
단점 | 변화에 유동적이지 않음 일정 산출의 어려움 |
프로토타입을 완제품으로 오해 프로토타입 제작의 비효율성 |
개발 시간이 오래 소요 시스템이 복잡해 관리가 어려움 |
img |
* 출처 : 나무위키 |
* 이미지 출처 : https://m.blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=seilius&logNo=130185596031
[ 완벽한 기획이 실제로 가능할까 (더보기) ]
- 고객의 요구사항이 코딩 테스트 문제처럼 세부적일 거란 기대는 하지 않는 게 좋다.
- 처음부터 개발자를 만족시킬 수 있는 기획이 있을까? 그럼 처음부터 고객을 만족시킬 수 있는 개발물은?
[ 완벽한 기획이 실제로 가능할까 ]
- 처음부터 개발자를 만족시킬 수 있는 기획이 있을까? 그럼 처음부터 고객을 만족시킬 수 있는 개발물은?
- 사용자의 요구사항 + 고객의 요구사항 + 디자이너의 요구사항 + 개발자의 요구사항?
- 완벽한 고객의 요구사항이란 존재할 수가 없다.
- 그러니 완벽한 분석 또한 어려운 게 사실이다.
- 고객의 계속해서 바뀌는 요구사항.
- 갑작스런 내외부 변동 사항 (ex. 내부적인 오류, 라이브러리 보안 이슈 등)
- 기획을 무시하기 보다,
2. 오늘날의 개발 방식
- 최신 서비스 특성 : Mobile First, 웹 + 모바일의 서비스 개발, 클라우드 컴퓨팅 기반, 개인정보 보호 강화
- 최신 서비스 개발 Trend : 빠르게 micro 단위로 순차적인 개발을 한다.
> 새로운 기술, Micro Features
> 고객 경험을 모니터링 - micro단위로 AB테스트, 고객 로그를 활용
2-1. 최신 소프트웨어 업계 개발방식
방식 | 내용 | |
제공 환경 | 다양 | 반응형 웹, 하이브리드 앱 등 |
개발 방법론 |
Agile | 고객 중심, 변화에 유연한, 협력적인 개발 문화 - Agile 툴 : Jira |
CI | 지속적 통합, Continuous Integration. 지속적으로 품질 관리를 적용하는 프로세스를 실행하는 것 - CI 툴 : Jenkins |
|
TDD | 테스트 주도 개발, Test Driven Development 테스트를 먼저 만들고 테스트를 통과하기 위한 것을 개발한다. |
|
버전 관리 | Git, Github | |
유지 보수 / 운영 자동화 | DevOps | 개발팀 + 운영팀이 합쳐진 형태의 새로운 조직 |
Agile이란?
개발과 함께 즉시 피드백을 받아서 유동적으로 개발하는 방법
* 출처 : 나무위키
(1) Agile 선언문
애자일 소프트웨어 개발 선언 우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게 여기게 되었다: 공정과 도구보다 개인과 상호작용을 포괄적인 문서보다 작동하는 소프트웨어를 계약 협상보다 고객과의 협력을 계획을 따르기보다 변화에 대응하기를 가치 있게 여긴다. 이 말은, 왼쪽에 있는 것들도 가치가 있지만, 우리는 오른쪽에 있는 것들에 더 높은 가치를 둔다는 것이다. |
(2) Scrum 프로세스
* Scrum이란? 순차적이고 점진적인 에자일 방식의 개발 과정
1️⃣ Scrum 팀 구성 및 미팅 2️⃣ Sprint 계획 & 진행 3️⃣ Daily Scrum으로 진척사항/변동사항을 확인 후 공유 4️⃣ Sprint 끝나면 진행한 것 리뷰/반성 |
1️⃣ Scrum 팀 구성 : 일반적으로 10명 안밖으로 구성된다.
👥Product Owner(Manager) + Scrum Master + Senior Development Manager + Developer + .. (10명 가량) |
2️⃣ Sprint 계획(1달, 2주) & 진행
- Sprint : Epic(Story) - Tickets(Backlog) - Priorization - Dev Estimation - Test - Release
- Product Backlog 예시 이미지
3️⃣ Daily Scrum으로 진척사항/변동사항을 확인 후 공유
4️⃣ Sprint 끝나면 진행한 것 리뷰/반성
DevOps란?
- 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로 최근에 새롭게 나타난 조직명이다.
- 에자일 방식의 경우 작은 단위로 서비스를 오픈한다.(Micro Feature Release) - 새로운 기능이 릴리즈될 때 개발팀에서 운영팀에 어떻게 운영할지를 알려주어야 한다. - 그러나 고전적인 기업 조직 구조에서와 같이 개발팀과 운영팀이 별도로 나뉘어져 있다면, - 부서가 분리되어 있으니 개발팀에서 운영팀에 최근 오픈된 서비스 사항을 제대로 공유하지 않게 되는데 - 그러다 특정 서비스를 오픈하다 이슈가 발생해 다운 현상이 일어나면 개발을 한 개발자가 blame을 받게 된다. - 그러니 운영팀은 기존 서비스를 유지하고 신규 오픈은 막으려 하고, 개발팀도 되도록 신규 서비스 개발은 지양하게 된다. - 이런 현상이 반복되면 결국 고객의 니즈에 맞춰가지 못하는 서비스가 되어 도태되는 현상 발생 |
- 역할 : Release System의 자동화, 코드 리뷰 및 테스트 자동화, 서비스 모니터링, 이슈 발생 시 커뮤니케이션 시스템
스타트업과 린 스타트업
- [린 스타트업], Eric Ries
" 승리할 수 있는 유일한 방법은 다른 누구보다 빨리 배우는 것이다 "
- 스타트업이란? 극심한 불확실성 속에서 신규 제품이나 서비스를 만들고자 하는 조직
| 정리
✅ 소프트웨어 공학은 소프트웨어 개발 과정 전반에 대한 이론을 말한다. ✅ 전통적인 소프트웨어 개발 방법론으로는 폭포수, 프로토타입, 나선형이 있다. ✅ 오늘날의 소프트웨어는 (스타트업 기준)애자일 방식을 사용하며, 유지/보수에 관하여는 DevOps조직이 새롭게 생성되었다. ✅ 애자일은 개발 즉시 피드백을 받아 빠르고 유동적으로 개발하는 방법을 말한다. |
[ 참조 및 출처 ]
부트캠프 강의를 들은 후 기타 자료와 함께 정리한 내용입니다.
[Software Engineering] 소프트웨어 공학이란?, 소프트웨어 공학의 필요성, 좋은 소프트웨어의 특성
TDD란? https://gmlwjd9405.github.io/2018/06/03/agile-tdd.html
'Infra > OS' 카테고리의 다른 글
Oracle Virtualbox로 Windows에 Mac 운영체제 설치하기 (0) | 2024.12.11 |
---|---|
[OS] WSL을 통해 윈도우 환경에서 리눅스 사용하기 (0) | 2023.12.25 |
[네트워크] 네트워크의 기초 정리 (0) | 2022.08.28 |
[시스템 소프트웨어] 쉘스크립트 (0) | 2022.08.21 |
[시스템 소프트웨어] 리눅스의 기본 명령어 (0) | 2022.08.15 |