CS/소프트웨어개발방법론 29

스크럼

스크럼이란? - 프로젝트 관리를 위한 에자일 방법론 - 3가지 산출물, 3가지 미팅이 있음 - 15분의 제한된 시간 동안 서로의 문제점을 투명하게 공유하고 커뮤니케이션하며, 정형화된 틀이 아닌 개개인의 경험을 중시하여 유동적으로 프로젝트 방향을 이끌어나가는 것을 인정한다. 3가지 산출물 1. 제품 백로그 : 제품에 담고자 하는 "기능"들을 정리한 목록. 제품 책임자가 우선순위 결정. 2. 스프린트 백로그 : 스프린트 동안 개발할 "과업"을 정리한 목록. 3. 소멸차트 : 개발을 왈료하기까지 남은 작업량을 보여주는 그래프 3가지 미팅 1. 일일 스크럼 : 매일 진행하는 15분간의 프로젝트 진행상황 공유 회의. 각자가 한 일, 문제점 등을 이야기 함. 2. 스프린트 계획 : 스프린트에 대한 목표를 세우고백..

함수형, 객체지향형, 절차지향형의 차이

1. 함수형(선언형) 프로그래밍 - 선언형 : 무엇을 풀어내는가에 집중하고, 프로그램은 함수로 이루어져 있다는 패러다임 - 함수형 프로그래밍 : 순수함수들을 블록처럼 쌓아서 로직을 구현하고, '고차함수'를 통해 재사용성을 높인 패러다임 * 순수함수 : 출력이 입력에만 영향을 받는 함수 * 고차함수 : 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는것. 해당언어가 일급객체라는 특성을 가져야 함 * 일급객체 : 변수에 함수를 할당할 수 있고 함수안에 함수를 매개변수로 받고, 반환하는것이 가능한 언어 2. 객체지향형 프로그래밍 2.1 네가지특성 - 추상화 : 복잡한 시스템으로 부터 핵심적인 개념또는 기능만 간추리는 것 - 캡슐화 : 객체의 속성과 메소드를 하나로 묶고 일부를 감추어 은닉화 - 상속..

라이브러리 프레임워크 차이

라이브러리와 프레임워크의 공통점 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것. 라이브러리와 프레임워크의 차이점 라이브러리 항목 프레임워크 사용자가 가지고 있음 (폴더명 파일명 등에 대한 규칙이 없음) 흐름 제어 권한 사용자가 가지고 있지 않음 (폴더명 파일명 등에 대한 규칙이 정해져 있음) "가위"라는 도구를 사용하여 내가 직접 컨트롤 함 예시 "비행기"라는 도구를 타고 이동하지만, 비행기를 내가 컨트롤하진 않음 텐서플로우, 파이토치 종류 예시 자바 스프링, 파이썬 플라스크, 파이썬 장고

XML, HTML

XML - 인간과 응용프로그램간, 혹은 응용프로그램 간에 정보를 쉽게 교환하기 위해 만든 데이터 교환 포멧 - 데이터를 저장하고 전달할 목적으로 만들어진 언어 - 데이터를 설명하는 태그를 사용자 마음대로 정의할 수 있음 HTML - 웹페이지의 구조를 만드는데 사용되는 언어 - 데이터를 어떻게 표현할지를 정의하는 언어 - 태그로 구성이 됨

프로그래밍 언어들의 특징

자바스크립트 - 페이지 일부 효과추가, 게임, 애니메이션, 웹 인터페이스 효과적 제어 - 대화식 웹페이지 개발에 효과적 코틀린 - 안드로이드 스튜디오를 제작한 jetbrain이 개발한 함수형 언어 - 안드로이드 공식 프로그래밍 언어로 채택되어 안드로이드 개발에 최적화 - 자바와 매우 유사하며 간결함 스위프트 - 애플에서 개발을 위한 프로그래밍 언어 - ios, macOS 개발등에 최적화 됨 - 단순하고 쉬움

오픈소스

