CS/Software Engineering 9

[소프트웨어공학/Software Engineering] 시스템 설계와 구조 - system design and architecture

이번 글에서는 시스템 설계와 구조에 대해서 글을 작성해보고자 한다. 소프트웨어 아키텍처(software architeture)서브시스템과 컴포넌트를 찾아서 이들 사이의 관계(인터페이스)를 정의해야 한다.서브시스템을 나누었을 때의 장점독립적인 개발 단위가 줄어들고, complexity가 작아진다.(재사용성이 높아지고, 유지보수에 용이하며, 이식성이 높아진다.)서브시스템은 Layering & Partitioning 과 MVC 두 가지 방법으로 나뉜다.Layering & PartitioningLayering : 서브시스템을 수직으로 나누는 것Partitioning : 같은 레이어 안에서 기능별로 서브시스템을 나누는 것Layering은 두 가지로 또 나뉘는데closed architecture인접한 레이어에 메세..

[소프트웨어공학/Software Engineering] 형상 관리(CM: Configuration Management)란?

이번 글에서는 소프트웨어 공학에서 말하는 형상 관리에 대해 알아보고자 한다. 소프트웨어 시스템은 개발과 사용 중에 끊임없이 변경된다. 시스템 요구사항이 변경되고 시스템의 새로운 버저네서 이런 변경이 구현되어야 한다는 것이다. 하드웨어가 변경되면 소프트웨어가 변경되어야 한다. 경쟁사가 새로운 기능을 도입하면 그것에 대응해야 하는 것도 포함이다. 그렇기 때문에 대부분의 시스템은 버전들의 집합(set)으로 생각될 수 있으며, 각각의 버전들은 유지되고 관리되어야 한다.형상 관리형상 관리(CM : Configuration Management)는 변화하는 소프트웨어 시스템을 관리하기 위한 정책, 프로세스, 그리고 도구들과 관련된다. 각각의 시스템 버전에 어떤 변경들이 있고 컴포넌트 버전들이 포함되어 있는지를 놓치기..

[소프트웨어공학/Software Engineering] 객체지향과 인터페이스

지난 글에서는 다형성에 대해 예제 코드와 함께 알아보았다.이번에는 객체지향에 관한 마지막 내용을 정리해보고자 한다. 객체지향의 장점1. 비용 절감재사용 가능한 컴포넌트를 활용하여 개발 시간 감소2. 소프트웨어 품질 향상캡슐화 + 다형성 을 통한 높은 모듈화시스템 간 결합도 감소3. 유지보수 용이성변경이 필요한 부분이 제한된다.확장과 수정이 쉽다.4. 설계와 구현의 연결성분석 → 설계 → 코드로 자연스럽게 이어진다.Abstract Class vs. InterfacePure Virtual Functionvirtual int getSalary() const = 0;구현이 없는 함수반드시 subclass에서 구현해야 함Abstract Class (C++)하나 이상의 pure virtual function 포함객..

[소프트웨어공학/Software Engineering] Polymorphism 다형성

