소프트웨어 설계
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
소프트웨어 설계는 소프트웨어 시스템을 구축하기 전에 다양한 측면을 모델링하는 과정이다. 소프트웨어 설계는 소프트웨어 요구 사항 분석, 설계 원칙, 설계 고려 사항, 모델링 언어, 디자인 패턴, 설계 방법론 등 다양한 요소를 포함한다. 설계는 코딩 전에 제약 조건, 명세, 요구 사항을 조정하기 위해 검토될 수 있으며, 다학제 디자이너와 전문가가 프로그래머와 협력하여 유용하고 기술적으로 건전한 소프트웨어를 제작하는 데 기여한다. 추상화, 모듈성, 확장성, 유지 관리성, 보안, 사용성 등 다양한 설계 원칙과 고려 사항을 통해 소프트웨어의 품질을 향상시킨다. 디자인 패턴은 소프트웨어 개발 공정을 가속화하며, 설계 방법론은 실제 시스템 설계에서 템플릿 역할을 한다.
더 읽어볼만한 페이지
- 컴퓨터 관련 직업 - 웹마스터
웹마스터는 웹사이트 관련 업무를 총괄하는 사람으로, 초기에는 시스템 관리자를 의미했으나 웹 기술 발전과 함께 웹사이트 관리, 개발, 콘텐츠 관리, 마케팅 등 광범위한 업무를 수행하는 사람 또는 회사를 포괄하며, 웹사이트 관리자를 위한 공식 연락 창구로도 활용된다. - 컴퓨터 관련 직업 - 소프트웨어 개발자
- 소프트웨어 설계 - 구조적 분석
구조적 분석은 1960년대에서 1980년대 소프트웨어 개발의 복잡성을 해결하기 위해 개발된 기법으로, 다이어그램과 데이터 사전을 활용하여 시스템을 분석하고 설계했으며, 객체 지향 프로그래밍의 등장으로 활용도가 감소했다. - 소프트웨어 설계 - 지속적 배포
지속적 배포(CD)는 소프트웨어 릴리스 프로세스를 자동화하는 접근 방식이며, 배포 파이프라인을 통해 구현되고 시장 출시 시간 단축, 제품 품질 향상 등의 이점을 제공하지만 테스트 자동화 부족 등의 과제도 존재한다.
소프트웨어 설계 | |
---|---|
소프트웨어 설계 개요 | |
정의 | 소프트웨어 솔루션을 계획하는 프로세스 |
관련 학문 | |
관련 학문 | 소프트웨어 공학 |
세부 분야 | 소프트웨어 아키텍처 |
주요 활동 | |
주요 활동 | 소프트웨어 소프트웨어 개발 요구 분석 소프트웨어 아키텍처 소프트웨어 설계 소프트웨어 공학 프로그래밍 소프트웨어 테스트 디버깅 소프트웨어 배포 소프트웨어 유지보수 |
패러다임 및 모델 | |
소프트웨어 개발 방법 | 애자일 소프트웨어 개발 클린룸 소프트웨어 엔지니어링 반복적 개발 소프트웨어 프로토타이핑 스파이럴 모델 V 모델 폭포수 모델 |
개발 방법론 및 프레임워크 | |
개발 방법론 | 적응형 소프트웨어 개발 DevOps 규율 있는 애자일 딜리버리 동적 시스템 개발 방법 기능 중심 개발 반복적 개발 칸반 (소프트웨어 개발) 린 소프트웨어 개발 LeSS 모델 주도 공학 마이크로소프트 솔루션 프레임워크 개인 소프트웨어 프로세스 고속 응용 프로그램 개발 래셔널 통합 프로세스 Scaled Agile Framework 스크럼 (소프트웨어 개발) SEMAT 팀 소프트웨어 프로세스 OpenUP 통합 프로세스 익스트림 프로그래밍 |
개발 지원 | |
개발 지원 요소 | 소프트웨어 구성 관리 소프트웨어 문서화 소프트웨어 품질 보증 소프트웨어 프로젝트 관리 사용자 경험 |
개발 실천법 | |
개발 실천법 | 인수 테스트 주도 개발 행동 주도 개발 집단 코드 소유 지속적 통합 지속적 딜리버리 도메인 주도 설계 짝 프로그래밍 예시를 통한 명세 스탠드업 미팅 테스트 주도 개발 |
프로그래밍 도구 | |
프로그래밍 도구 | 컴파일러 디버거 링커 성능 분석 GUI 빌더 UML 도구 통합 개발 환경 빌드 자동화 애플리케이션 릴리스 자동화 코드형 인프라 :분류:소프트웨어 테스트 도구 |
표준 및 기관 | |
표준 및 기관 | BABOK Capability Maturity Model Integration IEEE 표준 협회 ISO 9001 ISO/IEC JTC 1/SC 7 PMBOK SWEBOK ITIL |
용어집 | |
용어집 | 인공지능 용어집 컴퓨터 과학 용어집 |
2. 소프트웨어 설계의 일반적인 절차
소프트웨어 설계자는 소프트웨어 시스템이 만들어지기 전에 다양한 측면을 모델링할 수 있다. 유능한 설계를 위한 성공 요인은 창의력, 과거 경험, "좋은" 소프트웨어를 만드는 것에 대한 감각, 품질에 대한 헌신이다.[1] 그러나 설계 프로세스가 항상 간단한 절차는 아니다.[1]
소프트웨어 설계 문서는 코딩 전에 제약 조건, 명세, 요구 사항 등을 조정하기 위해 검토되거나 제시될 수 있다.[3] 시뮬레이션이나 프로토타입을 프로그래밍한 후에 검토를 거쳐 재설계가 이루어질 수 있다. 계획이나 요구 사항 분석 없이 코딩 과정에서 소프트웨어를 설계하는 것도 가능하지만,[3] 더 복잡한 프로젝트의 경우 이는 실현 가능성이 낮다. 코딩 전에 별도의 설계를 통해 다학제 디자이너와 전문가가 프로그래머와 협력하여 유용하고 기술적으로 건전한 소프트웨어를 제작할 수 있다.
소프트웨어 설계의 한 요소는 소프트웨어 요구 사항 분석(SRA)이다. SRA는 소프트웨어 개발 프로세스의 일부로, 소프트웨어 공학에 사용되는 명세서를 나열한다.
소프트웨어 설계에는 다양한 원칙이 적용된다. 주요 원칙들은 다음과 같다.
소프트웨어 설계 모델은 건축가가 설계한 주택 설계도에 비유할 수 있다.[1] 상위 수준의 설계는 주택 전체(예: 주택의 3차원 렌더링)를 나타내고, 하위 수준의 설계는 각 세부 사항을 구성하는 지침(예: 배관 배치)을 제공한다.[1] 마찬가지로 소프트웨어 설계 모델은 제안된 소프트웨어 솔루션의 다양한 뷰를 제공한다.[1]
3. 소프트웨어 설계의 중요성
이러한 과정을 통하여 프로그래밍을 시작하기 전에 제약 조건, 요구 사항 등이 명확해지고 검토된다. 또한 시뮬레이션이나 프로토타입 구축을 통해 설계 변경이 이루어지기도 한다. 요구 분석 및 계획 수립 없이 프로그래밍을 하면서 설계를 진행하는 것도 가능하지만, 복잡하고 대규모 프로젝트에서는 그러한 공정의 생략은 선택 사항으로 고려되지 않는 것이 일반적이다. 프로그래밍 전에 설계 공정을 둠으로써, 소프트웨어의 대상 영역 전문가와 설계자가 프로그래머와 공동으로 작업하여 소프트웨어의 편의성과 기술적 정당성을 높일 수 있다.
4. 요구 사항 분석
분석 결과는 해결해야 할 더 작은 문제들이다.
설계는 기능에 초점을 맞추므로 동일한 문제에 대해 여러 개의 설계를 가질 수 있다. 환경에 따라 신뢰할 수 있는 소프트웨어 프레임워크를 기반으로 생성되거나 적절한 디자인 패턴으로 구현되는 등 설계가 달라지는 경우가 많다.
5. 설계 원칙
그래디 부치는 객체 모델에서 추상화, 캡슐화, 모듈성, 계층을 기본적인 소프트웨어 설계 원칙으로 언급한다.[5] PHAME(계층, 추상화, 모듈화 및 캡슐화 원칙)는 이러한 네 가지 기본 원칙을 지칭하는 데 사용되기도 한다.[6]
이러한 원칙들은 설계자가 설계를 체계적으로 진행하고, 변경 사항을 수용하며, 품질을 평가하는 데 도움을 준다.[4]
또한 소프트웨어 설계 시에는 다음과 같은 사항들을 고려해야 한다.
고려사항 | 설명 |
---|---|
확장성 | 기반 아키텍처에 큰 변경 없이 새로운 기능을 추가할 수 있어야 한다. |
견고성 | 고부하 상태나 부정한 입력에도 동작해야 한다. 예를 들어, 사용 가능한 메모리량이 적더라도 동작하도록 설계해야 한다. |
신뢰성 | 일정 기간 동안, 특정 어려운 상황에서도 기능을 수행해야 한다. |
내결함성 | 컴포넌트의 장애를 견디거나, 회복할 수 있어야 한다. |
보안 | 악의적인 행위에 대한 내성을 가져야 한다. |
유지 보수성 | 일정 시간 안에, 특정 상태로 복귀할 수 있어야 한다. 예를 들어, 백신 소프트웨어처럼 정기적인 업데이트가 가능해야 한다. |
호환성 | 다른 제품과 상호 작용할 수 있어야 한다. 또는 과거의 대체 제품과 호환되어야 한다. |
모듈성 | 모듈성을 고려한 설계. 이를 통해 유지 보수성 또한 향상된다. 개발 측면에서도 컴포넌트 단위로 구현하고 테스트할 수 있다는 등의 이점이 있다. 또한, 개발 작업의 분할이 용이해진다. |
재사용 | 모듈성이 좋으면 개별 컴포넌트를 다른 상황에서 재사용할 가능성이 생긴다. |
6. 설계 고려 사항
소프트웨어 설계 시 고려해야 할 사항은 다양하다. 이러한 요소들은 소프트웨어가 충족해야 할 목표와 기대치를 반영하며, 소프트웨어의 품질과 성공에 큰 영향을 미친다. 주요 고려 사항은 다음과 같다.
- 호환성: 소프트웨어가 다른 제품과 상호 운용될 수 있어야 한다. 예를 들어, 이전 버전과의 하위 호환성을 고려해야 한다.[3]
- 확장성: 기본 아키텍처를 크게 변경하지 않고도 소프트웨어에 새로운 기능을 추가할 수 있어야 한다.
- 모듈성: 소프트웨어는 잘 정의되고 독립적인 구성 요소로 구성되어야 유지 관리가 용이하다. 각 구성 요소는 격리되어 구현 및 테스트될 수 있으며, 이를 통해 소프트웨어 개발 프로젝트에서 작업을 분할할 수 있다.
- 내결함성: 소프트웨어는 구성 요소 오류에 대해 저항하고 복구할 수 있어야 한다.
- 유지 관리성: 버그 수정 또는 기능 수정을 얼마나 쉽게 수행할 수 있는지 나타낸다. 높은 유지 관리성은 모듈성과 확장성의 결과일 수 있다.
- 신뢰성 (소프트웨어 내구성): 소프트웨어는 지정된 기간 동안 명시된 조건에서 필요한 기능을 수행할 수 있어야 한다.
- 재사용성: 기존 소프트웨어의 일부 또는 전부를 수정 없이 다른 프로젝트에서 사용할 수 있어야 한다.
- 견고성: 소프트웨어는 스트레스 하에서 작동하거나 예측할 수 없거나 유효하지 않은 입력을 허용할 수 있어야 한다. 예를 들어, 메모리 부족 조건에서도 잘 작동하도록 설계할 수 있다.
- 보안: 소프트웨어는 적대적인 행위와 영향에 견딜 수 있고 저항할 수 있어야 한다.
- 사용성: 소프트웨어 사용자 인터페이스는 대상 사용자가 쉽게 사용할 수 있어야 한다. 매개변수의 기본값은 대다수의 사용자에게 적합한 선택이 되도록 해야 한다.[7]
- 성능: 소프트웨어는 사용자가 허용할 수 있는 시간 내에 작업을 수행해야 하며, 너무 많은 메모리를 필요로 하지 않아야 한다.
- 이식성: 소프트웨어는 다양한 조건과 환경에서 사용할 수 있어야 한다.
- 확장성: 소프트웨어는 증가하는 데이터, 추가된 기능 또는 사용자 수에 잘 적응해야 한다. 마크 브루커(Marc Brooker)에 따르면 "시스템은 추가 작업 부하의 한계 비용이 거의 일정하게 유지되는 범위에서 확장 가능합니다." 서버리스 기술은 이러한 정의에 적합하지만 인프라 비용뿐만 아니라 총 소유 비용을 고려해야 한다.[8]
7. 모델링 언어
모델링 언어는 정보, 지식 또는 시스템을 일관된 규칙 집합으로 정의된 구조로 표현하는 데 사용될 수 있다. 이러한 규칙은 구조 내의 구성 요소를 해석하는 데 사용된다. 모델링 언어는 그래픽 또는 텍스트 기반일 수 있다. 소프트웨어 설계를 위한 그래픽 모델링 언어의 예는 다음과 같다.
- 아키텍처 기술 언어(ADL)는 소프트웨어 아키텍처를 설명하고 표현하는 데 사용되는 언어이다.
- 비즈니스 프로세스 모델링 표기법(BPMN)은 프로세스 모델링 언어의 한 예이다.
- EXPRESS 및 EXPRESS-G (ISO 10303-11)는 국제 표준의 범용 데이터 모델링 언어이다.
- 확장된 엔터프라이즈 모델링 언어(EEML)는 여러 계층에서 비즈니스 프로세스 모델링에 일반적으로 사용된다.
- 순서도는 알고리즘 또는 기타 단계별 프로세스의 개략적인 표현이다.
- 기본 모델링 개념(FMC)은 소프트웨어 집약적 시스템을 위한 모델링 언어이다.
- IDEF는 모델링 언어의 일종으로, 가장 주목할 만한 언어는 기능 모델링을 위한 IDEF0, 정보 모델링을 위한 IDEF1X, 그리고 온톨로지 모델링을 위한 IDEF5를 포함한다.
- 잭슨 구조적 프로그래밍(JSP)은 데이터 스트림 구조와 프로그램 구조 간의 일치성을 기반으로 하는 구조적 프로그래밍 방법이다.
- LePUS3는 대규모 객체 지향(자바, C++, C#) 프로그램 및 디자인 패턴을 모델링하는 데 주로 적합한 객체 지향 시각적 디자인 설명 언어이자 형식 사양 언어이다.
- 통합 모델링 언어(UML)는 소프트웨어를 구조적으로, 행동적으로 모두 설명하는 일반적인 모델링 언어이다. 그래픽 표기법을 가지고 있으며 프로파일 (UML)로 확장이 가능하다.
- 알로이 (사양 언어)는 소프트웨어 시스템의 복잡한 구조적 제약 조건과 동작을 표현하기 위한 범용 사양 언어이다. 일계 관계 논리를 기반으로 간결한 언어 기반을 제공한다.
- 시스템 모델링 언어(SysML)는 시스템 엔지니어링을 위한 새로운 범용 모델링 언어이다.
- 서비스 지향 모델링 프레임워크(SOMF)
8. 디자인 패턴
소프트웨어 설계자는 이전에 다른 사람들에 의해 다루어졌거나 해결되었을 수 있는 설계 문제를 식별할 수 있다. 일반적인 문제에 대한 해결책을 설명하는 템플릿 또는 패턴을 디자인 패턴이라고 한다. 이러한 패턴을 재사용하면 소프트웨어 개발 속도를 높일 수 있다.[10]
9. 설계 방법론
설계 방법론은 실제 시스템 설계에서 템플릿이나 프레임워크 역할을 한다. 실제 설계 과정을 단순화하고, 품질 향상을 위한 설계 원칙의 적용을 가능하게 한다.
10. 코드와 설계의 관계
에츠허르 데이크스트라는 소프트웨어에서 "설계"라는 용어를 사용하는 것에 대해, 프로그램의 소스 코드가 프로그램이 생성하는 것에 대한 설계 '그 자체'라는 어려움이 있다고 언급했다.[11] 이러한 관점에서 "소프트웨어 설계"는 설계의 설계를 의미한다.
도널드 커누스는 TeX를 작성한 경험을 바탕으로, 프로그램을 구현하기 전에 설계를 시도하는 것이 얼마나 헛된 일인지 다음과 같이 설명했다.[12]
"TeX는 내가 그것을 단순히 명세하고 초기 구현에 완전히 참여하지 않았다면 완전히 실패했을 것이다. 구현 과정은 끊임없이 예측하지 못한 질문으로 이끌었고, 원래 명세를 어떻게 개선할 수 있는지에 대한 새로운 통찰력을 얻게 해주었다."
11. 한국적 특수성
한국은 IT 강국으로서, 소프트웨어 설계 분야에서도 특수한 환경과 조건을 가지고 있다. 이러한 특수성은 소프트웨어 설계 방식과 결과물에 큰 영향을 미친다.
11. 1. 기술 발전
한국은 IT 강국으로서, 첨단 기술의 발전과 보급이 빠르게 이루어지고 있다. 이는 소프트웨어 설계에도 영향을 미쳐, 최신 기술 트렌드를 반영하고 새로운 기술을 적극적으로 활용하는 설계를 추구하게 만든다. 특히, 인공지능, 빅데이터, 클라우드 컴퓨팅 등의 분야에서 한국의 기술 경쟁력은 소프트웨어 설계의 혁신을 이끌고 있다.참조
[1]
논문
A proposal for a formal definition of the design concept
Springer-Verlag
[2]
논문
A Science of design for software-intensive systems
[3]
간행물
A Proposal for a Formal Definition of the Design Concept
Springer-Verlag
[4]
서적
201 Principles of Software Development
McGraw Hill
[5]
서적
Object-Oriented Analysis and Design with Applications
http://dl.acm.org/ci[...]
Addison Wesley
2015-01-30
[6]
서적
Refactoring for Software Design Smells
Morgan Kaufmann
2014-11
[7]
서적
Scenario-Based Design: Envisioning Work and Technology in System Development
John Wiley & Sons
[8]
서적
Building Serverless Applications on Knative
O'Reilly Media
[9]
서적
Service-Oriented Modeling: Service Analysis, Design, and Architecture
Wiley & Sons
[10]
웹사이트
C# 3.0 Design Patterns: Use the Power of C# 3.0 to Solve Real-World Problems
http://msdn.microsof[...]
C# Books from O'Reilly Media
2012-05-15
[11]
웹사이트
On the cruelty of really teaching computing science
http://www.cs.utexas[...]
2014-01-10
[12]
웹사이트
Notes on the Errors of TeX
http://www.tug.org/T[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com