오픈소스란 - 소스코드가 공개되어 있고 제작자의 권리를 지키면 누구나 자유롭게 사용할 수 있는 소프트웨어 - 빠르게 서비스를 만들어야 하는 현대 사회에서 필수적인 요소 오픈소스 라이센스 - 오픈소스 개발자와 이용자간의 사용방법 및 조건의 범위를 명시해 놓은 계약 - 오픈소스는 내부에서 사용할 경우 의무사항의 적용을 받지 않고, 외부로 배포 및 판매할 경우 적용된다. - 종류 : GPL(가장엄격), Apache license, MIT 등

요구사항

요구사항 - 고객의 관점에서 고객의 요구를 정확히 파악, 만족시키고 소프트웨어를 효과적(납기지연, 예산초과를 방지)으로 만들 수 있게 함. - "요구사항 개발"과 요구사항이 제대로 반영되어 있는지 지속적인 관리를 수행하는 "요구사항 관리"로 구분 - 요구 시스템의 정확한 목표 식별 - 요구사항 변경관리 위원회(CCB, Change Control Board)설정 요구사항 변경 및 추적관리 - 요구사항의 변경이 필연적이므로 변경 통제와 추적활동이 필수적 - 일관성과 무결성을 제공함 - 요구사항 단위로 관리되어야 효과적 - 문서단위가 아닌 문장단위로 요구사항을 추적해야 함

리펙토링

리펙토링이란 - 프로그램 내부 구조를 개선하는것으로 외부에서 보는 프로그램 동작은 변하지 않는다 - 유지 보수성을 향상시키고, 품질을 높이는 활동 - 소규모 변경 후 동작여부를 테스트하고 다음 리펙토링의 단계로 진행. 만약 작동하지 않을경우 리펙토링 undo 리펙토링의 장점 - 복잡한 코드가 단순화 가독성이 높아진다 - 디버깅이 용이해진다 - 요구사항 변경에 빠르게 대응할 수 있다. 리펙토링 수행절차 1. 조직구성 2. 수행 통제 : 변경관리, 형상관리 3. 수행기법 : 디자인 패턴 4. 테스트 : 단위/통합 테스트, 회귀테스트 5. 결과 정리 : 문서화, 현행화 리펙토링 기법 1. 메소드 정리 - extract method : 그룹으로 묶을 수 있는 코드조직을 별도의 매소드로 뽑아냄 - replace ..

테스팅

테스팅이란 - 어플리케이션 또는 시스템의 동작,성능,안정성이 고객이 요구하는 수준을 만족하는지 확인하는 행위 테스팅 과정 테스트유형 목적 수행주체 환경 단위테스트 단위 모듈 내의 결함 개발조직 개발환경 통합테스트 단위 모듈간의 인터페이스에서 결함 발견 개발조직 또는 테스트 조직 개발환경 또는 테스트환경 시스템 테스트 실제 환경과 유사한 환경에서 전체적 기능, 비기능적 테스트 테스트 조직 실제 사용자 환경과 유사한 환경 인수 테스트 요구사항과의 일치성 확인 사용자 사용자 환경 테스팅 기법 1. 화이트박스 테스트 - 소스코드 내부 구조를 아는 상태에서 코드가 잘 동작하는지 확인하고 오류를 찾아 내는 것 - 개발자의 단위테스트에 많이 사용됨 - 테스트 종류 구분 내용 루프 테스트 루프구조에 제한 조건 테스트 ..

유지보수

유지보수란 - 소프트웨어 생명을 연장시키는 운영중심의 작업단계 - 결함제거, 성능향상, 변화된 환경 적응등의 처리를 함 - 소프트웨어 생명주기에서 차지하는 기간 및 비용이 크다 유지보수의 종류 1. 사유에 의한 유지보수 - 수정유지보수 : 오류로 인한 유지보수 - 적응유지보수 : 데이터 환경과 인프라 환경 변화 적응을 위한 처리 - 완전화유지보수 : 새로운 기능 추가, 변경, 품질을 위한 유지보수 2. 시간에 의한 유지보수 - 계획유지보수 : 주기적 유지보수 - 예방유지보수 : 예방차원의 유지보수 - 응급유지보수 : 유지보수의 사후 승인 필요시 3. 대상에 의한 유지보수 - 데이터/프로그램 보수 : 데이터의 conversion등 - 문서화 유지보수 : 문서표준의 변경이나 기타 필요시 - 시스템 유지보수 ..

