소프트웨어 디자인 기초

소프트웨어 디자인은 사용자 요구 사항을 적절한 형식으로 변환하는 프로세스로, 프로그래머가 소프트웨어 코딩 및 구현에 도움을줍니다.

사용자 요구 사항을 평가하기 위해 SRS (Software Requirement Specification) 문서가 생성되는 반면 코딩 및 구현을 위해서는 소프트웨어 용어에서보다 구체적이고 상세한 요구 사항이 필요합니다. 이 프로세스의 출력은 프로그래밍 언어 구현에 직접 사용될 수 있습니다.

소프트웨어 설계는 문제 영역에서 솔루션 영역으로 집중을 이동하는 SDLC (Software Design Life Cycle)의 첫 번째 단계입니다. SRS에 언급 된 요구 사항을 충족하는 방법을 지정하려고합니다.

소프트웨어 디자인 수준

소프트웨어 설계는 세 가지 수준의 결과를 산출합니다.

  • Architectural Design - 아키텍처 디자인은 시스템의 가장 높은 추상 버전입니다. 여러 구성 요소가 서로 상호 작용하는 시스템으로 소프트웨어를 식별합니다. 이 수준에서 설계자는 제안 된 솔루션 도메인에 대한 아이디어를 얻습니다.
  • High-level Design- 높은 수준의 디자인은 아키텍처 디자인의 '단일 엔티티-다중 구성 요소'개념을 하위 시스템 및 모듈의 덜 요약 된보기로 나누고 서로 간의 상호 작용을 묘사합니다. 고급 설계는 시스템과 모든 구성 요소를 모듈 형태로 구현하는 방법에 중점을 둡니다. 각 하위 시스템의 모듈 식 구조와 서로 간의 관계 및 상호 작용을 인식합니다.
  • Detailed Design- 상세 설계는 이전 두 설계에서 시스템 및 하위 시스템으로 보이는 구현 부분을 다룹니다. 모듈 및 해당 구현에 대해 더 자세히 설명합니다. 다른 모듈과 통신하기 위해 각 모듈의 논리적 구조와 인터페이스를 정의합니다.

모듈화

모듈화는 소프트웨어 시스템을 여러 개의 개별적이고 독립적 인 모듈로 나누는 기술로, 독립적으로 작업을 수행 할 수있을 것으로 예상됩니다. 이러한 모듈은 전체 소프트웨어에 대한 기본 구조로 작동 할 수 있습니다. 설계자는 모듈을 개별적으로 독립적으로 실행 및 / 또는 컴파일 할 수 있도록 설계하는 경향이 있습니다.

모듈 형 설계는 소프트웨어의 모듈 형 설계와 함께 다른 많은 이점이 첨부되어 있기 때문에 문제 해결 전략의 '분할 및 정복'규칙을 의도하지 않게 따르고 있습니다.

모듈화의 장점 :

  • 구성 요소가 작을수록 유지 관리가 더 쉽습니다.
  • 기능적 측면에 따라 프로그램을 나눌 수 있음
  • 원하는 추상화 수준을 프로그램에서 가져올 수 있습니다.
  • 응집력이 높은 부품은 다시 재사용 할 수 있습니다.
  • 동시 실행 가능
  • 보안 측면에서 원하는

동시성

시간을 거슬러 올라가면 모든 소프트웨어는 순차적으로 실행됩니다. 순차적 실행이란 코딩 된 명령어가 차례로 실행된다는 것을 의미하며 이는 주어진 시간에 프로그램의 한 부분 만 활성화됨을 의미합니다. 예를 들어, 소프트웨어에 여러 모듈이있는 경우 실행시 모든 모듈 중 하나만 활성화 된 것으로 볼 수 있습니다.

소프트웨어 설계에서 동시성은 소프트웨어를 모듈과 같은 여러 독립 실행 단위로 분할하고 병렬로 실행하여 구현됩니다. 다시 말해서 동시성은 소프트웨어가 서로 병렬로 둘 이상의 코드 부분을 실행할 수있는 기능을 제공합니다.

프로그래머와 디자이너는 병렬 실행이 가능한 모듈을 인식해야합니다.

워드 프로세서의 맞춤법 검사 기능은 워드 프로세서 자체와 함께 실행되는 소프트웨어 모듈입니다.

결합 및 응집

