본문 바로가기

정보처리기사/2과목 소프트웨어 개발

Part 3. 제품 소프트웨어 패키징(2) 23.02.01(수)

5. 제품 소프트웨어 패키징 제품 소프트웨어 매뉴얼 작성

1) 제품 소프트웨어 매뉴얼 개념

제품 소프트웨어의 매뉴얼은 제품 소프트웨어 개발 단계부터 적용한 기준이나 패키징 이후 설치 및 사용자 측면의 주요

내용 등을 문서로 기록한 것이다.

사용자 중심의 기능 및 방법을 나타낸 설명서와 안내서를 의미한다.

제품 소프트웨어 매뉴얼은 설치 매뉴얼과 사용자 매뉴얼이 있다.

 

2) 제품 소프트웨어 설치 매뉴얼

(1) 제품 소프트웨어 설치 매뉴얼 개념

제품 소프트웨어 설치 매뉴얼은 사용자가 제품을 구매한 후 최초 설치 시 참조하는 매뉴얼이다.

설치 과정에서 표시될 수 있는 예외상황에 관련 내용을 별도로 구분하여 설명한다.

설치 시작부터 완료할 때까지의 전 과정을 빠짐없이 순서대로 설명한다.

 

(2) 제품 소프트웨어 설치 매뉴얼 기본 작성 항목

1-목차 및 개요

매뉴얼 전체 내용을 순서대로 요약

설치 매뉴얼의 주요 특징, 구성과 설치 방법, 순서 등에 대해 기술

 

2-문서 이력 정보

매뉴얼 변경 이력에 대한 정보를 버전별로 표시

 

3-설치 매뉴얼 주석

주의 사항 : 사용자가 제품 설치 시 반드시 숙지해야 하는 중요한 정보 주석 표시

참고 사항 : 설치 관련하여 영향을 미치는 특별한 사용자 환경 및 상황에 대한 내용 주석 표시

 

4-설치 도구의 구성

exe / dll / ini / chm 등 해당 설치 관련 파일 설명

폴더 및 설치 프로그램 실행 파일 설명

 

5-설치 위치 지정

설치 폴더와 설치 프로그램 실행 파일 설명

 

 

(3) 제품 소프트웨어 설치 환경 체크 항목

1-사용자 환경

CPU 및 메모리, 운영체제(OS) 등의 적합 환경 확인

 

2-응용 프로그램

설치 전 다른 응용 프로그램의 종료 확인

 

3-업그레이드 버전

업그레이드 이전 버전에 대한 존재 유무 확인

 

4-백업 폴더 확인

데이터 저장 폴더를 확인하여 설치 시 폴더 동기화

 

6. 제품 소프트웨어 패키징 제품 소프트웨어 매뉴얼 작성 국제 표준 제품 품질 특성

1) 국제 표준 제품 품질 특성 개념

국제 표준 제품 품질 특성은 제품에 대하여 명확하게 정의된 특성을 의미하며, 품질을 평가하는 기준 항목이다.

품질에 관련된 국제 표준화는 ISO/IEC, ITU-T, IEEE를 중심으로 진행되고 있다.

제품 품질 표준과 프로세스 품질 표준으로 나눌 수 있다.

 

* ISO(International Organization for Standardization)

여러 나라의 표준 제정 단체들의 대표들로 이루어진 국제 표준화 기구이다. 나라마다 다른 산업, 통상 표준의 문제점을 해결하고자 국제적으로 통용되는 표준을 개발하고 보급한다.

 

* IEC(International Electronical Committee)

국제전자기술위원회의 약자로 전기, 전자 및 관련 기술을 위한 국제 표준을 준비하고 발행하는 세계 기구이다.

 

* ITU-T(International Telecommuncation Union Telecommunication Standardization Sector)

국제전기통신연합 전기통신표준화부문의 하나로 통신 분야의 표준을 책정하며 스위스 제네바 시에 위치해 있다.

 

* IEEE(Institute of Electrical and Electronics Engineers)

전기 전자 기술자 협회를 뜻하는 말로 전기전자공학 전문가들의 국제조직이다.

 

2) 국제 제품 품질 표준

(1) ISO/IEC 9126의 소프트웨어 품질 특성 - 기신사효유이

1-기능성(Functionality)

소프트웨어가 특정 조건에서 사용될 때 명시된 요구와 내재된 요구를 만족하는 기능을 제공하는 소프트웨어 제품의 능력

