[소프트웨어공학] Software Testing
·
CS/소프트웨어공학
Program testing의도1: 프로그램이 의도된 작업을 수행한다는 것을 보여주기 위함의도2: 프로그램을 사용하기 전에 프로그램 결함을 발견하기 위함만들어진 인위적 데이터를 가지고 한다.error 발견, 예외 처리, non-funcitonal에 대한 비정상적 동작도 탐지Error의 존재를 밝힐 수는 있지만, error가 없다는 것은 밝힐 수 없음 Testing's Goal#1  개발자와 고객의 요구사항을 충족하는지 확인 (Validation testing)대상이 있기에 입출력 값이 확실하다예측 값이 나오는지 확인의도한 대로 움직이는 것이 성공적인 테스트!For custom software요구사항 명세에 기재된 모든 요구 사항에 대하여 최소한 1개 이상의 test를 진행하여야 한다.For generic..
[소프트웨어공학] Design and Implementation
·
CS/소프트웨어공학
Design and Implementation 둘은 서로 밀접히 연관되어 있음 설계는 창의적 활동, 구현은 설계를 하나의 형태로 만드는 것 Commercial-off-the-shelf(COTS) 구축보다 구매가 더 나을 수 있다. 예를 들어 의료 기록 시스템을 개발하고자 한다면, 병원에서 사용하는 시스템 패키지를 구매하는 게 더 효율적일 수 있다. An object-oriented design process 객체지향 개발 방법론은 굉장히 넓고 방대한 과정을 포함하기에 간단한 시스템이나 agile 경우 일부만 추출해 사용하는 것이 좋다. Process Stage Define the context and modes of use of the system - use case, table 이용 Design the..
[소프트웨어공학] Architectural Design
·
CS/소프트웨어공학
Architectural Design이란? 시스템 전체 골격을 세우는 단계 sw system 안에서 요소와 객체가 어떻게 구성될 것인지 결정 requirement engineering과 디테일한 설계의 중간 연결 단계 일부 명세 작업과 병행하는 경우도 있음 (Twin-Peak) 주요한 시스템 구성요소와 해당하는 커뮤니케이션을 식별 및 정의하는 것을 포함 명확한 구조의 장점 Stackholder communication System Analysis .. 비기능적 요구사항을 충족 가능한지 분석 Large scale reuse : 요구사항이 유사하다면 구조가 비슷하므로 큰 스케일로 재사용 가능 Architectural representations 엔티티와 블록 관계를 보여주는 단순한 block diagram ..
[소프트웨어공학] System Modeling
·
CS/소프트웨어공학
System Modeling이란? 시스템의 추상적 모델을 개발하는 과정 각 모델에 따라 다른 관점을 가진다 UML 표기법을 기반으로 그래픽적인 표기를 한다 (말로 표현하는 것이 모호하기 때문) 개발자나 고객이 시스템을 이해하고 분석하는 데 도움 Existing and planned system models 이미 동작하는 시스템을 그림, 글로 표현하여 현재 시스템의 문제나 새로운 시스템의 요구사항을 추출하는 데 사용 Stackholders(이해당사자), 개발자들에게 용이한 설명, 요구사항 간결히 전달 model-driven engineering process : 모델링으로 만들어진 기호를 그대로 코드로 구현. (프로그래밍 불필요) System perspective 1) External perspective..
[컴퓨터구조] Branches
·
CS/컴퓨터구조
Conditional Operations (조건부 연산자) 값에 따라 결정을 내리는 연산자이다. 조건이 true인 경우 labeled instruction으로 branch한다? 조건이 아닌 경우 continue 한다. beq, bne, j의 세 가지 연산자 먼저 보면 1) beq rs, rt, L1 - rs, rt가 같으면 L1로 점프한다. 2) bne rs, rt, L1 - rs, rt가 같지 않으면 L1로 점프한다. 3) j L1 - 그냥 L1으로 점프한다. C에서 쓰는 if-Else가 어떻게 컴파일링될까? if (i==j) f = g + h; else f = g - h; 다음과 같은 c코드가 있다. 한줄씩 해석하면 i가 j와 같다면 + 연산을 하고, 그렇지 않다면 - 연산을 하라는 것이다. 이는 M..
[git] 삭제한 로컬 브랜치 원격저장소에 업데이트하기
·
Git
브랜치 삭제 git branch -d 브랜치 강제 삭제 git branch -D 삭제한 브랜치를 원격 저장소에 반영 git push origin --delete
[CLOVA Summary / JS] 클로바 API로 텍스트 요약하기
·
JavaScript
토이프로젝트로 GPT3.5 API의 text-davinci-003 모델을 이용해서 1시간 가량의 녹음파일을 보고서로 만드는 것을 해보려고 했었는데, 딥러닝에서 텍스트 토큰화를 할 때 한글의 토큰이 영어보다 2.5배 가량 많아져서 (한글의 조사, 어미 때문이라고 함) 저 많은 용량을 하긴 힘들거 같아서 gpt api를 사용하지 않기로 했다. 그래서 간단하게 네이버 클로바에서 제공하는 CLOVA Summary API를 사용해서 텍스트를 요약하는 기능을 구현했다. CLOVA Summary API 완전 무료는 아니고, 1000회 호출까지 무료 (1회 호출에 2000자까지 요약) 테스트하기에는 충분한 횟수이기 때문에 좋은 것 같다. NAVER CLOUD PLATFORM cloud computing services..
[VITO STT API / JS] 음성파일을 텍스트로 변환하기
·
JavaScript
네이버의 클로바 노트의 stt와 요약 기능을 직접 만들어보았다. 음성 파일을 입력받아 요약본을 만들어 주는 간단한 웹사이트를 만들었다. 음성 파일을 텍스트로 변환하고, 변환한 텍스트를 기반으로 요약본을 만들어야 하므로 STT API와 요약 기능을 제공하는 API가 필요하다. 이번 포스트에서는 STT API만 다룰 예정이다. STT API 클로바와, 구글 stt, 그리고 VITO의 음성인식 api가 인식률이 높은 것으로 알고 있다. 나는 VITO api를 사용하기로 했는데, 세 가지 중에 무료 제공량이 가장 많았다. (월 100시간) 인식률도 좋았고, 동시 접속 채널과 화자 분리 등 지원하는 기능도 많았다. VITO Developers 눈으로 보는 통화 VITO developers.vito.ai 위 사이트..
[백준 알고리즘] 1439번: 뒤집기 (JavaScript / JS / 자바스크립트)
·
알고리즘/백준
문제 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. 예를 들어 S=0001100 일 때, 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다. 하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다. 문자열 S가 주어졌을 때, 다솜이가 해야하는 행동의 최소 횟수를 출력하시오. 입력 첫째 줄에 문자열 ..
[알고리즘] 그리디 알고리즘 (Greedy Algorithm / 탐욕 알고리즘)
·
알고리즘/개념
그리디 알고리즘 (Greedy Algorithm) 그리디 알고리즘은 "현재 상황에서의 최적해를 선택하는 방식"이다. 백트래킹을 통해 추가적인 점검을 하지 않고, 현재 선택지 이외에는 검증을 하지 않는다. 하지만 그 해가 항상 최적해라는 보장을 할 수 없다는 한계가 존재한다. 위와 같은 최소 가중치 문제에서, 그리디 알고리즘을 적용하면 7과 10중에 7을 선택하고, 12와 15중에 12를 선택하여 7 + 12 = 19의 가중치를 해로 갖게 된다. 그러나 그림을 보면 알 수 있듯이 실제 최소 가중치는 10 -> 5를 선택하는 15이다. 그리디 알고리즘을 적용했을 때, 매 선택마다 부분 최적해는 구했지만, 전체 최적해를 구하지 못한 것이다. 따라서 그리디 알고리즘은 항상 최적해를 보장하지 못한다고 할 수 있다..