Computer Science/소프트웨어 공학 9

[SW 공학] 디자인 패턴 - 바퀴를 다시 발명하지 마라.

디자인 패턴(객체를 어떻게 구성할 것인가?) 이름의 중요성 디자인 패턴 이전에는 명칭이 없어서 같은 내용의 구조를 서로에게 설명해주기위해 수십시간을 낭비. 이름이 곧 개념을 정의한다 디자인 패턴도 이런 자주 사용되는 개념에 이름을 정의한 것. *비슷한 문제 상황을 해결했던 해결책을 잘 기억하고 다시 적용할 수 있다면 유용할 것이다. * 동료 개발자들과 잘 공유하기 위한 방법이 곧 ‘이름’을 지어주는 것이다. 소프트웨어 공학에서 디자인 패턴(Design pattern)은 프로그램 개발 시에 자주 부닥치는 애로 상황에 대한 일반적이고 재사용 가능한 추상화된 해결책이다. 소프트웨어 공학적으로 디자인 패턴은 패러다임과 알고리즘과는 다르다. OOP 패러다임으로 개발을 하든, 함수형 프로그래밍 패러다임으로 개발을 ..

[SW 공학] 객체지향과 좋은 코드

객체지향 현대 소프트웨어 개발에 있어서 가장 중요한 되는 개념 스크립트 언어나 함수형 언어를 접하게 되더라도, 그리고 구조적 언어를 통해 개발을 하게 되더라도 객체지향은 꼭 알고 지나가야 하는 개념이다. 프로그래밍 언어의 기초 문법을 익히고 나서 소프트웨어를 구조적으로 작성하기 위해 배우는 첫번째 단계 불완전성의 관리 관점에서 보면 객체지향은 갈수록 대형화 되어 가는 소프트웨어를 작은 단위로 축소시켜 주는 역할 하위 타입에 대한 은폐를 통해서 작성해야 할 코드의 양을 줄이면서도 수정 및 확장이 용이한 소프트웨어 구조를 만들어 줌. 상속을 통해서는 중복된 코드가 발생하는 것을 막고, 인터페이스와 타입의 개념을 통해서는 내부 구현에 대한 은폐를 가능하게 해줌. 변수 대신 객체를 바꿈으로써 조건문/제어문을 사..

[SW 공학] Software Architecture

https://www.youtube.com/watch?v=4E1BHTvhB7Y Software Architecture Style 아키텍처 설계에서 반복해서 나타나는 문제를 해결하고 아키텍처가 만족시켜야 하는 시스템 품질 속성을 달성할 수 있는 방법을 체계화 한 것 아키텍처를 구성하는 컴포넌트와 커넥터 종류와 이것들이 결합하는 방법 정의 구분 특징 계층형 SW를 계층 단위(Unit)로 분할 각 계층은 모듈들의 응집된 집합 계층간의 관계는 사용가능의 관계로 표현계층적으로 조직화될 수 있는 서비스로 구성된 어플리케이션에 적합 장점 : 정보은닉의 원칙 적용 → 높은이식성 단점 : 추가적인 실행시 오버헤드(너무 많은 계층으로 성능 감소 발생) MVC 모델 : APP의 핵심기능 및 적절한 데이터 캡슐화 뷰 : 사용..

[SW 공학] UML(통합된 모델링 언어)

