-
소프트웨어 엔지니어링CS 공부/AI 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 기술들을 적용하기 위해서는 소프트웨어 엔지니어링도 학습해야한다
'CS 공부 > AI' 카테고리의 다른 글
Linux 쉘 스크립트 (0) 2023.04.25 파이썬 버전 관리 (0) 2023.04.25 📂 3D dataset & 3D task (0) 2023.04.07 Multi-modal learning (0) 2023.04.06 📷 Conditional generative model (0) 2023.04.05