부특성 : 적합성, 정확성, 상호운용성, 보안성, 준수성 등

 

2-신뢰성(Reliability)

명시된 조건에서 사용될 때 성능 수준을 유지할 수 있는 소프트웨어 제품의 능력

옳고 일관된 결과를 얻기 위하여 요구된 기능을 수행할 수 있는 정도이고, 주어진 시간 동안 주어진 기능을 오류 없이 수행하는 정도

부특성 : 성숙성, 결함 허용성, 회복성, 준수성 등

 

3-사용성(Usability)

명시된 조건에서 사용될 경우, 사용자에 의해 이해되고, 학습되고, 사용되고, 선호될 수 있는 소프트웨어 제품의 능력

부특성 : 이해성, 학습성, 운용성, 친밀성, 준수성 등

 

4-효율성(Efficiency)

명시된 조건에서 사용되는 자원의 양에 따라 요구된 성능을 제공하는 소프트웨어 제품의 능력

부특성 : 시간 반응성, 자원 효율성, 준수성 등

 

5-유지보수성(Maintainability)

소프트웨어 제품이 변경되는 능력

변경에는 환경과 요구사항 및 기능적 명세에 따른 소프트웨어의 수정, 개선, 혹은 개작 등이 포함

부특성 : 분석성, 변경성, 안정성, 시험성, 준수성 등

 

6-이식성(Portability)

하나 이상의 하드웨어 환경에서 운용되기 위해 쉽게 수정될 수 있는 시스템 능력

부특성 : 적응성, 설치성, 공존성, 대체성, 준수성 등

 

(2) ISO/IEC 14598의 소프트웨어 품질 특성 - 반재공객

1-반복성(Repeatability)

특정 제품을 동일 평가자가 동일 사양으로 평가하면 동일한 결과가 나와야 한다는 특성

 

2-재현성(Reprducibility)

특정 제품을 다른 평가자가 동일 사양을 평가하면 유사한 결과가 나와야 한다는 특성

 

3-공정성(Impartiality)

평가가 특정 결과에 편향되지 않아야 한다는 특성

 

4-객관성(Objectivity)

평가 결과는 객관적 자료에 의해서만 평가되어야 한다는 특성

 

*소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 항목은 정확성, 신뢰성, 효율성, 무결성, 유연성, 이식성, 사용성, 상호운용성이다.

 

4) 소프트웨어 품질 평가 통합 모델, ISO/IEC 25000

(1) ISO/IEC 25000 개념

ISO/IEC 25000은 소프트웨어 품질 특성(ISO/IEC 9126) 및 품질 평가 방법(ISO/IEC 14598)을 통합한 소프트웨어 품질 평가 모델 국제 표준이다.

SQuaRE(System and Software Quality Requirements and Evaluation)라고 한다.

 

(2) ISO/IEC 25000 구조

1-2500n 품질관리

SQuaRe 표준의 가이드라인과 품질 평가의 관리에 관한 표준 제시

 

2-2501n 품질 모델

제품 품질 평가의 일반 모델 제시

구 표준에는 없는 데이터 품질 모델이 제정됨

 

3-2502n 품질 측정

품질측정 메트릭 정의

소프트웨어의 내부 측정, 외부 측정, 사용품질 측정, 품질 측정 요소 등을 다룸

 

* 메트릭(Metrics)

소프트웨어의 품질 특성 등을 수치화하여 측정하고 평가하는 기준이다.

 

4-2503n 품질 요구

품질 요구사항 설정 프로세스

 

5-2504n 품질 평가

품질 평가 절차를 정의

 

5) 소프트웨어 공학의 기본 원칙

(1) 소프트웨어(Software) 개념

소프트웨어는 하드웨어를 동작시켜 사용자가 작업을 편리하게 수행하도록 하는 프로그램 및 자료 구조이다.

 

(2) 소프트웨어 위기

1-소프트웨어 위기(Software Crisis) 개념

소프트웨어 위기는 여러 원인에 의해 소프트웨어 개발 속도가 하드웨어 개발 속도를 따라가지 못함에 따라 사용자들의 요구사항을 충족시키지 못하는 현상이다.

소프트웨어 위기는 비용이 초과되거나, 일정이 지연되거나, 요구 사항을 만족시키지 못하는 등의 현상으로 나타난다.

 

2-소프트웨어 위기의 원인과 극복 방안

[1] 소프트웨어 위기

소프트웨어의 특징에 대한 이해 부족

소프트웨어의 관리 부재

