[소프트웨어 공학 정리] 13. 소프트웨어 성능 분석, 품질 평가
·
학문
[소프트웨어 성능 분석]- 소프트웨어의 성능은 사용자가 요구하는 기능을 수행하기 위하여 최소한의 자원을 사용하면서 최대한 빠르고 정확하고 많은 작업을 처리할 수록 좋은 것입니다. - 소프트웨어 성능 측정 지표는 아래와 같습니다.1. 처리량(Throughput) : 주어진 시간에 처리할 수 있는 단위 작업(트랜젝션)의 수2. 응답 시간(Response Time) : 사용자 입력에 대한 응답이 나타날 때까지의 시간3. 경과 시간(Turnaround Time) : 사용자 입력에 대한 결과 출력이 완료될 때까지의 시간4. 자원 사용률(Resource Usage) : 작업 처리를 위해 사용한 CPU, 메모리, 네트워크 등의 사용량 - 소프트웨어 성능 분석 도구 유형1. 성능(Performance)/부하(Load)..
[소프트웨어 공학 정리] 12. 소프트웨어 테스트
·
학문
(소프트웨어 테스트 설명)- 테스트란, 사용자가 요구하는 기능, 성능, 사용성, 안정성 등의 기준을 만족하는지를 검증하는 활동입니다.소프트웨어 내부에 숨어있는 결함을 찾아내 이에 적절한 결정을 내리는 것이 최종 목적입니다. - 소프트웨어 결함 법칙1. 결함 집중(Defect Clustering) : 결함의 대부분의 특정 모듈에 집중되어 있는 경향이 있습니다.2. 낚시 법칙 : 물고기가 잘 잡히는 낚시 포인트가 존재하는 것처럼 특정 위치에서 많은 결함이 발생합니다.3. 파레토(Pareto) 법칙 : 결함의 80% 는 20% 의 기능에서 집중적으로 발생합니다.4. 살충제 패러독스(Pesticide Paradox) : 동일 테스트 케이스로 반복 실행을 하면 새로운 결함을 발견할 수 없습니다.5. 오류-부재의 ..
[소프트웨어 공학 정리] 11. 제품 소프트웨어 패키징
·
학문
- 이번 포스팅에선 소프트웨어 공학 분야에서 팔기 위해 만들어진 제품 소프트웨어를 포장(패키징)하는 방법을 학문적으로 정리할 것입니다. - 제품 소프트웨어 패키징이란,개발이 완료된 제품 소프트웨어를 고객에게 전달하기 위한 형태로 포장하는 작업입니다.설치에서부터 사용까지 필요한 모든 사항 및 매뉴얼이 포함되어 있어야 하며,일단 배포된 소프트웨어에 대한 패치 및 업그레이드를 위한 버전 관리가 가능해야 합니다. - 제품 소프트웨어 패키징 필요사항1. 사용자 편의성을 중심으로 구성2. 범용적 환경에서 사용이 가능하도록 고려3. 버전 관리 등 지속적 관리를 고려 (소프트웨어 빌드)- 소프트웨어 빌드란, 개발자가 작성하는 인간 중심의 코드를 실제 컴퓨터가 실행 가능하도록 해석하는 것입니다. - 소프트웨어 빌드 및 ..
[소프트웨어 공학 정리] 10. 시스템 통합 구현
·
학문
- 시스템을 통합한다는 것은, 별개로 만들어진 시스템을 서로 연결하여 하나의 시스템처럼 사용하는 것을 의미합니다.최초에 단일 시스템을 하나 구현한 시점이나 스스로 운영하지 않는 SW 를 개발하는 경우에는 신경쓰지 않아되 되지만,기존 시스템을 기반으로 하여 새로운 서비스를 창출한다면 시스템 모듈간 연계를 신경써야하며, 시스템간 통합을 구현해야 합니다.(시스템 통합은 기업 내부의 시스템간 통합일 수도 있고, 외부 기업이 제공해주는 시스템과의 연계일 수도 있습니다.) - 시스템 통합은 아키텍쳐, 송수신 방식에 따라 다양한 방식이 있습니다.통합 구현의 요소는 아래와 같이 구성됩니다. 1. 송신 시스템 : 전송하고자 하는 데이터를 생성하는 시스템2. 중계 시스템 : 내부 시스템과 외부 시스템간 연계시에 적용되는 ..
[소프트웨어 공학 정리] 9. 정렬 알고리즘 이론
·
학문
- 이번 포스팅으로는 배열 내의 데이터들을 순서대로 정렬하는 효율적인 방식인 정렬 알고리즘을 정리할 것입니다.소프트웨어 공학 범위에서 배우는 기본 필수적으로 알아야 하는 마지막 알고리즘의 이론입니다.정렬 알고리즘의 실제 구현은 하지 않으며, 나중에 C 언어로 따로 구현글을 정리할까 합니다. - 정렬이란, 다수의 데이터를 일정한 규칙에 따라 순서대로 나열하는 방법입니다.작거나 앞선 데이터를 시작으로 점차 데이터가 커지는 방향으로 정렬하는 오름차순(Ascending Order) 정렬과,크거나 뒷선 데이터를 시작으로 점차 데이터가 작아지는 방향으로 정렬하는 내림차순(Descending Order) 정렬이 있습니다. [정렬의 종류](선택(Selection) 정렬)- 시간 복잡도평균 : O(N^2)최악 : O(N..
[소프트웨어 공학 정리] 8. 탐색 알고리즘 이론
·
학문
- 이번 포스팅에서는 탐색 알고리즘에 대한 이론을 정리하겠습니다.탐색 알고리즘의 실제 구현은 하지 않습니다. [탐색의 개념]- 탐색이란, 많은 양의 데이터에서 원하는 데이터를 찾아내는 작업입니다. - 탐색에 이용되는 기억장치의 종류에 따라 아래와 같은 분류가 있습니다.1. 내부 탐색 : 주기억 장치에서 데이터를 빠르게 탐색합니다.2. 외부 탐색 : 보조기억 장치에서 데이터를 탐색합니다. 속도가 느릴 수 밖에 없습니다. (복잡도)- 탐색의 성능을 나타내는 성능지표로 복잡도라는 개념이 있습니다.복잡도는 두가지 종류가 있으며, 아래와 같습니다. 1. 공간 복잡도알고리즘이 연산을 수행하는 동안 사용되는 메모리 공간의 크기를 나타냅니다.일반적인 경우 공간 복잡도가 알고리즘의 품질에 영향을 미치는 비중은 시간 복잡..
[확률 통계] 표본 분산을 n-1로 나누는 이유 (구 블로그 글 복구)
·
학문
- 만약 어떤 집단의 특성을 알아내어 어떠한 통계적 정보를 이끌어내고자 한다고 할때,그 집단의 모든 데이터를 사용하면 좋겠지만, 데이터 접근 및 수집문제가 있을수 있고, 비용문제도 있을 것입니다. 예를들면 대한민국 국민의 '신장'이라는 데이터를 사용한다고 합시다. 이때, 대한민국 국민 키의 평균을 구한다고 하면, 일일이 자를 들고 그 데이터를 모으는 것은 말도안되는 비용이 들며, 쌓인 데이터만 하더라도 엄청나게 많아 다루기도 힘들 것입니다. 그렇기에 보통 통계 조사를 한다면, 원하는 집단을 대표하는 집단을 선정하여 그것을 모집단의 비율 축소판으로 가정하고 사용하게 됩니다. - 용어정리모집단이란, 위에서 말했던, 정보를 얻기 희망하는 특정 집단 자체를 의미합니다.표본집단이란, 모집단에서 무작위로 선정하거나..
[소프트웨어 공학 정리] 7. 자료구조 이론
·
학문
- 이번 포스팅은 알고리즘 개념과 자료구조 이론에 대해 정리합니다.자료구조의 실제 구현은 포함되어 있지 않습니다. [자료구조 개론](자료구조 개념)- 자료구조란, 데이터를 프로그램에서 효율적으로 활용할 수 있도록 논리적으로 설계된 데이터 구조 및 관계입니다.자료구조는 여러 종류가 있으며,개발자라면 데이터의 유형과 상황에 따라 적절한 자료구조를 선택하여 활용할 수 있는 능력이 필요합니다. - 자료 구조의 특징1. 같은 데이터를 활용하더라도 자료구조에 따라 성능에 큰 영향을 끼칠 수 있습니다.2. 효과적인 자료 구조란, 데이터 용량, 실행 시간 등을 최소한으로 사용하는 것입니다.3. 데이터 추가, 삭제, 탐색을 보다 효율적으로 수행할 수 있도록 하는 것이 목표입니다. - 자료 구조의 유형1. 단순 구조프로그..
KL Divergence 개인정리 (구 블로그 글 복구)
·
학문
- 사전지식으로 필요한 정보이론 기초와, cross entropy에 대한 것은,링크를 참고하세요. - 정답 확률분포와 예측 확률분포에 대해 먼저 이야기해 봅시다.정답 확률분포 p는, 말 그대로 정답입니다.딥러닝의 분류문제로 보자면,[1,0,0,0]과 같은 정답 레이블로,레이블이 [강아지, 고양이, 거북이, 새]일 확률을 나타낸 것이라면,위 레이블은 '강아지' 100퍼센트 라는 것이죠. 이것의 엔트로피는 0입니다.계산할 것도 없이, 이미 가장 큰 확률이 강아지인데다가, 다른 것으로 판단될 여지가 없죠. 그러면 예측 확률분포 q는, 딥러닝 모델이 출력한 확률값으로 합시다.모델이 학습은 해서 대충 알기는 한데,데이터로 판단했을 때, 뭔가 애매한 부분도 존재해서,[0.8, 0.1, 0.06, 0.04] 이렇게 ..
[소프트웨어 공학 정리] 6. 공학적 응용 소프트웨어 설계 방식
·
학문
[소프트웨어 설계]- 소프트웨어의 설계란,요구사항의 분석 단계에서 도출된 요구 기능이 소프트웨어에서 실현될 수 있도록 알고리즘을 설계하고,그 알고리즘에 의해 사용, 처리될 자료 구조를 문서화 하는 작업입니다. - 대표적인 소프트웨어 설계 방식은 아래와 같습니다.1. 절차 지향 설계(Process Oriented Design)작업이 수행되는 순서인 작업 절차를 중심으로 소프트웨어를 설계합니다.컴퓨터의 처리 구조와 유사하고, 특히나 절차지향 프로그래밍 언어(C 언어 등)에 유리하며, 그만큼 성능이 좋은 경우가 많습니다.하지만 아래의 객체 지향 설계에 비해서 유지보수가 어렵단 단점이 있습니다. 2. 객체 지향 설계(Object Oriented Design)프로그램을 구성하는 요소를 객체라는 단위로 묶어서 설계..