지난 글에서는 커뮤니케이션 다이어그램 대신 그릴 수 있는 시퀀스 다이어그램에 대해 정리하였다.이번 글에서는 커뮤니케이션 다이어그램 / 시퀀스 다이어그램을 통해 그렸던 analysis class diagram 에 detailed design 을 추가하는 방법을 정리해본다. 클래스 다이어그램에 detailed design 을 추가하는 것은 다음 작업들을 하는 것이다. 1. 어트리뷰트 타입 추가클래스 다이어그램에 어트리뷰트를 기술할 때는 다음과 같이 기술한다. 이름 : 타입 = 초기값 {특성 값} 특성 값에는 constant, fixed, not null 과 같은 특성을 기술한다.이름 앞에 / 를 붙이면 상속받은 (derived) 특성을 나타내고, 밑줄을 그으면 class-scope(static) 변수를 나타..
지난 글에서는 use case description 으로부터 시스템을 설계하는 class diagram 을 만드는 과정을 정리하였다.이때 중간에 오브젝트 간 상호작용을 표현하는 방법으로서 communication diagram 으로 상호작용을 표현했다.이번 글에서는 sequence diagram 이라는 또 다른 오브젝트 간 상호작용 표현 방법을 정리해본다. Sequence Diagram시퀀스 다이어그램은 오브젝트간 상호작용을 시간순으로 나타낸 다이어그램이다.그리고 이 상호작용의 디테일 정도는 계층을 나눠서 필요한 만큼만 표현한다.한번에 모든 상호작용의 전체 디테일을 다 표현하면 너무 복잡하기 때문이다. 시퀀스 다이어그램은 클래스 다이어그램을 그리기 전 커뮤니케이션 다이어그램 대신에 그릴 수 있는 다이어그..
소프트웨어 개발의 주요 단계를 다시 정리해보면 다음의 5단계를 거쳐서 소프트웨어를 개발한다. 1. specification2. design3. implementation4. test5. maintenance specification 단계에서는 사용자의 요구사항을 파악하고, use case diagram 을 통해 시스템의 기능을 시각화하였다.그리고 사용자의 액션에 따라서 시스템이 어떻게 응답해야 하는지 use case description 을 작성하여 시스템에서 개발해야 하는 부분이 어디인지 명확하게 정의하였다. 이번 글부터는 design 단계를 진행한다.design 단계에서는 앞서 파악한 요구사항을 분석하여, 실제로 프로그램을 개발할 때 어떤 클래스와 메서드를 사용할 지 설계한다.이 과정을 마치고나면 커..
지난 글에서는 뉴럴 네트워크와 역전파에 대해 정리하였다. 뉴럴 네트워크는 기계학습에서 학습시키는 함수의 새로운 형태로, 여러 단위 함수의 중첩함수 형태이다.뉴럴 네트워크를 학습시킬 때도 로스를 구해서 로스의 값이 줄어드는 방향으로 학습시키게 되는데, 경사하강법을 사용하는 경우 미분 값이 필요하다. 여러 함수들이 합성된 뉴럴 네트워크에서 미분값을 구하기 위해, 데이터를 넣어서 전체 값을 계산하는 추론 과정과, 해당 값을 이용해서 각 레이어의 미분값을 구하는 학습 과정이 일어난다.학습 과정에서는 역전파를 통해 각 레이어의 미분값을 구해두고, 업데이트 하려는 값에 대해서만 미분값을 활용하여 경사하강법과 같은 방식으로 다음 w 값을 업데이트 한다. 이번 글에서는 CNN 에 대해서 정리해보려고 한다.사실 딥러닝..
Configuration Management (CM)CM은 소프트웨어 시스템의 변화를 관리하는 도구, 프로세스, 정책과 관련된 개념이다.특히 팀 프로젝트를 하다보면 각 개발자들이 서로 다른 변화를 만들어내기 때문에 이 변화들을 관리하기 위해 필수적이다. 소프트웨어 컴포넌트의 확정된 변경사항은 버전별로 repository 라는 공동 저장소에 저장되어 있고, 개발자들은 repository 에 있는 코드를 자신의 workspace 로 가져와서 개발한다. CM 에서 수행하는 활동은 크게 4가지가 있다. 1. version management시스템 컴포넌트를 버전 별로 추적 관리하는 것 2. system building컴포넌트, 데이터, 라이브러리를 모아서 하나의 실행가능한 프로그램으로 만드는 것 3. chan..
Use Case Diagramuse case diagram 을 그리는 목적은 크게 2가지가 있다. 1. 시스템의 functionality (functional requirement) 를 '사용자의 관점'에서 문서화하는 것2. 사용자와 시스템 사이의 상호작용을 use case description을 사용해 문서화하는 것 이때 use case description 을 작성하면, 시스템 관점에서 어떤 기능을 개발해야 하는지 명료하게 정리된다.그러면 이 내용을 기반으로 시스템을 설계하고 구현하면 끝이다. use case diagram은 철저하게 '사용자의 관점' 에서 작성해야 한다.사용자가 로그인 화면에서 아이디와 비밀번호를 입력하고 로그인 버튼을 클릭했을 때, 시스템이 사용자 정보를 DB에서 조회하고.. 하는..
Neural Network이제 딥러닝의 기본적인 아이디어인 인공 신경망과 역전파(back propagation) 에 대해 정리해보려고 한다.사실 딥러닝도 기존의 전통적인 기계학습과 크게 보면 다르지 않다. 전통적인 기계학습 파이프라인을 간단하게 정리해보면 데이터를 모아서 전처리하고, 해당 데이터를 인풋으로 넣었을 때 원하는 결과를 내보내는 함수를 찾기 위해 함수의 형태를 정의하고, 함수의 계수를 찾는 문제였다. 뉴럴 네트워크는 여기에서 함수의 형태만 바꾼 것이다.전통적인 기계학습에서는 간단하게 선형 함수를 사용했다면, 뉴럴 네트워크에서는 입력 데이터에 대해 리니어 매핑을 해주고, 논 리니어 매핑을 해준다. 이 결과를 다시 어떤 함수의 입력으로 넣어서 리니어 매핑하고, 논 리니어 매핑하고 내보내고, 다시..
Linear Classification지금까지 선형회귀, kNN, SVM, k-menas, PCA 등 지도/비지도 학습으로 회귀 및 분류 모델을 만드는 과정을 살펴보았다.이번 글에서부터는 분류 모델 중 선형 분류 모델에 대한 일반적인 이야기에서 시작하여 딥러닝에 대한 정리를 시작한다. 기계학습은 결국 입력값과 출력값이 주어졌을 때 이 둘을 잘 매핑하는 함수를 찾는 문제였다.이때 지도 학습은 입력값과 출력값을 모두 활용해서 함수를 찾고, 비지도 학습은 입력값만 가지고 함수를 찾는다는 차이가 있었다. 하지만 함수를 쌩으로 찾는 것은 쉽지 않다보니 함수의 형태를 정의하고, 그 함수식에서 비어있는 계수를 찾자는 parameteric approch가 등장했다.파라미터를 찾을 때는 Loss function 과..
요구사항 분석 과정이번 글에서는 Software Activity 글에서 정리했던 요구사항 파악 단계를 구체적으로 정리해본다.먼저 요구사항을 파악할 때는 다음 3가지 단계를 거쳐야 한다. 1. 기존 시스템을 파악한다.2. 기존 시스템에서 문제점을 파악한다.3. 현재 시스템에 없는 새로운 요구사항이 있는지 파악한다. 요구사항을 파악할 때, 기존 시스템을 이해하는 것이 필요한 이유는 다음과 같다. - 기존 시스템에 존재하는 기능이 새로운 시스템에서도 계속 필요할 수 있다.- 기존 시스템에 존재하는 데이터를 새로운 시스템에 그대로 옮겨야 한다.- 기존 시스템의 기술 문서는 기존 시스템의 알고리즘 흐름을 자세히 파악하는데 도움이 된다.- 기존 시스템의 결함을 파악해서 새로운 시스템에는 같은 결함이 없도록 해야 한..
지금까지 소프트웨어 공학의 중요성 및 주요 개발 프로세스 모델들의 특징과 객체 지향 개념에 대해서 정리하였다.이번 글부터는 '요구사항 분석 - 설계 - 구현 - 검증 - 유지보수' 단계에서 요구사항 분석, 설계, 검증에 대한 내용을 자세히 정리한다. 먼저 요구사항 분석에 앞서 요구사항을 분석한 내용을 기반으로 다이어그램을 그릴 필요가 있기 때문에, '모델' 과 '다이어그램' 에 대해서 간단히 정리해보려고 한다. 모델모델은 현실 또는 상상의 무언가를 표현하는 것을 말한다.이때 모델이 유용하려면 아래로 내려갈수록 디테일하게 적절히 계층적 구조로 묘사되어야 하고, 현재 task에서 중요한 부분을 잘 나타내어야 한다.지금은 소프트웨어 공학을 보고 있으므로 소프트웨어 시스템을 모델로 표현하게 되는데, 대부분의 소..