소프트웨어 복잡도 및 크기 증가

소프트웨어 제품 수명주기 단축

 

[2] 소프트웨어 극복 방안

공학적 접근

표준화

자동화 도구

품질 보증

 

(3) 소프트웨어 공학

1-소프트웨어 공학(Software Engineering) 개념

소프트웨어 공학은 소프트웨어의 개발, 운용, 유지보수 및 파기에 대한 체계적인 접근 방법이다.

소프트웨어 공학은 신뢰성 있는 소프트웨어를 경제적인 비용으로 획득하기 위해 공학적 원리를 정립하고 이를 이용하는 방법이다.

소프트웨어 공학은 소프트웨어 위기를 극복하기 위한 방안으로 연구된 학문이다.

 

2-소프트웨어 공학의 원칙

현대적인 프로그래밍 기술을 계속적으로 적용한다.

개발된 소프트웨어의 품질이 유지되도록 지속적 검증 수행한다.

소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록 유지한다.

 

3-공학적으로 잘된 소프트웨어(Well Engineered Software) 특성

소프트웨어는 유지보수가 용이해야 한다.

소프트웨어 신뢰성이 높아야 한다.

소프트웨어는 충분한 테스팅을 거쳐야 한다.

 

4-소프트웨어 공학 관련 법칙

[1] 브룩스의 법칙(Brooks’ Law)

지체되는 소프트웨어 개발 프로젝트에 인력을 추가하는 것은 개발을 늦출 뿐이다라고 주장한 법칙

인력이 추가돼서 개발 생산성이 향상되지 않고, 오히려 그 인력 때문에 방해된다는 의미 내포

 

[2] 파레토 법칙(Pareto Principle)(=80 20 법칙)

전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상을 나타낸 법칙

소프트웨어 테스트 원리 중 20%의 모듈에서 80%의 결함이 발견된다는 결함 집중의 원리를 내포

 

[3] 롱테일 법칙(Long tail)

사소해 보이는 80%의 다수가 20%의 소수 핵심보다도 뛰어난 가치를 창출해낸다는 법칙

파레토 법칙의 반대 법칙

 

7. 제품 소프트웨어 패키징 제품 소프트웨어 버전 관리- 소프트웨어 버전 관리 도구

1) 소프트웨어 버전 관리 도구 개념

소프트웨어 버전 관리 도구는 형상 관리 지침을 활용하여 제품 소프트웨어의 신규 개발, 변경, 개선과 관련된 수정 사항을 관리하는 도구이다.

제품 소프트웨어 버전 관리는 소프트웨어 개발과 관련하여 코드와 라이브러리, 관련 문서 등 시간의 변화에 따른 변경을 관리하는 전체 활동을 의미한다.

 

2) 소프트웨어 버전 관리 도구 유형

(1) 공유 폴더 방식

매일 개발 완료 파일은 약속된 위치의 공유 폴더에 복사하는 방식

담당자 한 명이 매일 공유 폴더의 파일을 자기 PC로 복사하고 컴파일하여 에러 확인과 정상 동작 여부 확인

정상 동작일 경우 다음 날 각 개발자들이 동작 여부 확인

도구 : RCS

 

(2) 클라이언트/서버 방식

버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식

개발자들의 현재 작업 내용과 이전 작업내용 축적에 용이

서로 다른 개발자가 같은 파일을 작업했을 때 경고 메시지 출력

도구 : CVS, SVN

 

(3) 분산 저장소 방식

로컬 저장소와 원격 저장소로 분리되어 관리되는 방식

중앙의 저장소에서 로컬에 복사(Clone)한 순간 개발자 자신만의 로컬 저장소에 생성

개발 완료한 파일을 수정한 다음에 로컬 저장소에 우선적으로 커밋(Commit)한 이후, 다시 원격 저장소에 반영(Push)하는 방식

도구 : Git

 

3) 소프트웨어 버전 관리 도구별 특징

현재 국내 개별 프로젝트에서는 SVN을 가장 많이 사용하고 있으나, 전 세계적으로는 오픈 소스 기반의 소프트웨어 버전 관리 도구인 Git을 가장 많이 사용하고 있다.

 

(1) RCS(Revision Control System)

CVS와 달리 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일의 수정을 동시에 할 수 없도록 파일 잠금 방식으로 버전을 관리하는 도구

다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있는 소프트웨어 버전 관리 도구

 

(2) CVS(Concurrent Versions System)