형상관리

형상관리 - 소프트웨어 형상관리(SCM, Software Configuration Management)는 소프트웨어 개발과정에서 소프트웨어의 변경사항을 관리하기 위한 일련의 활동. - 소프트웨어 변경의 원인을 찾아 컨트롤하며 적절히 변경되고 있는지 확인하는 작업 - 소프트웨어 개발의 전체 비용감소. - 개발 단계에서 만들어지는 프로그램, 프로그램 설명 문서, 데이터 등을 통칭 형상관리가 필요한 이유 - 가시성 미흡 : 소프트웨어는 무형의 산출물이므로 가시성이 없음 - 컨트롤의 어려움 : 소프트웨어는 눈에 보이지 않으므로 컨트롤하기가 어려움 - 추적성 미흡 : 소프트웨어 개발 전체과정에 대한 추적이 어려움 - 감시의 미비 : 가시성 미흡 및 추적의 어려움으로 프로젝트 관리를 지속적으로 하기 어려움 - 끊임..

CI(Continuous Integration)

CI(지속적인 통합)이란? - 여러명으로 구성된 팀이 작업한 결과를 자주 통합하는 소프트웨어 개발 활동 - 각 개발자는 빌드 및 테스트를 수행한 후 코드 변경사항을 중앙 저장소에 주기적으로 병합. - 지속적인 품질제어(Quality Control)을 실행하여 품질향상과 배포 시 소요되는 시간을 최소화 (과거에는 개발이 완료된 후에 품질제어를 수행하여 시간이 오래걸림) CI의 필요성 - 빌드에 대한 형상 관리 - 개발자가 개발 활동에만 집중할 수 있도록 함 - 코드 통합시 발생하는 문제를 사전에 발견하여 처리 - 잦은 배포를 통해 자주 피드백을 얻는 개발 프로세스 가능 구성도

통합개발환경(IDE)

IDE란 코딩 디버깅 컴파일 등 모든 작업을 하나의 소프트웨어 안에서 처리할 수 있도록 환경을 제공하는 소프트웨어 구성요소 - 편집기 : 프로그래밍을 위한 코드를 입력하고 편집하는 도구 - 빌드도구 : 프로그래밍 언어로 작성한 코드를 기계가 인식할 수 있는 코드로 변화하기 위한 컴파일러, 인터프리터, 링커와 같은 도구 - 디버거 : 오류를 찾아내기 위한 도구 - 프로젝트 관리 : 현업시스템을 제공하여 프로젝트를 관리할 수 있는 도구

인터프리터와 컴파일러

인터프리터 - 원시 프로그램을 한줄씩 저급언어(기계어)로 바꾸어 os에 인식시키는 것 - 고레벨의 언어를 중간코드로 변환하고 이를 각 행마다 실행. - 플랫폼(하드웨어)에 종속되지 않는다 컴파일러 - 고급언어를 한번에 저급언어로 번역(컴파일) *빌드 : 소스코드를 실행가능한 소프트웨어 파일로 만드는것. 컴파일은 빌드과정의 일부분이다. (빌드를 도와주는 툴이 Ant, Maven, Gradle 등이 있다) - 최초 실행하면 실행파일이 생성되고 다음 실행시 생성된 실행 파일이 실행되므로 빠르다 - 하드웨어에 종속된다 - 링커에 의해 목적파일이 다른 목적파일(다른 c파일)과 함께 실행파일로 만들어진다 - 로더에 의해 실행파일이 매모리위에 로드된다 인터프리터, 컴파일러 차이 인터프리터 컴파일러 저급언어로 번역하는..