소프트웨어 프로그램이 모듈화되면 그 작업은 몇 가지 특성에 따라 여러 모듈로 나뉩니다. 아시다시피, 모듈은 몇 가지 작업을 수행하기 위해 조합 된 지침 집합입니다. 그러나 그들은 단일 엔티티로 간주되지만 함께 작동하기 위해 서로를 참조 할 수 있습니다. 모듈 설계의 품질과 모듈 간의 상호 작용을 측정 할 수있는 방법이 있습니다. 이러한 측정을 결합 및 응집이라고합니다.

응집력

응집력은 모듈 요소 내에서 내부 의존성의 정도를 정의하는 척도입니다. 응집력이 클수록 프로그램 디자인이 더 좋습니다.

응집력에는 7 가지 유형이 있습니다.

  • Co-incidental cohesion -이는 계획되지 않은 임의의 응집력으로, 모듈화를 위해 프로그램을 더 작은 모듈로 분할 한 결과 일 수 있습니다. 계획되지 않았기 때문에 프로그래머에게 혼동을 줄 수 있으며 일반적으로 허용되지 않습니다.
  • Logical cohesion - 논리적으로 분류 된 요소가 하나의 모듈에 모이면 논리적 응집이라고합니다.
  • Temporal Cohesion - 모듈의 요소가 유사한 시점에서 처리되도록 구성되는 것을 시간적 응집이라고합니다.
  • Procedural cohesion - 작업을 수행하기 위해 순차적으로 실행되는 모듈의 요소가 함께 그룹화되는 것을 절차 적 응집력이라고합니다.
  • Communicational cohesion - 순차적으로 실행되고 동일한 데이터 (정보)에 대해 작업하는 모듈의 요소가 함께 그룹화 될 때이를 커뮤니케이션 응집이라고합니다.
  • Sequential cohesion - 한 요소의 출력이 다른 요소에 대한 입력 역할을하므로 모듈의 요소가 그룹화되는 경우이를 순차 응집이라고합니다.
  • Functional cohesion - 가장 높은 응집력으로 간주되며 기대가 높습니다. 기능적 응집성의 모듈 요소는 모두 잘 정의 된 단일 함수에 기여하기 때문에 그룹화됩니다. 재사용 할 수도 있습니다.

커플 링

커플 링은 프로그램 모듈 간의 상호 의존성 수준을 정의하는 척도입니다. 모듈이 서로 간섭하고 상호 작용하는 수준을 알려줍니다. 커플 링이 낮을수록 프로그램이 더 좋습니다.

결합에는 5 가지 수준이 있습니다.

  • Content coupling - 모듈이 다른 모듈의 내용에 직접 액세스하거나 수정하거나 참조 할 수있는 경우이를 내용 수준 결합이라고합니다.
  • Common coupling- 여러 모듈에 일부 글로벌 데이터에 대한 읽기 및 쓰기 액세스 권한이있는 경우이를 공통 또는 글로벌 커플 링이라고합니다.
  • Control coupling- 두 모듈 중 하나가 다른 모듈의 기능을 결정하거나 실행 흐름을 변경하는 경우 두 모듈을 제어 결합이라고합니다.
  • Stamp coupling- 여러 모듈이 공통 데이터 구조를 공유하고 다른 부분에서 작동하는 경우이를 스탬프 커플 링이라고합니다.
  • Data coupling- 데이터 커플 링은 두 모듈이 데이터 전달 (매개 변수로)을 통해 서로 상호 작용하는 경우입니다. 모듈이 데이터 구조를 매개 변수로 전달하면 수신 모듈은 모든 구성 요소를 사용해야합니다.

이상적으로는 커플 링이 최고로 간주되지 않습니다.

디자인 검증

소프트웨어 설계 프로세스의 출력은 설계 문서, 의사 코드, 세부 논리 다이어그램, 프로세스 다이어그램 및 모든 기능 또는 비 기능 요구 사항에 대한 자세한 설명입니다.

다음 단계 인 소프트웨어 구현은 위에서 언급 한 모든 출력에 따라 달라집니다.

그런 다음 다음 단계로 진행하기 전에 출력을 확인해야합니다. 실수가 조기에 발견 될수록 제품을 테스트 할 때까지 더 잘 발견되거나 발견되지 않을 수 있습니다. 설계 단계의 출력이 공식 표기 형식 인 경우 관련 검증 도구를 사용해야합니다. 그렇지 않으면 철저한 설계 검토를 검증 및 검증에 사용할 수 있습니다.

구조화 된 검증 접근 방식을 통해 검토자는 일부 조건을 간과하여 발생할 수있는 결함을 감지 할 수 있습니다. 좋은 소프트웨어 설계, 정확성 및 품질을 위해서는 좋은 설계 검토가 중요합니다.