CS

[CS] 소프트웨어 설계

kinggoddino 2024. 7. 29.

소프트웨어 개발 방법론

말그대로 소프트웨어를 개발하기 위해서 어떤 방법으로 개발해 나가는지에 대한 개념

 

1. 폭포수 방법론

  • 하향식 방법으로 가장 오래된 개발 방법
  • '계획 → 설계 → 개발 → 시험 → 유지보수' 순차적으로 진행하며
  • SDLC(소프트웨어 개발 생명 주기)가 굉장히 길다
  • 따라서 매우 큰 규모의 프로젝트에 적합하고
  • 이미 진행된 작업에대해서는 변경 및 수정이 어렵다
  • ex) 원전,미사일 등 큰 시스템

 

2. 애자일 방법론

  • 반복적이고 점진적으로 개발하는 방법
  • '계획 → 설계 → 개발 → 시험 → 유지보수' 순차적으로 진행하되
  • SDLC(소프트웨어 개발 생명 주기)가 굉장히 짧으며
  • 여러번 반복하며 점진적으로 개발해 나간다
  • 따라서 이해관계자의 피드백을 빠르게 반영할 수 있으나
  • 개발 계획을 세우기 어려울 수 있다
  • ex) 스타트업, 세계 최초개발(반입자충돌실험)

디자인 패턴

디자인 패턴이란 소프트웨어를 설계 및 구현할 때 어떠한 공통된 구조를 띄는 형태를 말한다

 

 

1. MTV

python기반의 웹 구현을 위한 프레임워크인 Django(장고)가 MTV 디자인 패턴을 지향함.

  • M: model(모델)을 의미하며 DB에 데이터를 적재하고 테이블을 정의를 담당
  • T: Template(템플릿)을 의미하며 사용자에게 보여지는 화면을 의미
  • V: View(뷰)를 의미하며 요청에 따라 필요한 로직을 수행하는 역할을 담당

 

2. MVC

 

MTV 패턴은 MVC 패턴에 영감을 받았음

MVC패턴과 MTV패턴은 사실 같은 개념인데 MTV패턴은 장고에 국한된 개념이라볼수있다.

둘을 다른 개념으로 보기도함.

 

MTV에서 MVC는 각 개념이 대응됨.

MTV에서 M모델 == MVC에서 M모델

MTV에서 T템플릿 == MVC에서 V뷰

MTV에서 V뷰 == MVC에서 C컨트롤러

 

MVC 랑 MTV를 나만의 신념으로 판단하기. 같다고보던지 다르다고보던지

 

 

3.

위 디자인 패턴 말고도 ‘생성패턴’, ‘행동패턴’, ‘구조패턴’들이 있다.

그리고 각 패턴들 안에서도 여러 패턴들이 있음

 

 


형상관리

형상관리란 소프트웨어의 변경사항을 추적하고 통제하기위한 작업을 의미

 

1. 형상관리를 위한 툴

 

1-1. git

https://git-scm.com/

 

Git

 

git-scm.com

분산 버전 관리 시스템

 

1-2. github

https://github.com/

 

GitHub · Build and ship software on a single, collaborative platform

Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.

github.com

 

1-3. gitlab

https://about.gitlab.com/

 

The most-comprehensive AI-powered DevSecOps platform

From planning to production, bring teams together in one application. Ship secure code more efficiently to deliver value faster.

about.gitlab.com

 

gitlab은 기업용으로 설계되어 좀 더 많은 기능을 제공하고 그만큼 비용도 발생함

우리는 github를 유용하게 쓰고 있으니 몰라두 됨

 

1-4. gerrit

코드리뷰 툴로 효과적으로 코드를 적용할 수 있도록 해주는 툴

팀원들과 리뷰가 편함

 

 

1-5. sourcetree

git UI를 훨씬 편하게 보며 작업할 수 있게해주는 툴

 

1-6. jira

협업 툴. 서로의 작업을 확인하고 할당할 수 있게 도와줌

git하고 연동됨(대기업에서는 쓴다구함)

 


V&V (Verification & Validation, 검증과 확인)

소프트웨어의 완성도 및 신뢰도를 검증 및 확인하는 작업

소프트웨어를 개발하면 우리의 의도대로 동작하는지 또는 충분한 성능을 나타내는지, 보안 이슈는 없는지 등 다양한 방면에서 소프트웨어의 완성도를 검증하는 작업을 거쳐야함

 

 

1. Verification (검증)

개발자 중심에서 제품이 ‘요구사항’에 만족하게 구현되었는지에 대해 검증하는 작업

 

2. Validation (확인)

사용자 중심에서 제품이 ‘사용감’에 만족하게 구현되었는지에 대해 확인하는 작업

 

3. Test (시험)

소프트웨어를 test하는 방법은 여러가지가 있음

 

3-1. Test 단위

  • 보통 '단위→통합→시스템→인수' 테스트를 순차적으로 실행
  • Unit Test (단위 시험): 가장 작은 단위의 test로 함수, 모듈 등 제일 작은 단위의 기능을 test
  • Integration Test (통합 시험): 함수간, 클래스간, 모듈간 등 어떤 기능이 합쳐져서 잘 동작하는지 test
  • System Test (시스템 시험): 실제 적용하려는 하드웨어나 어떤 시스템에 개발한 소프트웨어를 탑재한 뒤 test
  • Acceptance Test (인수 시험): 출시 및 배포전 최종 test
  • 상황에 따라 몇 단계를 생략하거나 추가할 수 있고 순서가 바뀔수 있다.

3-2. Test 종류

3-2-1. 정적 Test

  • 소프트웨어를 구동하지 않고 test 하는 방법
  • 동료 검토
  • 코드 리뷰 (코드 리뷰를 통해 정적 test를 할 수도 있습니다.)
  • 기술 검토

3-2-2. 동적 Test

  • 소프트웨어를 구동하며 test 하는 방법
  • Black Box Test (블랙박스테스트): 소프트웨어의 작동 원리를 모르는 상태에서 진행하는 test 결과물이 요구사항과 일치하는지 알아보기 위한 test. ex) 코드카타
  • White Box Test(화이트박스테스트): 소프트웨어의 작동 원리를 보며 진행하는 test 소프트웨어가 의도한대로 동작하는지 알아보기 위한 test. ex) 디버거

 

 


 

'CS' 카테고리의 다른 글

[CS] 알아야 하는 개념들  (0) 2024.08.01
[CS] OOP 객체지향 프로그래밍  (0) 2024.07.30
[CS] 컴파일러/인터프리터/메모리영역  (0) 2024.07.28
[CS] 자료형/자료구조  (0) 2024.07.26
[CS] 운영체제  (0) 2024.07.26