프로그래밍 언어와 종류

프로그래밍 언어란 - 프로그래밍 언어는 사용자가 일상적으로 사용하는 언어를 가지고 프로그램을 짤 수 있도록 한 것 - 사람과 (0,1만 이해할 수 있는 )컴퓨터가 소통할 수 있도록 하는 것 - 프로그래밍 언어마다 "컴파일러" 혹은 "인터프리터"가 사람이 작성한 코드를 컴퓨터가 이해하는 기게어로 바꿔준다 저급언어, 고급언어 구분 설명 대표적인 언어 저급언어 - 기계 중심적인 언어, 실행 속도가 빠르고, 기계마다 다른 코드를 가짐 - 컴퓨터가 이해하기 쉬운 이진법으로 이루어진 기계어와, 기계어에 대응되도록 만든 어셈블리어가 존재 기계어(machine lanaguage) 어셈블리어(assembly language) 고급언어 - 사람이 이해하기 쉬운 자연어에 가깝게 만들어져 프로그래밍하기 쉽고 가독성, 생산성..

UX와 UI의 차이

UX(User Experiance) - UX(사용자경험)은 사용자의 환경을 개선하려는 설계자의 사고와 행동 - 사용자가 어떤 시스템, 서비스를 통해 목적을 이루려 할 때 느끼는 경험, 감정, 지각, 태도 반응의 종합적인 경험. - 사용자를 위해 편리한 화면 설계와 환경을 연구하고 서비스를 기획하는 과정 UI(User Interface) - 인터페이스 : 두 물체 사이에 서로 접촉하는 부분. - 사용자와 시스템이 정보를 주고 받는 상호 작용이 잘 이루어지도록 하는 장치, 소프트웨어를 의미 차이 UX UI 보이지 않는 것을 연구 보이지 않는 것을 보이게 만드는 구체적 작업 사용자가 느끼는 태도, 행동, 느낌 사용자가 직접 대면하는 환경 사용자의 경험에 대한 통계를 기반으로 두는 연구(과정) UX연구를 통해 ..

객체 지향 설계 5원칙 SOLID

SRP(the single responsibility principle) : 단일책임의 원칙 - 하나의 클래스는 하나의 method만을 갖게 됨에 따라 수정에 대한 이유는 한가지가 되어야 함. - 실제로 사용이 어렵다) OCP(the open closed principle) : 개방 폐쇄의 원칙 - 하나의 클래스는 수정에는 페쇄되어 있고, 확장에는 개방되어 있어야 한다. - 다형성과 추상화에 관련된 내용 - 기능 개선시 직접적인 수정보다는 상속을 통한 개선이 좋음 LSP(the Liskov Substitution Principle) : 리스코프 치환의 원칙 - 상속을 하게 되는 경우 IS-A 관계가 성립하기 때문에 지켜져야 하는 원칙 - 하위클래스는 상위클래스로 참조가 가능한 상속와 관련된 원칙 ISP(..

디자인패턴이란? (Design Pattern)

디자인 패턴이란? 반복적으로 해결해야 할 문제를 어떻게 풀것인지에 대한 솔루션. 1. 생성패턴(creation pattern) : 객체의 생성과정에 관여하는 패턴 - Abstract Factory : 각각의 구체적인 클래스를 지정하지 않고 서로 서로 관련성이 있는 객체들끼리는 쉽게 교체될 수 있도록 고안한 패턴 - Builder : 객체의 생성과 합성, 생성과 표현코드를분리. 인스턴스들이 어떻게 만들고, 어떻게 맞붙는지에 대한 부분을 캡슐화한다. - Factory Method : 부모 클래스에 알려지지 않은 구체 클래스를 생성하는것. 자식 클래스가 어떤 객체를 생성할지 결정하도록 함. 부모 클래스에서 구채 클래스의 이름을 감추기 위해 사용 - prototype(원형패턴) : 프로토타입 객체를 생성하고 이..