지난 글에서 밝혔던 바와 같이 이번 시간에는 polymorphism에 대해서 알아보려고 한다. Polymorphism다형성이라고 하며, 하난의 메시지에 대해 서로 다른 객체가 서로 다른 방식으로 응답할 수 있는 기능이다.메시지를 보내는 객체는 어느 객체가 받을지 알 필요가 없다.one interface, multiple implementations연산 오버라이딩(상속) + 동적 바인딩 을 통해 구현된다.클래스 차원의 encapsulation(캡슐화)를 구현한 구조이다.superclass가 subclass들을 encapsulation 한다.메시지를 보내는 객체는 그 component 중에서 superclass의 interface만 알고 있으면 된다.내부의 상속 구조에 대해 전혀 알 필요가 없다. (누가 누..

[소프트웨어공학/Software Engineering] 객체 지향이란?

이번 글에서는 객체지향의 개념에 대해서 정리하고자 한다.객체지향의 개념에는 Abstraction(추상화), Encapsulation(캡슐화), Inheritance(상속), Polymorphism(다형성) 이 있다, 다형성 같은 경우는 예시 코드와 함께 다음 글에서 살펴보도록 하자. 객체 지향의 등장 배경 및 목적SW modulization (소프트웨어 모듈화)HW의 부품처럼 SW도 모듈화해서 각 모듈이 서로 독립적으로 동작하도록 설계하였다.개발과정전체 기능을 모듈 단위로 분해 → 각 모듈의 인터페이스 정의 → 각 모듈 독립적 개발 → 통합서로 간의 의존성을 획기적으로 감소시킨다.재사용, 유지보수 및 코드 분석이 용이하다.여기서 말하는 module(모듈)은 SW 설계에서 독립적인 기능 및 개발 단위를 말..

[소프트웨어공학/Software Engineering] 애자일 소프트웨어 개발

이번 글에서는 애자일 소프트웨어 개발에 대해서 정리하고자 한다. 우선 다루는 주제는 아래와 같다.Agile development (애자일 개발)Extreme Programming (XP)Aglie vs. Plan-driven올바른 소프트웨어 프로세스 모델 선택애자일 개발배경소프트웨어 프로세스의 과도한 오버헤드에 대한 불만이 있었다.목표과도한 재작업 없이 변화하는 요구사항에 빠르게 대응하여 시스템 전달 시간을 줄이는 것을 목표로 둔다.아래는 Plan-driven과 Agile development 방식에 대한 도식화 그림이다.Agile 개발특징점진적 개발여러 버전/증분으로 개발소규모.빈번한 릴리즈반복적 접근고객 참여팀과의 지속적 협업문서화로 프로세스 오버헤드 감소적용성소규모, 한 장소에 모인 팀맞춤형 개발에..

[소프트웨어공학/Software Engineering] 소프트웨어 프로세스 (2)

이번 글에서는 지난 글에 이어서 프로세스 활동, 소프트웨어 명세, 소프트웨어 설계 및 구현 등에 대해 알아보자. 프로세스 활동기본 프로세스 활동Specification (명세)Design and implementation (설계 및 구현)Validation (Testing) (검증)Evolution (Maintenance) (진화)각 개발 프로세스마다 조작 방식이 다르다.waterfall model (폭포수 모델) : 순차적 조직incremental development (점진적 개발) : 활동이 상호 교차됨Software specification (소프트웨어 명세)시스템이 제공해야 할 서비스와 시스템 운영 및 개발의 제약 조건을 정립하는 과정이다.Requirements engineering proces..

[소프트웨어공학/Software Engineering] 소프트웨어 프로세스 (1)

지난 글에 이어서 소프트웨어 프로세스에 대해서 알아보자. The software process (소프트웨어 프로세스)소프트웨어 프로세스란 소프트웨어에서 시스템을 개발하는 데 필요한 구조화된 활동의 집합이다.다양한 소프트웨어 프로세스가 존재하지만 모두 아래의 내용을 포함하고 있다.Specification (명세)Design and Implementation (Development) (설계 및 구현)Validation (Testing) (검증)Evolution (Maintenance) (진화)소프트웨어 프로세스 모델특정 관점에서 본 프로세스의 표현으로 볼 수 있다.Plan-driven and agile processes (계획 주도 및 애자일 프로세스)Plan-driven processes모든 활동이 사전에..

[소프트웨어공학/Software Engineering] 소프트웨어란?

이번 글에서는 소프트웨어에 대해서 알아보고자 한다. 소프트웨어는 아래의 세 가지를 포함한다.computer programs (컴퓨터 프로그램)system documentation (시스템 문서)user documentation (사용자 문서)소프트웨어 제품은 다음과 같이 나뉜다.Generic (범용 소프트웨어)누구나 구매할 수 있도록 개발된 소프트웨어예) Excel, Word, CAD 소프트웨어 등Customized (맞춤형 소프트웨어)특정 고객의 요구에 맞게 개발된 소프트웨어예) 전자상거래 소프트웨어, 실시간 운송 추적 소프트웨어 등소프트웨어 명세는 범용 소프트웨어 개발자가, 맞춤형 소프트웨어는 고객이 결정한다.(Generic+Customized)예) ERP 소프트웨어그렇다면 소프트웨어 공학이란 무엇일..