CS 공부/AI

소프트웨어 엔지니어링

imsmile2000 2023. 4. 24. 20:08

소프트웨어의 다양한 분야

- 프론트엔드: 웹페이지의 앞단

- 백엔드: 데이터 처리, 연산, API 등을 진행

-  풀스택: 프론트엔드+백엔드

- 머신러닝, AI

- 데이터

- 모바일 앱: 앱 개발

- 게임

- DevOps, 클라우드: 클라우드 리소스 효율적으로 사용

- 보안 등

 

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

1) Planning: 계획

2) Analysis: 요구 조건 분석

3) Design: 설계

4) Implementation: 구현

5) Testing & Integration: 테스트

6) Maintenance : 유지 보수

 

좋은 소프트웨어 설계

1) 모듈성

  • 레고 블록을 사용해 장난감을 만드는 것
  • 큰 프로그램을 작고 독립적인 부분으로 나누는 것을 의미
  • 여러 함수가 모여 하나의 모듈을 이루고, 모듈끼리 서로 영향을 줌

2) 응집도

  • 시스템의 모듈 구성 요소가 목적을 달성하기 위해 관련되어 있는 정도
  • 하나의 모듈 안에서 각각의 함수가 서로 엮여서 동작
  • 낮은 응집도: 공동의 목적이 없고, 관련되어 있지 않음
  • 높은 응집도: 각각의 모듈이 긴밀하게 엮이고, 하나의 역할을담당
  • 하나의 Class에 모든 기능을 구현하는 것이 아닌, 목적에 맞게 나누고 서로 교류하는 인터페이스

3) 결합도

  • 모듈 간 상호 의존성의 정도
  • 낮은 결합도: 하나의 함수 내부 구현이 바뀌어도 다른 함수가 영향을 받지 않음
높은 응집도(모듈 내 교류)와 낮은 결합도(모듈끼리는 덜 교류)를 가진 소프트웨어 지향

4) 테스트

  • 사용자들에게 안정적으로 소프트웨어를 사용할 수 있도록, 기능이 추가될 때 기존 시스템에서 오류가 생기는지 버그가 있는지 등을 확인하는 과정
  • 코드 뿐만 아니라 전체 시스템에 대한 확인
  • Unit Test(개별 단위), Integration Test, End-to-End Test(처음부터 끝까지), Performance Test(성능, 부하)

5) 문서화

  • 소프트웨어를 이용하기 위한 README, API 문서, 아키텍쳐 문서
서비스에 AI 기술들을 적용하기 위해서는 소프트웨어 엔지니어링도 학습해야한다