일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- generic
- 보안
- JavaScript
- var
- npm
- Clone
- leetcode
- docker
- dotenv
- vue.js
- Python
- machine learning
- C#
- type
- AI
- 앙상블
- scss
- nginx
- TypeScript
- property
- git
- security
- vuetify
- BOJ
- C++
- condition
- bash
- webpack
- loop
- VUE
- Today
- Total
ice rabbit programming
[소공] 소프트웨어 공학의 개요 본문
21세기도 벌써 20%가 지난 현재, 프로그래머는 개발 스킬도 중요하지만 그 외적인 요소들도 무시할 수 없다.
형상 관리(Git), 빌드 및 배포(CI/CD), 설계 등 프로세스 전반에 대해 이해가 있어야 한다.
이 카테고리에서는 학부 시절에 듣지 못했던 소프트웨어 공학을 자료를 참고하며 혼자 정리해보려 한다.
소프트웨어
소프트웨어 공학에 앞서 소프트웨어란 무엇일까? 소프트웨어와 하드웨어의 경계가 모호하긴 하지만, 뭉뚱그려 다음과 같이 표현할 수 있겠다.
- 프로그램과 프로그램의 개발, 운용, 보수에 필요한 관련 정보 일체
즉, 프로그램 이외의 정보도 중요하며, 점점 발달해가고 복잡해짐에 따라 설계가 중요하게 대두되었다. 설계가 취약하면 구조가 점점 악화되고, 결국 손쓸 수 없는 지경에 이르기 때문이다. 소프트웨어는 공학적 관점에서, 쉽게 변경이 가능하며 소모되지 않는다(닳아 없어지지 않는다)는 특징이 있다.
소프트웨어 공학
소프트웨어 공학은, 문제 해결을 위해 대규모의 좋은 품질의 소프트웨어 시스템을 공학적으로 정해진 시간과 비용으로 개발하거나 발전시키는 체계적인 프로세스이다.
소프트웨어 품질에서는 다음 다섯 가지를 꼽을 수 있다.
1. 사용 용이성 : 빨리 배우고 작업을 쉽게 하는 성질
2. 효율성 : CPU 시간과 메모리 등 자원의 낭비 없음
3. 신뢰성 : 요구 기능을 실패 없이 수행
4. 유지보수성 : 쉽게 변경할 수 있음
5. 재사용성 : 부품이 타 프로젝트에서 사용될 수 있는 성질
모든 공학이 그렇듯이, 각 성질은 상충될 수 있다. 즉 trade-off가 발생할 수 있다. 그러므로 처음에 품질의 목표를 맞게 설정하는 것이 중요하다.
기본적으로 다음 프로세스를 거친다.
요구 분석과 정의 -> 시스템 설계 -> 프로그램 설계 -> 프로그램 구현 -> 단위 테스트 -> 통합 테스트 -> 시스템 테스트 -> 시스템 설치 -> 유지보수
'Development > Software Architecture' 카테고리의 다른 글
[소공] 클래스 모델링 (0) | 2023.10.14 |
---|---|
[소공] 요구분석 (0) | 2021.03.27 |
[소공] 객체지향의 개념 (0) | 2021.01.24 |