소프트웨어공학
공학이란?
- 수학과 자연과학을 기초로, 가끔은 인문 사회과학의 지식을 이용해서, 공동의 안전, 건설복지를 위해서 유용한 사물이나 환경을 구축하는 것을 목적으로 하는 학문.
- 공학의 영역은 넓고, 여러가지 분야로 세분화
소프트웨어 공학 - 소프트웨어 개발, 운용 유지보수 및 폐기에 대한 체계적인 접근방법.
- 소프트웨어 개발 생명주기
- 소프트웨어를 어떻게 개발할 것인가에 대한 전체적인 흐름
- 주먹구구식, 폭포수, 프로토타이핑, 나선형 등
폭포수 모델(waterfall model)은 순차적인 소프트웨어 개발 프로세스(소프트웨어를 만들기 위한 프로세스)로, 개발의 흐름이 마치 폭포수처럼 지속적으로 아래로 향하는 것처럼 보이는 데서 이름이 붙여졌다. 이 폭포수 모델의 흐름은 소프트웨어 요구사항 분석 단계에서 시작하여, 소프트웨어 설계, 소프트웨어 구현, 소프트웨어 시험, 소프트웨어 통합 단계 등을 거쳐, 소프트웨어 유지보수 단계에까지 이른다.
(출처 : https://ko.wikipedia.org/wiki/%ED%8F%AD%ED%8F%AC%EC%88%98_%EB%AA%A8%EB%8D%B8)프로토타이핑 모델(Prototyping model)은 개발초기에 시스템의 모형(원형, prototype)을 간단히 만들어 사용자에게 보여 주고, 사용자가 정보시스템을 직접 사용해 보게 함으로써 기능의 추가, 변경 및 삭제 등을 요구하면 이를 즉각 반영하여 정보시스템 설계를 다시 하고 프로토타입을 재구축하는 과정을 사용자가 만족할 때까지 반복해 나가면서 시스템을 개선시켜 나가는 방식
(출처 : https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85)나선형 모델(Spiral model)은 폭포수 모델이 단순한 직선적인 개발 접근 방법이라면 나선형 모델은 개발 단계를 반복적으로 수행함으로써 점차적으로 완벽한 소프트웨어를 개발하는 진화적 모델
(출처 : http://gisulsa.tistory.com/231)
- 소프트웨어 개발 방법론
- sw생산하는데 필요한 반복적인 과정들을 정리한 것
- 구조적 프로그래밍, 객체지향, 고속 개발 방법론, 익스트림 프로그래밍(agile), 스크럼, UP…
- Agile(애자일) 개발 프로세스.
- 문서를 통한 개발 방법이 아니라, 실질적인 코딩을 통한 방법론
- adaptive style
- 특정한 개발 방법론을 가리키는 말은 아니고 좋은것을 빠르고 낭비없게 만드는 개발을 가능하게 해주는 다양한 방법론 전체를 말함.
고속 응용 프로그램 개발(高速 應用 프로그램 開發, 영어: Rapid Application Developement, RAD) 또는 고속 응용 프로그램 개발 도구(Rapid Application Development Tool)는 소프트웨어 개발 방식의 하나로, 빠르고 쉽게 응용 프로그램을 만들 수 있는 시각적 도구이다. 통합 개발 환경과 같은 높은 기능의 개발 환경을 사용하는 프로그래밍의 자동화나, 시각적인 사용자 인터페이스의 설계, 모듈개발 등의 기능을 포함하고 있다.
(출처 : https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%86%8D_%EC%9D%91%EC%9A%A9_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8_%EA%B0%9C%EB%B0%9C)익스트림 프로그래밍(영어: eXtreme Programming, XP)는 켄트 백 등이 제안한 소프트웨어 개발 방법이다. 비즈니스 상의 요구가 시시각각 변동이 심한 경우에 적합한 개발 방법이다. 이 방법은 애자일 개발 프로세스라 불리는 개발 방법 중의 대표적인 하나로 꼽히며, 약칭인 ‘XP’로 잘 알려져 있다. 이 방법은 10~12개 정도의 구체적인 실천 방법(Practice)을 정의하고 있어, 비교적 적은 규모의 인원의 개발 프로젝트에 적용하기 좋다. 개발 문서 보다는 소스코드를, 조직적인 개발의 움직임 보다는 개개인의 책임과 용기에 중점을 두는 경향이 크다.
(출처 : https://ko.wikipedia.org/wiki/익스트림프로그래밍)스크럼(Scrum)은 프로젝트관리를 위한 상호,점진적 개발방법론이며, 애자일 소프트웨어 공학 중의 하나이다. 스크럼(Scrum)은 소프트웨어 개발 프로젝트를 위하여 고안되었지만, 소프트웨어 유지보수 팀이나 일반적인 프로젝트/프로그램 관리에서도 적용될 수 있다.
(출처 : https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%81%AC%EB%9F%BC_(%EC%95%A0%EC%9E%90%EC%9D%BC_%EA%B0%9C%EB%B0%9C_%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4))추가적인 애자일 소프트웨어 개발에 대한 것은 https://ko.wikipedia.org/wiki/%EC%95%A0%EC%9E%90%EC%9D%BC_%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EA%B0%9C%EB%B0%9C 참조.
- UML (unified modeling language) /공부
- 통합 모델링 언어
통합 모델링 언어(UML, 영어: Unified Modeling Language)는 소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어이다. 이 표준은 UML을 고안한 객체 관리 그룹에서 관리 하고 있다.
(출처 : https://ko.wikipedia.org/wiki/%ED%86%B5%ED%95%A9_%EB%AA%A8%EB%8D%B8%EB%A7%81_%EC%96%B8%EC%96%B4)
- tdd ( test-driven developement)
- 테스트 주도 개발
- 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스
- 결함을 점검하는 자동화된 테스트 케이스를 작성
- 케이스를 통과하기 위한 최소한의 양의 코드를 생성
- 새코드를 표준에 맞도록 리팩토링
테스트 주도 개발(Test-driven development TDD)은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. 우선 개발자는 바라는 향상 또는 새로운 함수를 정의하는 (초기적 결함을 점검하는) 자동화된 테스트 케이스를 작성한다. 그런 후에, 그 케이스를 통과하기 위한 최소한의 양의 코드를 생성한다. 그리고 마지막으로 그 새 코드를 표준에 맞도록 리팩토링한다.
(출처 : https://ko.wikipedia.org/wiki/%ED%85%8C%EC%8A%A4%ED%8A%B8_%EC%A3%BC%EB%8F%84_%EA%B0%9C%EB%B0%9C )
- pdd (planed driven ) / 공부
계획 중심 소프트웨어 개발은 응용 프로그램을 만드는 데있어보다 공식적인 방식입니다. 계획 기반 방법론은 반복성 및 예측 가능성, 정의 된 증분 프로세스, 광범위한 문서화, 선행 시스템 아키텍처, 세부 계획, 프로세스 모니터링, 제어 및 교육, 위험 관리, 검증 및 검증을 통합합니다.
(출처 : https://en.wikiversity.org/wiki/Plan-driven_software_development)
- 형상관리 - SW개발 및 유지보수과정에서 발생하는 소스코드문서, 인터페이스 등
- 버전관리 - 형상관리의 일부, 일반적 소프트웨어 소스 코드만의 형상관리.
- 프로젝트 관리
프로그래밍 언어
– 내가 쓰는 프로그래밍 언어, 어디서 왔나? (http://www.bloter.net/archives/196775)
언어의 종류 - 고급언어에서 저급언어로 변환되는 과정에 따른 분류
- 컴파일 언어 - c, c++, go
- 바이트코드 언어 - java, c#
- 인터프리터 언어 - basic, javascript, python, ruby.
페러다임에 따른 분류 - 프로그래밍의 관점
- 객체지향 프로그래밍 패러다임, 함수형 프로그래밍 패러다임
객체지향 프로그래밍
- 클래스와 객체 - 실질적인 형태.(클래스의 객체화)
- 클래스 - 객체가 가질수 있는 속성과 행위를 정의하는 틀(탬플릿, 설계도)
클래스 -> 객체
프로그래밍 용어
- 개발자(developer) - 프로그래머, 기획자, 디자이너 등등
- 서버 & 클라이언트 : 서버 – 데이터 제공 –> 클라이언트, 서버와 클라이언트는 상대적임.
- 백엔드 프론트엔드 : 사용자나 외부에서 프로그램을 볼때 보이는 부분이 프론트 엔드, 안보이는 부분은 백엔드, 이것도 상대적임.
- Thread - 프로세스 내에서 작업이 실행되는 흐름의 단위
- 멀티 스레드 - 다중 스레드
- 멀티 스레드 vs 멀티 태스크
- Library
- 특정 기능을 수행할 수 있는 클래스 또는 함수의 집합체
- 수학 라이브러리
- 애니메이션 라이브러리
- 문자열 라이브러리
- 특정 기능을 수행할 수 있는 클래스 또는 함수의 집합체
- API (application programming interface)
- 응용소프트웨어와 프레임워크 사이의 중간매체(방법)
- 소프트웨어간 통신을 위해 메시지를 전달하는 방식 등이 결정된것.
- Framework - 구조적으로 고정된 부분을 재사용할 수 있도록하고, 응용별 특정기능을 추가적인 사용자 작성 코드에 의해 선택적으로 구현 가능하도록 하는 포괄적인 추상구조, 그리고 이를 지원하는 소프트웨어 플랫폼
용어 | 비유 |
---|---|
프레임워크 | 국가(정부) |
API | 국가기관 |
라이브러리 | 직무전문가 |
프로그래밍언어 | 국가 통용 언어 |
레퍼런스 문서 | 국가 조직도 및 기능 설명서 |
* Android + Java
- android라는 나라모양에 내가 원하는 일을 할 수 있는 기업을 세우는것
- android라는 나라에서는 java라는 언어를 통해 의사소통을 할 수 있다.
- 디자인 패턴
- 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나
- 과거의 소프트웨어개발과정에서 발견된 설계 노하우에 이름을 붙여 이후에 재이용하기 좋은 형태로 묶어서 정리한 것.
- 종류
- MVC(model view controller)
- MVVM(model view view model)
- Obserber
- singleton
- prototype
MVC 참조 : https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC
MVVM 참조 : https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel
나머지 참조: https://ko.wikipedia.org/wiki/%EB%B6%84%EB%A5%98:%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4
- reference document
- 레퍼런스 문서
- api에 대해 서술해 놓은 문서
- IDE (Intergrated Development Environment) - 통합 개발 환경 (Android Studio, Visual studio, Xcode 등)
- SDK (software development kit) - 소프트웨어 개발에 필요한 도구의 모음, IDE + Framework + Tools….
- 현업 - 웹프로그래머, 모바일 프로그래머,웹서버 프로그래머, 디자이너, 기획자, 다른 클라이언트 프로그래머, 사용자 등)
특이사항
MARKDOWN… 코드 블럭은 다른 곳에서는 행 번호까지 지원되는거 있던데…
다른 글을 퍼가기 못하게하고 코드만 퍼가게 할수 있는 방법은 없는가???
'컴퓨터구조 및 자료구조' 카테고리의 다른 글
프로그래머가 이해해야하는 것 - 이진수, 십진수, 십육진수, 비트, 바이트 (2) | 2018.10.06 |
---|---|
달팽이 코드 (0) | 2017.02.05 |
DAY004. DB and Network (0) | 2017.01.12 |
DAY003. Computer Sciensce & Data Structuer & Algorithm (1) | 2017.01.11 |
DAY002. Git Command and Computer Science (1) (1) | 2017.01.10 |
댓글