소프트웨어 구현
이 장에서는 소프트웨어 구현의 프로그래밍 방법, 문서 및 과제에 대해 연구합니다.
구조적 프로그래밍
코딩 과정에서 코드 줄이 계속 늘어나므로 소프트웨어 크기가 증가합니다. 점차적으로 프로그램의 흐름을 기억하는 것이 거의 불가능 해집니다. 소프트웨어와 그 기본 프로그램, 파일, 절차가 어떻게 구성되는지 잊어 버리면 프로그램을 공유, 디버그 및 수정하기가 매우 어려워집니다. 이에 대한 해결책은 구조화 된 프로그래밍입니다. 개발자가 코드에서 간단한 점프를 사용하는 대신 서브 루틴과 루프를 사용하도록 장려하여 코드를 명확하게하고 효율성을 향상시킵니다. 구조화 된 프로그래밍은 프로그래머가 코딩 시간을 줄이고 코드를 적절하게 구성하는 데 도움이됩니다.
구조적 프로그래밍은 프로그램이 코딩되는 방식을 나타냅니다. 구조적 프로그래밍은 세 가지 주요 개념을 사용합니다.
Top-down analysis-소프트웨어는 항상 합리적인 작업을 수행하도록 만들어집니다. 이 합리적인 작업은 소프트웨어 용어의 문제로 알려져 있습니다. 따라서 문제를 해결하는 방법을 이해하는 것이 매우 중요합니다. 하향식 분석에서 문제는 각각의 중요성이있는 작은 조각으로 나뉩니다. 각 문제는 개별적으로 해결되고 문제 해결 방법에 대한 단계가 명확하게 설명됩니다.
Modular Programming-프로그래밍하는 동안 코드는 더 작은 명령 그룹으로 나뉩니다. 이러한 그룹을 모듈, 서브 프로그램 또는 서브 루틴이라고합니다. 하향식 분석에 대한 이해를 기반으로 한 모듈 식 프로그래밍. 프로그램에서 'goto'문을 사용하여 점프를 방지하여 종종 프로그램 흐름을 추적 할 수 없게 만듭니다. 구조화 된 프로그래밍에서는 점프가 금지되고 모듈 형식이 권장됩니다.
Structured Coding -하향식 분석과 관련하여 구조화 된 코딩은 모듈을 실행 순서에 따라 더 작은 코드 단위로 세분화합니다. 구조적 프로그래밍은 프로그램의 흐름을 제어하는 제어 구조를 사용하는 반면 구조적 코딩은 제어 구조를 사용하여 정의 가능한 패턴으로 명령을 구성합니다.
함수형 프로그래밍
함수형 프로그래밍은 수학 함수의 개념을 사용하는 프로그래밍 언어 스타일입니다. 수학의 함수는 항상 동일한 인수를받을 때 동일한 결과를 생성해야합니다. 절차 적 언어에서 프로그램의 흐름은 절차를 통해 실행됩니다. 즉, 프로그램의 제어가 호출 된 절차로 전달됩니다. 제어 흐름이 한 프로 시저에서 다른 프로 시저로 전송되는 동안 프로그램은 상태를 변경합니다.
프로 시저 프로그래밍에서는 프로 시저를 호출하는 동안 프로그램 자체가 다른 상태에있을 수 있으므로 동일한 인수로 호출 될 때 프로 시저가 다른 결과를 생성 할 수 있습니다. 이것은 프로 시저 실행의 순서 나 타이밍이 중요 해지는 프로 시저 프로그래밍의 단점이자 속성입니다.
함수형 프로그래밍은 프로그램 상태에 관계없이 결과를 생성하는 수학 함수로 계산 수단을 제공합니다. 이를 통해 프로그램의 동작을 예측할 수 있습니다.
함수형 프로그래밍은 다음 개념을 사용합니다.
First class and High-order functions -이 함수는 다른 함수를 인수로 받아들이거나 다른 함수를 결과로 반환하는 기능이 있습니다.
Pure functions -이러한 기능은 파괴적인 업데이트를 포함하지 않습니다. 즉, I / O 또는 메모리에 영향을주지 않으며 사용하지 않는 경우 프로그램의 나머지 부분을 방해하지 않고 쉽게 제거 할 수 있습니다.
Recursion-재귀는 함수가 자신을 호출하고 미리 정의 된 일부 조건이 일치하지 않는 한 프로그램 코드를 반복하는 프로그래밍 기술입니다. 재귀는 함수형 프로그래밍에서 루프를 만드는 방법입니다.
Strict evaluation-함수에 인자로 전달 된 표현식을 평가하는 방법입니다. 함수형 프로그래밍에는 엄격한 (eager) 또는 non-strict (lazy)의 두 가지 평가 방법이 있습니다. 엄격한 평가는 항상 함수를 호출하기 전에 표현식을 평가합니다. 비 엄격 평가는 필요한 경우가 아니면 식을 평가하지 않습니다.
λ-calculus-대부분의 함수형 프로그래밍 언어는 유형 시스템으로 λ- 미적분을 사용합니다. λ- 표현식은 발생시이를 평가하여 실행됩니다.
Common Lisp, Scala, Haskell, Erlang 및 F #은 함수형 프로그래밍 언어의 몇 가지 예입니다.
프로그래밍 스타일
프로그래밍 스타일은 모든 프로그래머가 코드를 작성하는 일련의 코딩 규칙입니다. 여러 프로그래머가 동일한 소프트웨어 프로젝트에서 작업 할 때 다른 개발자가 작성한 프로그램 코드로 작업해야하는 경우가 많습니다. 모든 개발자가 프로그램을 코딩하는 데 표준 프로그래밍 스타일을 따르지 않으면 이는 지루하거나 때로는 불가능 해집니다.
적절한 프로그래밍 스타일에는 의도 된 작업과 관련된 함수 및 변수 이름 사용, 잘 배치 된 들여 쓰기 사용, 독자의 편의를위한 코드 주석 달기 및 전체 코드 표시가 포함됩니다. 이를 통해 모든 사람이 프로그램 코드를 읽고 이해할 수 있으므로 디버깅 및 오류 해결이 더 쉬워집니다. 또한 적절한 코딩 스타일은 문서화 및 업데이트를 용이하게합니다.
코딩 지침
코딩 스타일의 실습은 조직, 운영 체제 및 코딩 언어 자체에 따라 다릅니다.
다음 코딩 요소는 조직의 코딩 지침에 따라 정의 될 수 있습니다.
Naming conventions -이 섹션에서는 함수, 변수, 상수 및 전역 변수의 이름을 지정하는 방법을 정의합니다.
Indenting -이것은 줄의 시작 부분에 남겨진 공간으로 보통 2-8 개의 공백 또는 단일 탭입니다.
Whitespace -일반적으로 줄 끝에서 생략됩니다.
Operators-수학, 할당 및 논리 연산자 작성 규칙을 정의합니다. 예를 들어 대입 연산자 '='는 "x = 2"와 같이 앞뒤에 공백이 있어야합니다.
Control Structures -if-then-else, case-switch, while-until 및 제어 흐름 문을 단독으로 중첩 된 방식으로 작성하는 규칙.
Line length and wrapping-한 줄에 있어야하는 문자 수를 정의합니다. 대부분 한 줄은 80 자입니다. 줄 바꿈은 줄이 너무 긴 경우 줄 바꿈 방법을 정의합니다.
Functions -매개 변수를 사용하거나 사용하지 않고 함수를 선언하고 호출하는 방법을 정의합니다.
Variables -서로 다른 데이터 유형의 변수를 선언하고 정의하는 방법을 언급합니다.
Comments-이것은 코드에 포함 된 주석이 코드가 실제로 수행하는 작업과 기타 모든 관련 설명을 설명하므로 중요한 코딩 구성 요소 중 하나입니다. 이 섹션은 다른 개발자를위한 도움말 문서를 만드는데도 도움이됩니다.
소프트웨어 문서
소프트웨어 문서는 소프트웨어 프로세스의 중요한 부분입니다. 잘 작성된 문서는 소프트웨어 프로세스에 대해 알아야하는 정보 저장소의 훌륭한 도구와 수단을 제공합니다. 소프트웨어 문서는 제품 사용 방법에 대한 정보도 제공합니다.
잘 관리 된 문서에는 다음 문서가 포함되어야합니다.
Requirement documentation -이 문서는 소프트웨어 설계자, 개발자 및 테스트 팀이 각자의 작업을 수행 할 수있는 핵심 도구로 작동합니다. 이 문서에는 의도 된 소프트웨어의 모든 기능, 비 기능 및 동작 설명이 포함되어 있습니다.
이 문서의 출처는 고객 측에서 이미 실행중인 소프트웨어, 고객 인터뷰, 설문지 및 연구에 대한 이전에 저장된 데이터 일 수 있습니다. 일반적으로 고급 소프트웨어 관리 팀과 함께 스프레드 시트 또는 워드 프로세싱 문서 형태로 저장됩니다.
이 문서는 개발할 소프트웨어의 기초로 작동하며 주로 검증 및 검증 단계에서 사용됩니다. 대부분의 테스트 케이스는 요구 사항 문서에서 직접 작성됩니다.
Software Design documentation -이 문서에는 소프트웨어를 구축하는 데 필요한 모든 정보가 포함되어 있습니다. 다음을 포함합니다.(a) 높은 수준의 소프트웨어 아키텍처, (b) 소프트웨어 설계 세부 사항, (c) 데이터 흐름 다이어그램, (d) 데이터베이스 디자인
이러한 문서는 개발자가 소프트웨어를 구현할 수있는 저장소 역할을합니다. 이 문서는 프로그램 코딩 방법에 대한 세부 정보를 제공하지 않지만 코딩 및 구현에 필요한 모든 정보를 제공합니다.
Technical documentation-이 문서는 개발자와 실제 코더가 관리합니다. 이러한 문서는 전체적으로 코드에 대한 정보를 나타냅니다. 코드를 작성하는 동안 프로그래머는 코드의 목적, 작성한 사람, 필요한 위치, 작업 및 수행 방법, 코드에서 사용하는 다른 리소스 등을 언급합니다.
기술 문서는 동일한 코드에서 작업하는 다양한 프로그래머 간의 이해를 높입니다. 코드의 재사용 기능을 향상시킵니다. 디버깅을 쉽고 추적 할 수 있습니다.
다양한 자동화 도구를 사용할 수 있으며 일부는 프로그래밍 언어 자체와 함께 제공됩니다. 예를 들어 자바는 코드의 기술 문서를 생성하는 JavaDoc 도구를 제공합니다.
User documentation-이 문서는 위에서 설명한 모든 문서와 다릅니다. 모든 이전 문서는 소프트웨어 및 개발 프로세스에 대한 정보를 제공하기 위해 유지됩니다. 그러나 사용자 문서는 소프트웨어 제품이 작동하는 방법과 원하는 결과를 얻기 위해 사용하는 방법을 설명합니다.
이러한 문서에는 소프트웨어 설치 절차, 방법 가이드, 사용자 가이드, 제거 방법 및 라이선스 업데이트 등과 같은 자세한 정보를 얻기위한 특수 참조가 포함될 수 있습니다.
소프트웨어 구현 과제
소프트웨어를 구현하는 동안 개발 팀이 직면 한 몇 가지 문제가 있습니다. 그들 중 일부는 아래에 언급되어 있습니다.
Code-reuse-현재 언어의 프로그래밍 인터페이스는 매우 정교하고 거대한 라이브러리 기능을 갖추고 있습니다. 그러나 최종 제품의 비용을 낮추기 위해 조직 경영진은 이전에 다른 소프트웨어 용으로 생성 된 코드를 재사용하는 것을 선호합니다. 프로그래머가 호환성 검사와 재사용 할 코드의 양을 결정하기 위해 직면하는 큰 문제가 있습니다.
Version Management-새로운 소프트웨어가 고객에게 발행 될 때마다 개발자는 버전 및 구성 관련 문서를 유지해야합니다. 이 문서는 매우 정확하고 적시에 사용할 수 있어야합니다.
Target-Host-조직에서 개발중인 소프트웨어 프로그램은 고객 측에서 호스트 머신 용으로 설계되어야합니다. 그러나 때로는 대상 컴퓨터에서 작동하는 소프트웨어를 설계하는 것이 불가능합니다.