가장 오래된 형상 관리 도구 중의 하나로서 중앙 집중형 서버 저장소를 두고 클라이언트가 접속해서 버전 관리를 실행하는 도구

 

(3) SVN(Subversion)

CVS와 같은 중앙 집중형 클라이언트-서버 방식이나, CVS의 단점을 보완해 가장 널리 사용되고 있는 도구

 

(4) Git

Git은 중앙 집중형 방식이 아닌 분산형 방식으로 각 PC 스스로 완전한 저장소가 구성되며, 필요에 따라 중앙 집중형 방식으로도 운영

Git의 커밋(Commit) 동작은 로컬 저장소에서 이루어지고, 푸시(Push)라는 동작으로 원격 저장소에 반영

 

4) 소프트웨어 버전 관리 도구 사용 시 유의사항

(1) 버전에 대한 쉬운 정보 접근성

형상 관리 지침에 의거 버전에 대한 정보를 언제든지 접근할 수 있어야 함

프로젝트 단위 접근이든, 파일 단위의 접근이든간에 개발자가 원하는 때에 원하는 모습을 다시 구성할 수 있어야 함

 

(2) 불필요한 사용자에 대한 접근 제어

제품 소프트웨어 개발자, 배포자 이외에 불필요한 사용자가 소스를 수정할 수 없도록 해야 함

중요한 파일 혹은 폴더에 대한 접근은 개발자, 배포자 등 권한이 있는자만 접근할 수 있도록 함

 

(3) 동일 프로젝트에 대한 동시 사용성

동일한 프로젝트에 대해서 여러 개발자가 동시에 개발할 수 있어야 함

여러 개발자가 동일한 파일, 폴더에 접근 시 동시에 파일 수정이 일어나더라도 개발자의 수정 내역이 통합될 수 있어야 함

 

(4) 빠른 오류 복구

에러 발생 시 최대한 빠른 시간 내에 복구가 가능해야 함

과거 버전의 소스를 가지고 신속하게 원복할 수 있어야 함

* 형상 관리와 버전 관리를 통해서 프로젝트의 비용을 관리하지 않는다.

 

8. 제품 소프트웨어 패키징 제품 소프트웨어 버전 관리- 빌드 자동화 도구

1) 빌드 자동화 도구 개념

빌드는 소프트웨어를 생성하고 테스트하고 검사하여 배포하기 위해 수행하는 행위의 집합이다.

빌드 자동화 도구는 제품 소프트웨어 실행파일 생성을 자동화하기 위해서 저장소에 있는 소스를 자동으로 읽어서 빌드한 후 테스트하고 검사하여 실행파일을 만드는 도구이다.

빌드 자동화 도구는 지속적인 통합과도 연관된다.

 

* 지속적인 통합(CI; Continuous Integration)

지속해서 품질제어를 적용하는 프로세스를 실행하는 기법으로 소프트웨어 릴리스 프로세스 중 빌드 또는 통합 단계에 적용된다.

 

2) 빌드 자동화 프로세스 및 주요 구성 요소

(1) 빌드 자동화 프로세스

1-컴파일 : 소스 코드를 바이너리 파일로 컴파일

2-패키징 : 바이너리 파일을 배포 형태로 패키징

3-단위테스트 : 단위테스트(커버리지 포함) 수행

4-정적분석 : 정적분석을 수행

5-리포팅 : 분석 결과 리포팅

6-배포 : 패키징한 파일을 테스트 서버에 배포

7-최종 빌드 : 최종 빌드

 

(2) 빌드 자동화 구성 요소

형상 관리 서버에 저장된 소스 코드를 주기적으로 가져와서 컴파일, 단위테스트, 코드 검사 등의 과정을 수행하며 신규 또는 수정된 소스 코드가 결함이 있는지의 여부를 지속적으로 검증한다.

검증 결과는 이메일 등의 피드백을 통해 개발자들에게 전달되고, 이를 통해 조기에 결함을 발견하고 해결한다.

 

1-CI(Continuous Integration)

빌드 프로세스를 관리하는 서버

도구 : Jenkins, Hudson

 

2-SCM(Source Code Management)

소스 코드 형상 관리 시스템

소스 코드의 개정과 백업 절차를 자동화하여 오류 수정 과정을 도와줄 수 있는 시스템

여러 사람이 같은 프로젝트에 참여할 경우, 각자 수정 부분은 자동으로 동기화되어 팀원 전체가 볼 수 있는 시스템

도구 : SVN, Git

 

3-빌드 도구(Build Tool)