UML(Unified Modeling Laguage)이란? UML 이전 소프트웨어는 비가시적인 기술 영역. 인간에게 시작 정보가 없는 것은 치명적인 문제. 구조를 이해하지 못한 코드는 설명이 장황해질 수 밖에 없음. 개발자끼리의 소통도 힘들고 비개발자와의 소통도 매우 힘듬. UML은 이런 가시적인 툴로 최초의 보편적 표시 언어. 코드를 보지 않아도 소프트웨어 구조를 이해하게 되었고 코드를 먼저 만들지 않고도 구현 ->시스템 개발자가 자신의 비전을 구축하고 반영하는데 있어서 표준적이고 이해하기 쉬운 방법으로 할 수 있도록 도와주며, 자신의 설계 결과물을 다른 사람과 효과적으로 주고받으며 공유할 수 있는 메커니즘을 제공 시스템(System->비즈니스 문제에 대한 솔루션을 제공하는 소프트웨어와 하드웨어가 합쳐..

[SW 공학] 방법론

방법론 어떻게 접근할 것인가? 소프트웨어 프로세스의 각 작업을 어떻게수행하느냐? 프로세스는 각 단계의 입력자료와 결과물은 제시하지만 그 내용의 표현방법에는 규정되어 있지 않다. 바로 방법론이 표현의 차이를 만드는 것이다. 1. 구조적 방법론 복잡한 문제를 다루기 위해 분할정복 원리를 적용한다. 최초 시스템 전체를 하나의 프로세스로 보고 최상위 레벨의 자료흐름도(DFD)를 그린다. 그 다음 단순한 프로세스가 될 때까지 나눈다음 그것을 차례로 구현하면서 다시 올라온다. 말단 프로세스의 입렵, 출력, 자료구조, 알고리즘을 명시한다. DFD는 현재 업무 프로세스뿐 아니라 새로 제안된 프로세스까지 나타낼 수 있지만 모듈 사이의 구동관계를 나타내기는 한계가 있다. 때문에 구조적 설계를 한다. 구조적 설계는 자료 흐..

[SW 공학] 프로세스와 프로세스 모델

프로세스와 프로세스 모델 프로세스 관리의 목표는 비용과 기간. 컴퓨터를 이용하는 모든 이유는 문제해결 어떤 일을 하기 위한 특별한 방법으로 일반적으로 단계나 작업으로 구성된 것이 프로세스 즉 개발하는 과정, 순서를 말한다. 높은 품질과 생산성을 위한 프로세스. 프로세스가 없는 개발은 즉흥적 개발로 비생산적 개발. 요구 분석을 하지 않아 생기는 비효율, 즉흥으로 부실한 아키텍처, 계획이 없으니 잘했는지 비교대상도, 비용과 일정예측도 없다. 프로세스는 무엇을하는가 방법론은 그것을 어떻게하는가. 소프트웨어 프로세스는 기술적 관리적으로 수행되는 작업의 단계이며 각 단계의 결과물은 다음 단계의 입력이 된다. 그리고 이는 소프트웨어 프로젝트에 적용이 된다. 프로젝트는 프로세스를 이용해 비용, 일정, 품질에 대한 목..

[SW 공학] SW개발절차(feat. 요구분석, 설계론 등)

개발 프로세스의 목표는 생산성 1. 요구분석과 정의 요구사항 분석 정의 시스템 목표를 확립하는 과정을 요구사항 분석과정이라 하며 요구사항 분석은 행동을 취하기 전 문제에 대하여 연구하는 것을 말한다. 요구사항 분석은 시스템이 만족시켜야 할 요구사항의 발견, 정제, 모델링, 그리고 명세화하는 과정 요구사항 분석은 새롭게 만들고자 하는 시스템의 명세를 만들어내는 과정으로 시스템이 만족시켜야 할 기능, 성능, 그리고 다른 시스템과의 인터페이스 등을 규명한다. 요구사항 분석의 최종 산출물은 사용자의 요구사항 명세서 (Requirements Specification)로, 기능 명세서(Function Specification) 또는 목표 문서(Target Document)라고도 부른다. 분석의 특징 소프트웨어 시스..

[SW 공학] 소프트웨어란? 소프트웨어의 공학적 특징

소프트웨어 공학 소프트웨어는 상품. 공학은 좋은 상품을 낮은 가격에 계획대로 만들기 위한 방법론. 소프트웨어란? 단순 프로그램이 아닌 개발, 운용, 보수에 필요한 모든 관련 정보(설계문서가 가장 큰 비중) 설계, 개발과정에서 비용이 많이들고 완제품 생산은 비교적 저비용 소프트웨어엔 물리적인 부품이 없기 때문에 신뢰도의 결정은 생산과정이 아닌 설계과정에서 측정 결함을 설계과정의 테스팅으로 찾아내는 형식.(물리적 검출 불가) 소프트웨어의 특징 복잡성 (complexity) - 수 많은 내부요소들이 있어 상호작용이 많고 복잡하다. 문제가 무엇인지, 요구가 무엇인지 잘 정의하기 힘들다. 요구되는 사항이 서로 상충되어 설계가 어렵다. 순응성 (conformity) - 요구나 환경, 데이터에 따라서 적절하게 변형된..

[SW 공학] 소프트웨어 공학 개요와 공부 목표

소개 소프트웨어 소프트웨어 개발 작업 소프트웨어 공학의 접근법 소프트웨어 공학의 주제 연관 분야 프로세스와 방법론 소프트웨어 생명주기 프로세스 프로세스 모델 지원 프로세스 방법론 프로젝트 계획과 관리 프로젝트 시작 프로젝트 계획과 스케줄링 비용 예측 기법 프로젝트 팀 조직 실행과 모니터링 리스크 관리 요구 분석 요구 요구 추출 요구 분석 유스케이스 요구 명세 요구 검증 요구 모델링 모델링 기초 UML 정적 모델링 동적 모델링 제어 모델링 모델 검증 설계 설계 기본개념 품질 목표 전통적인 설계 원리 객체지향 설계 원리 설계 메트릭 아키텍처 설계와 패턴 소프트웨어 아키텍처란 아키텍처 표현 아키텍처 유형 디자인 패턴은 무엇이며 어떤 패턴 아키텍처 설계는 어떻게 평가 UI 설계 UI 설계 기본 개념 UI 설계 ..