simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • null
  • JVM메모리구조
  • 자바프로그래밍
  • 자바프로그램
  • 자바메모리구조
  • 참조변수
  • 404
  • 참조타입
  • 컨트롤러
  • controllerTest
  • 자바
  • 스프링
  • scanner #next() #nextLine()

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

[소프트웨어 공학] 소프트웨어 공학 및 현업 프로세스
Computer Science/OS

[소프트웨어 공학] 소프트웨어 공학 및 현업 프로세스

2022. 9. 5. 21:10

|  소프트웨어 공학의 필요성

- 소프트웨어 공학이란? 시스템 초기부터 오픈 후 유지/보수까지의 소프트웨어 개발과 관련된 모든 측면을 의미

- 왜 필요한가?

  (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 끝나면 진행한 것 리뷰/반성

출처:https://velog.io/@katanazero86/%EC%95%A0%EC%9E%90%EC%9D%BCagile%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

1️⃣ Scrum 팀 구성 : 일반적으로 10명 안밖으로 구성된다.

👥Product Owner(Manager) + Scrum Master + Senior Development Manager + Developer + .. (10명 가량)

출처:https://www.visual-paradigm.com/scrum/what-is-scrum-team/

2️⃣ Sprint 계획(1달, 2주) & 진행 

- Sprint : Epic(Story) - Tickets(Backlog) - Priorization - Dev Estimation - Test - Release

- Product Backlog 예시 이미지

SprintBacklog예시_출처:https://itwiki.kr/w/%EC%8A%A4%ED%94%84%EB%A6%B0%ED%8A%B8_%EB%B0%B1%EB%A1%9C%EA%B7%B8


3️⃣ Daily Scrum으로 진척사항/변동사항을 확인 후 공유

4️⃣ Sprint 끝나면 진행한 것 리뷰/반성

 

DevOps란?

- 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로 최근에 새롭게 나타난 조직명이다.

- 에자일 방식의 경우 작은 단위로 서비스를 오픈한다.(Micro Feature Release)
- 새로운 기능이 릴리즈될 때 개발팀에서 운영팀에 어떻게 운영할지를 알려주어야 한다.
- 그러나 고전적인 기업 조직 구조에서와 같이 개발팀과 운영팀이 별도로 나뉘어져 있다면, 

- 부서가 분리되어 있으니 개발팀에서 운영팀에 최근 오픈된 서비스 사항을 제대로 공유하지 않게 되는데
- 그러다 특정 서비스를 오픈하다 이슈가 발생해 다운 현상이 일어나면 개발을 한 개발자가 blame을 받게 된다.
- 그러니 운영팀은 기존 서비스를 유지하고 신규 오픈은 막으려 하고, 개발팀도 되도록 신규 서비스 개발은 지양하게 된다.

- 이런 현상이 반복되면 결국 고객의 니즈에 맞춰가지 못하는 서비스가 되어 도태되는 현상 발생

- 역할 : Release System의 자동화, 코드 리뷰 및 테스트 자동화, 서비스 모니터링, 이슈 발생 시 커뮤니케이션 시스템

 

스타트업과 린 스타트업

- [린 스타트업], Eric Ries 

" 승리할 수 있는 유일한 방법은 다른 누구보다 빨리 배우는 것이다 "

- 스타트업이란? 극심한 불확실성 속에서 신규 제품이나 서비스를 만들고자 하는 조직

 

|  정리

✅ 소프트웨어 공학은 소프트웨어 개발 과정 전반에 대한 이론을 말한다. 
✅ 전통적인 소프트웨어 개발 방법론으로는 폭포수, 프로토타입, 나선형이 있다.
✅ 오늘날의 소프트웨어는 (스타트업 기준)애자일 방식을 사용하며, 유지/보수에 관하여는 DevOps조직이 새롭게 생성되었다.
✅ 애자일은 개발 즉시 피드백을 받아 빠르고 유동적으로 개발하는 방법을 말한다.

 

 

[ 참조 및 출처 ]

부트캠프 강의를 들은 후 기타 자료와 함께 정리한 내용입니다.

[Software Engineering] 소프트웨어 공학이란?, 소프트웨어 공학의 필요성, 좋은 소프트웨어의 특성

https://velog.io/@katanazero86/%EC%95%A0%EC%9E%90%EC%9D%BCagile%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

TDD란? https://gmlwjd9405.github.io/2018/06/03/agile-tdd.html

'Computer Science > 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
    'Computer Science/OS' 카테고리의 다른 글
    • Oracle Virtualbox로 Windows에 Mac 운영체제 설치하기
    • [OS] WSL을 통해 윈도우 환경에서 리눅스 사용하기
    • [네트워크] 네트워크의 기초 정리
    • [시스템 소프트웨어] 쉘스크립트
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바