컴파일, 테스트, 정적분석 등을 통해 동작 가능한 소프트웨어 생성

도구 : Ant, Maven

 

4-테스트 도구(Test Tool)

작성된 테스트 코드에 따라 자동으로 테스트를 수행해주는 도구로, 빌드 도구의 스크립트에서 실행

도구 : Junit, Selenium

 

5-테스트 커버리지 도구(Test Coverage Tool)

테스트 코드가 대상 소스 코드에 대해 어느 정도 커버하는지 분석하는 도구

도구 : Emma

 

6-인스펙션 도구(Inspection Tool)

프로그램을 실행하지 않고, 소스 코드 자체로 품질을 판단할 수 있는 정적 분석 도구

코딩 표준 준수 검사, 코드 메트릭 측정, 중복 코드 검사, 코드 인스펙션 검사

도구 : CheckStyle, Cppcheck

 

* 코드 인스펙션(Code Inspection)

개발팀에서 작성한 개발소스 코드를 분석하여 개발 표준에 위배되었거나, 코드가 중복 또는 작성규칙에 맞지 않거나 잘못 구현된 부분을 수정하는 작업을 말한다.

 

(3) 빌드 자동화 도구의 기능

1-코드 컴파일

테스트를 포함한 소스 코드 컴파일

 

2-컴포넌트 패키징

자바의 jar 파일이나 윈도의 exe 파일 같은 배포할 수 있는 컴포넌트를 묶는 작업

 

3-파일 조작

파일과 디렉토리를 만들고, 복사 및 지우는 작업

 

4-개발 테스트 실행

자동화된 테스트 진행

 

5-버전 관리 도구 통합

버전 관리 시스템 지원

 

6-문서 생성

API 문서 생성

 

7-배포 기능

테스트 서버 배포 지원

 

8-코드 품질 분석

자동화된 검사 도구를 통한 코드 품질 분석

 

(4) 빌드 자동화 도구 사례

1-젠킨스(Jenkins)

젠킨스는 자바(JAVA) 기반의 오픈 소스로 가장 많이 활용되는 빌드 자동화 도구이고, 지속적 통합관리(CI)를 가능하게 한다.

서블릿 컨테이너 서버 기반으로 구동되는 시스템이며, CVS, SVN, Git 등 다양한 버전 관리 도구를 지원한다.

 

* 서블릿(Servlet)

서블릿 컨테이너 위에서 작동하는 웹 서비스용 자바 인터페이스의 객체(애플리케이션)이다.

 

* 서블릿 컨테이너(Servlet Container)

서블릿을 관리하고 동작시킬 수 있는 환경을 제공하는 서버 프로그램이다.

 

2-젠킨스의 특징

[1] 쉬운 설치

Jenkins.war 파일로 제공하며 java jar jenkins.war 명령어면 설치 가능

그 자체로 서블릿 컨테이너에 배포하면 되므로, 이후에 추가적 설치나 데이터베이스도 필요 없음

 

[2] 친숙한 웹 GUI

웹 기반 그래픽 사용자 인터페이스(GUI)를 통해 쉽게 전체적인 설정 변경 가능

 

[3] 저장소 부하 감소

버전 관리 도구에서 빌드에 사용될 목록만 따로 추출하여 변경 생성할 수 있는 기능 제공

전체 빌드로 인한 저장소 부하 감소

 

[4] 최근 빌드 제공

최근 빌드 또는 최근 성공한 빌드 내역에 대한 링크 제공

 

[5] 실시간 피드백

RSS 또는 이메일을 통해 실시간으로 빌드 실패 내역에 대해 통지를 받아서 빌드 결과 확인 가능

 

[6] 분산 빌드

여러 대의 컴퓨터를 통해 분산 빌드나 테스트 가능

 

[7] 3rd Party 플러그인을 통한 확정

Jenkins가 지원하길 바라는 툴이나 프로세스가 있다면 본인이 직접 만들 수 있음

 

3-그래들(Gradle)

그래들은 그루비와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는 데 필요한 안드로이드 스튜디오의 공식 빌드 자동화 시스템이다.

그래들은 실행할 처리 명령들을 모아 태스크로 만든 후 태스크 단위로 실행한다.

그래들은 자바(Java), C/C++, 파이썬(Python) 등과 같은 여러 가지 언어를 지원한다.

 

*그루비(Groovy)

자바 가상머신(JVM) 위에서 동작하는 동적 스크립트 언어이다.