[부스트캠프 AI Tech 5기] 소프트웨어 엔지니어링

박상우·2023년 4월 24일
0
post-thumbnail

소프트웨어 엔지니어링

소프트웨어 엔지니어링이란?

  • 소프트웨어를 개발하는 과정에서 체계적이고 효율적인 방법을 사용하여 소프트웨어의 품질과 유지 보수성을 보장하는 학문 분야

소프트웨어

  • 컴퓨터 프로그램 + 관련 문서 + 데이터의 집합
  • 대부분의 웹, 앱 서비스

프론트엔드

  • 웹 페이지의 앞단

백 엔드

  • 데이터 처리, 연산, API 등

풀 스택

  • 프론트엔드 + 백엔드 등 여러가지 진행

DevOps, 클라우드

  • 클라우드 리소스 효율적인 사용

소프트웨어 개발 라이프사이클

좋은 소프트웨어 설계

개념

모듈성

  • 고유한 목적, 기능을 가지는 단위
  • 레고 블록을 사용해 장난감을 만드는 것
  • 블록 마다 고유한 용도가 존재
  • 블록 하나가 깨지거나 변경해야 하는 경우, 나머지 부분에 영향을 주지 않고 쉽게 교체할 수 있음

응집도

  • 시스템의 모듈 구성 요소가 목적을 달성하기 위해 관련되어 있는 정도
  • 하나의 모듈 안에서 각각의 함수가 서로 연결되어 사용


  • 객체 지향 사고가 필요
  • 하나의 Class에 모든 기능을 구현하는 것이 아닌, 목적에 맞게 나누고 서로 교류하는 인터페이스

결합도

  • 모듈들의 상호 의존성

지향점

  • 높은 응집도와 느슨한 결합도
  • 모듈 내 교류는 크게, 모듈 끼린 덜 교류하는 소프트웨어를 지향

테스팅

  • 손님에게 음식을 대접하기 전에, 음식을 맛보는 경험
  • 유저에게 공개하기 전에, 내부에서 프로그램이 잘 작동하는지 확인하는 과정
  • 요구 조건, 아키텍처 디자인 설계, 서버, 데이터 베이스 연결, 서버 부하 등을 확인할 수 있음

종류

  • Unit Test : 개별 단위 테스트
  • Integration Test : 다른 단위, 구성요소 동작 테스트
  • End to End Test : 처음부터 끝까지 모두 테스트
  • Performance Test : 성능, 부하 테스트

문서화

  • 소프트웨어를 이용하기 위한 README, API 문서, 아키텍쳐 문서

소프트웨어 엔지니어링을 배워야 하는 이유

  • 머신러닝 모델을 만드는 것도 소프트웨어 엔지니어링 중 하나
  • 머신러닝 모델을 실제 유저에게 사용하게 한다면, 소프트웨어 엔지니어링을 하게 될 것

  • 머신 러닝 코드는 일부에 불과하다..
profile
세상아 덤벼라

0개의 댓글