소프트웨어 품질 관리 | It 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업Tip] – Recruit|Forcs 166 개의 자세한 답변

당신은 주제를 찾고 있습니까 “소프트웨어 품질 관리 – IT 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업TIP] – Recruit|FORCS“? 다음 카테고리의 웹사이트 https://you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 전자계약 이폼사인 | 포시에스 이(가) 작성한 기사에는 조회수 4,933회 및 좋아요 42개 개의 좋아요가 있습니다.

Table of Contents

소프트웨어 품질 관리 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 IT 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업TIP] – Recruit|FORCS – 소프트웨어 품질 관리 주제에 대한 세부정보를 참조하세요

소프트웨어 품질 관리직에 취업하면 무슨 일을 하냐고요?
‘소프트웨어 품질관리’ 업무를 맡고 있는
포시에스 연구소의 QA팀,
김수현 전임을 소개합니다.
취업 스펙, 면접 후기부터
취업성공팁과 자세한 직무소개까지✨
안 보면 손해인 수현씨의 취업스토리!
개발자를 꿈꾸는 당신에게 그 자세한 내용을 전합니다. 🤞
출처 : https://www.youtube.com/watch?v=A5nheWrKtK0
_________________________________________________________________
[0:30] \” Q 업무에 대해 소개해주세요 \”
[0:50] \” Q 취업 당시 스펙은? \”
[1:10] \” Q 면접은 어떻게 진행되었나요? \”
[1:34] \” Q 입사 후 인사담당자분께 채용된 이유에 대해 들은 적 있나요? \”
[1:54] \” Q QA 직무는 어떤 성향과 잘 맞을까요? \”
[2:10] \” Q 어떤 업무 역량이 필요한가요? \”
[2:21] \” Q 취준생들에게 해주고 싶은 말은? \”
_________________________________________________________________
✔ 포시에스를 더욱 자세히 알고 싶다면? 😙
포시에스 홈페이지: http://www.forcs.com/kr/
이폼사인 홈페이지 : https://www.eformsign.com/kr/index.html
포시에스 블로그 : https://blog.naver.com/forcsblog
포시에스 페이스북 : https://www.facebook.com/forcsoz/
포시에스 인스타그램: https://www.instagram.com/forcs_official/
#포시에스 #FORCS #취업 #취준생 #면접 #자소서 #포트폴리오 #취준 #꿀팁 #프로그램 #개발 #연구소 #SaaS

소프트웨어 품질 관리 주제에 대한 자세한 내용은 여기를 참조하세요.

소프트웨어 품질관리(Quality Management)

I. 소프트웨어 품질관리의 개요. 가. 소프트웨어 품질(Software Quality)의 개념. 사용자의 소프트웨어 요구사항을 충족하기 위해 필요한 품질 정책, …

+ 여기에 보기

Source: blog.skby.net

Date Published: 8/1/2021

View: 2394

소프트웨어 품질관리(Software Quality Management)

품질보증활동, GS인증 I. 서비스의 질 보존, 소프트웨어 품질관리의 개요 가. 소프트웨어 품질관리(Software Quality Management)의 정의 – 품질 목표 …

+ 자세한 내용은 여기를 클릭하십시오

Source: itpenote.tistory.com

Date Published: 11/8/2022

View: 747

소프트웨어 품질관리(NHN은 이렇게한다) – 양봉수 블로그

SW의 품질 관리는 사용자의 요구 사항을 수집하고 기록하는 단계에서부터 시작된다고 할 수 있다. 전통적인 SW개발 과정을 살펴보면 기획자가 ‘요구 사항 명세서’, …

+ 더 읽기

Source: yangbongsoo.gitbook.io

Date Published: 12/26/2021

View: 6536

13. 소프트웨어 품질관리 – 호반반 개발 블로그

소프트웨어 품질 관점 … 사용자 관점 : 성능 및 사용효과에 관심이 있으며 내부는 모르고 평가한다. 개발자 관점 : 중간제품의 품질에도 관심이 있으며 …

+ 여기에 표시

Source: hoban123.tistory.com

Date Published: 4/29/2021

View: 1077

SW 품질 컨설팅 – 와이즈스톤

와이즈스톤은 국제 표준과 성공 사례들을 바탕으로 구축한 품질관리 프레임워크를 기반으로 하여, 아래와 같은 소프트웨어 개발 라이프사이클 전반의 품질 확보 활동을 …

+ 여기에 표시

Source: wisestone.kr

Date Published: 6/4/2022

View: 1030

소프트웨어 공학의 모든 것 12 – 품질 – 미니 놀이터

소프트웨어 품질은 무엇이며 품질을 결정하는 특성은 어떤 것이 있는가? 포인트2. … 소프트웨어 개발, 품질 관리 프로세스 및 방법론의 정의 …

+ 여기에 자세히 보기

Source: mini-noriter.tistory.com

Date Published: 7/20/2022

View: 7005

소프트웨어 품질 – 위키백과, 우리 모두의 백과사전

소프트웨어 공학에서 소프트웨어 품질(software quality)은 비즈니스 문맥에서 품질이 정의된 곳에 존재하는, 두 개의 서로 관련되면서도 구별된 개념을 가리킨다.

+ 자세한 내용은 여기를 클릭하십시오

Source: ko.wikipedia.org

Date Published: 8/19/2021

View: 9969

소프트웨어 품질관리와 테스팅의 이해 소프트웨어공학관점에서 …

소프트웨어 개발 중간 중간 결과물에 대한 테스트를 하면 품질 향상과 생산성 향상이라는 두 마리의 토끼를 한 번에 잡을 수 있다. 시스템을 운영하고 사용자가 증가하면 …

+ 여기에 표시

Source: dataonair.or.kr

Date Published: 1/25/2021

View: 9784

[NHN SW 품질관리] 1. 소프트웨어 개발의 특징과 오해 (필사)

소프트웨어 개발은 경험적 프로세스 정의된 프로세스 : 공장의 생산라인과 … 일반적으로 SW개발 프로젝트는 “비용”, :”시간”, “품질”을 3대 관리 …

+ 여기에 자세히 보기

Source: zereight.tistory.com

Date Published: 9/4/2022

View: 5299

품질 관리와 프로세스 개선 – k-mozzi’s development

이번 장을 공부하며 소프트웨어 공정 과정에서 매우 중요시 하는 품질 관리가 개발 라이프사이클에 포함되어 있지 않은 이유에 대해 생각해보았다. 그 결과 품질 관리 …

+ 자세한 내용은 여기를 클릭하십시오

Source: k-mozzi.tistory.com

Date Published: 5/23/2022

View: 2114

주제와 관련된 이미지 소프트웨어 품질 관리

주제와 관련된 더 많은 사진을 참조하십시오 IT 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업TIP] – Recruit|FORCS. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

IT 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업TIP]    -    Recruit|FORCS
IT 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업TIP] – Recruit|FORCS

주제에 대한 기사 평가 소프트웨어 품질 관리

  • Author: 전자계약 이폼사인 | 포시에스
  • Views: 조회수 4,933회
  • Likes: 좋아요 42개
  • Date Published: 2020. 7. 1.
  • Video Url link: https://www.youtube.com/watch?v=yQ2OuPx3O8U

소프트웨어 품질관리(Software Quality Management)

품질보증활동, GS인증

I. 서비스의 질 보존, 소프트웨어 품질관리의 개요

가. 소프트웨어 품질관리(Software Quality Management)의 정의

– 품질 목표를 결정하고 품질시스템 내에서 품질기획, 품질보증, 품질통제, 품질개선 등을 통한 제품,서비스 질을 보존하는 활동

나. 소프트웨어 품질관리의 목적

– 기술지원 평가, 자원 평가, 프로세스 평가, 제품 평가

다. 소프트웨어 품질평가 분류

구분 설명 표준/모델 제품 품질평가 IT 프로젝트를 진행하거나, 완성된 제품에 대해 기능성, 신뢰성 등을 평가 ISO/IEC 9126, 14598, 12119, 25000 프로세스 품질평가 IT 프로젝트를 진행하거나 IT를 운영함에 있어 프로세스가 수립되어 있고 체계적으로 운영되고 있는지 평가 SPICE, CMMI, ISO 12207, 9000 경영측면 품질평가 기관이나 회사를 경영함에 있어 소프트웨어 품질을 형상하기 위한 품질경영 기술 6 시그마

라. 소프트웨어 품질관련 표준/모델

단계 표준/모델 내용 제품 품질평가 ISO 9126 소프트웨어 품질의 특성을 정의하고 품질 평가의 Metrics를 정의한 국제표준 ISO 14598 소프트웨어 개발과정 또는 개발된 제품형태의 소프트웨어의 품질을 객관적으로 측정과 평가하는 과정 ISO 12119 SW 패키지 제품에 대한 품질 요구사항 및 국제 표준 ISO 25000 SW 품질 평가의 국제 표준을 강화시키기 위해 국제 표준 ISO/IEC 9126, 14598, 12119, 15504를 통합한 국제 표준 프로세스 품질평가 ISO 9000 품질경영시스템의 국제 표준 ISO 12207 소프트웨어 생명주기 국제 표준(기본 생명주기, 지원 생명주기, 조직 생명주기로 구분) SPICE SW 프로세스 평가 모형 국제 표준 (ISO 15504) CMMI 소프트웨어와 시스템 공학의 능력과 성숙도 평가 모델 경영측면 품질평가 6 시그마 100만개 업무요소에서 3.4개의 결함을 목표로 하는 모토롤라의 경영 혁신 기법

II. 소프트웨어 품질관리체계 및 절차

가. 소프트웨어 품질관리체계

구분 내용 활동 품질 계획 – 적용할 품질의 표준을 식별하고 적용할 방법을 결정하는 활동 – 품질관리 체크리스트 및 품질 관리 계획 작성 품질 시스템 요구사항 파악, 품질 보증 절차 파악, 품질통제 운영절차 정의 품질 보증 – 소프트웨어 제품과 요구 사항이 일치하는지 검토를 제 3자 입장에서 수행하는 것으로 품질을 검사하는 활동 프로젝트 산출물 검토, 품질사고 예방 조치 강구, 프로세스 절차 검토 품질 통제 – 소프트웨어 개발, 운영, 유지 보수에 있어 자체적으로 품질 활동을 수행 – 품질 결과 모니터링 및 계획된 품질 수준과의 차이 분석 수정 계획 수립, 수정활동 문서화 및 계획, 최신 상태 유지

나. 소프트웨어 품질 목표 관리 절차

구분 활동 시기 품질목표정의 품질 특성, 품질 측정 방법, 품질 목표 정의 설계 단계 말 품질목표검토/승인 고객과의 품질 특성에 대한 합의 및 승인 요구사항 명세서에 명세 품질목표확인 품질 목표 측정 및 달성 여부 확인 단계 말

다. 소프트웨어 품질보증활동

구분 보증활동 내용 계획 품질보증 계획 수립 평가대상 산출물 또는 프로세스 선정, 베이스라인 설정, 베이스라인별 형상관리 계획 수립, 품질 문서 표준 정의 등 실행 소프트웨어 엔지니어링 활동 검토 소프트웨어를 생산하는 개발활동에 대한 검토 실시 품질 측정 및 평가 품질목표 정의, 품질 측정, 평가 문서화 품질 평가 결과 문서화 종료 승인 문서화된 평가결과를 최고결정권자가 승인 보고 및 통보 소프트웨어 프로젝트와 관련 있는 모든 조직에 통보

III. GS인증

가. GS인증(Good Software)의 정의

– 국산 소프트웨어 제품의 품질 향상을 통한 국내 SW 산업 활성화 정책으로 SW 시험인증센터(TTA)가 국제 표준을 기반으로 개발한 한국형 소프트웨어 품질 인증 제도

나. GS인증의 장점

장점 내용 품질 개선/비용 절감 제 3자 시험인증을 통한 단기간 품질 개선, 비용 및 시간 절감 SW BMT를 통한 국산 제품의 우수성 부각 및 외산 SW 선호 사상 불식 홍보/마케팅 용이 SW품질 인증 기관의 공인 제품으로 고객 신뢰성 확보 제도적 혜택 GS인증제품 우선구매제도 중소기업청 성능인증 시 성능검사 면제 소프트웨어 기술성 평가 면제 및 소프트웨어 기술제안서 평가 시 가산점 부여 공공기관 구매자 면책제도

반응형

13. 소프트웨어 품질관리

반응형

소프트웨어 품질관리의 정의

품질관리는 생명주기 동안에 모든 활동을 보증하기 위한 활동을 말하고, 품질보증과 품질 통제활동으로 구성되어 있다.

품질관리 목적

기술 평가 – 적합한 추정기준, 품질 예측

자원 평가 – 적절한 자원 및 비용 산정

프로세스 평가 – 어플리케이션 생명주기 프로세스 통제

제품 확인 – 검수시험, 타 제품과 비교

품질 요소

운용 – 정확성, 신뢰성, 효율성 등

수정 – 유지보수성, 이식성 등

적응 – 시험성, 재사용성, 유지성 등

소프트웨어 품질 관점

사용자 관점 : 성능 및 사용효과에 관심이 있으며 내부는 모르고 평가한다.

개발자 관점 : 중간제품의 품질에도 관심이 있으며 유지보수성도 크게 관여한다.

관리자 관점 : 전반적인 품질에 관심이 있으며 사람들이 필요로 하는지를 크게 본다.

소프트웨어 픔질 특성 및 모델

소프트웨어 품질특성

기능성 – 요구를 만족하는가?

신뢰성 – 오류를 방지할 수 있는가?

사용성 – 사용자가 쓰기 편한가?

효율성 – 자원에 비해 효율이 얼마인가?

유지보수성 – 나중에 유지보수할때 편한가?

이식성 – 다른 SW나 HW로 옮길때 편한가?

소프트웨어 품질 모델

제품 관점:

품질 특성에 기반하여 평가하며, 모든 소프트웨어에 적용되기 때문에 객관적이다.

하지만 최신 소프트웨어 평가가 어렵다.

프로세스 관점:

절차에 의해 평가되며, 검사시간이 짧아 효율적이다.

하지만 상대적으로 보증을 못하고 혁신적인 SW에 적용시키기 어렵다.

소프트웨어 품질 측정

품질 측정은 품질을 수치화한것으로, 직접 측정하는것과 간접 측정하는 방법이 있다.

직접 측정 : 메모리크기, 에러, 비용 등을 측정

간접 측정 : 품질, 복잡도, 신뢰도 등을 측정

척도는 위의 품질 특성을 점수로 나타낸다.

소프트웨어 품질관리 활동

품질 계획 : 실행할 품질의 표준을 식별하고, 실행 방법을 결정

품질 보증 : 소프트웨어 제품과 요구사항의 일치 여부를 확인

품질 통제 : 소프트웨어 생명주기에서 자체적으로 품질활동을 수행하는 것

소프트웨어 품질 보증 활동

소프트웨어 품질 보증 기법

개발자들에 의해 수행되는 품질 보증활동으로, 기술 검토 작업을 필요로 한다.

구현 등 개발 단계동안 발생하는 문제점이나 결함을 발견하여 품질을 개선하는 역할을 한다.

소프트웨어 품질 보증 절차

절차를 정의하고 체계적으로 수행하는 것이 중요하다.

검증 -> 확인 -> 인증 -> 테스트 -> 결함 수정 -> 실사

반응형

SW 품질 컨설팅

소프트웨어 품질 확보를 위해서는 개발 라이프사이클 전반(SDLC: Software Development Lifecycle)에 걸친

품질 관리 활동과 이를 지원하는 자동화 환경(Tool-Chain) 구축이 필요합니다.

와이즈스톤은 국제 표준과 성공 사례들을 바탕으로 구축한 품질관리 프레임워크를 기반으로 하여, 아래와 같은 소프트웨어 개발 라이프사이클 전반의 품질 확보 활동을 통해 효율성 확보, 비용 절감을 이끌어낼 수 있는 성공적인 품질 관리 체계를 구축해드립니다. 품질 활동 현황 진단 및 요구사항 도출

품질 관리 계획 및 프로세스 수립

품질 활동 수행 및 품질 점검 테스트 수행 전략 수립

품질 관리/자동화 도구 적용

추적성 모니터링 및 시각화(Visualization)지원 등

소프트웨어 품질관리 프레임워크

자동화 환경(Tool-Chain) 구축 자동화 환경(Tool-Chain)은 협업 도구, 형상관리 도구, 테스트 자동화 도구, 이슈 트래킹 시스템 등의 연동으로 구축할 수 있습니다.

구축된 자동화 환경(Tool-Chain)을 통해 소프트웨어 개발 라이프 사이클 전반에 대한 가시성(Visualization) 및 프로젝트 관리의 효율성을 확보할 수 있습니다.

와이즈스톤은 고객사 개발 프로세스에 최적화된 도구들을 선별하여, ALM(Application Life-cycle Management) 적용 프로세스에 따라서 자동화 환경을 구축해드립니다.

소프트웨어 공학의 모든 것 12 – 품질

포인트1. 소프트웨어 품질은 무엇이며 품질을 결정하는 특성은 어떤 것이 있는가?

포인트2. 품질 보증 활동을 위한 조직과 계획은 어떻게 하는가?

포인트3. 품질을 측정하는 방법은 무엇인가?

포인트4. 소프트웨어 검증 기법은 무엇인가?

포인트5. 프로세스를 개선하는 방법은 무엇인가?

12-1. 소개

– 테스트

품질을 보장하는 가장 일반적인 방법

테스트만으로 소프트웨어의 결함을 줄이고 방지하는 것이 제한적인 이유

제품주기에서 테스트가 너무 늦게 수행 됨

됨 테스트는 좁은 차원만 다룸

테스트는 코드 품질만 향상시킴

– 리뷰

테스트를 보완, 개발 초기에 검토할 수 있어 오류가 조기에 발견됨

– 품질 보증

개발자와 협력하여 소프트웨어개발의 적절한 표준과 절차를 정의함

검토 및 감사를 통하여 업무를 모니터링하여 확인함

품질 목표를 향한 진행 상황에 대해 상급 관리자 및 기타 이해 관계자에게 피드백을 제공함

– 품질 관리

품질 계획, 품질 관리, 품질 보증, 검증 및 여러 가지 품질 관련 프로세스

품질 목표를 설정하고 목표 달성을 위한 프로젝트 실행을 관리 및 통제하기 위한 모든 활동 리뷰 – 품질 지표에 대한 자세한 내용을 다룸 프로세스 평가 및 개선 – 프로세스의 품질과 평균 성능 개선에 관한 것

12-1-1. 품질 개념

– 품질에 대한 다양한 관점

관점에 따라 다르게 정의함 // 예 – 기능이 품질인가? 관점에 따라 다르다

품질에 대한 정의에 따라 품질 관리 활동이 달라짐

– 고객 만족

사용자 만족도는 제품의 전반적인 요소를 기반으로 하며 품질은 그 중 하나

품질과 고객만족 ( 출처 – 소프트웨어 공학의 모든 것 491 page )

– 요구 적합성

모호하지 않음

지정된 요구 사항과 디자인을 준수 하는 제품이 높은 품질의 제품임

하는 제품이 높은 품질의 제품임 일정 수준 이상의 고급이라는 의미가 높음 품질이라고 볼 수 없음

– 제품 품질

여러 속성의 집합이며 이들이 품질을 결정함

예시 > 디지털 카메라의 품질을 결정하는 세 가지 속성 – 해상도, 광 감도, 프레임 속도

12-1-2. 소프트웨어 품질

시스템, 구성 요소, 프로세스가 지정된 요구사항을 충족시키는 정도 시스템, 구성 요소, 프로세스가 고객 또는 사요자 요구나 기대를 충족 시키는 정도

소프트웨어 품질 ( 출처 – 소프트웨어 공학의 모든 것 494 page )

12-2. 품질 모델

소프트웨어에 대한 작업 관점이 어디 있느냐에 따라 품질 속성의 관심이 달라짐

소프트웨어 품질 속성 ( 출처 – 소프트웨어 공학의 모든 것 495 page )

– 품질 특성은 세 가지 차원이 존재함

품질 요소 – 사용자에 의한 외부 관점

– 사용자에 의한 외부 관점 품질 기준 – 개발자 측면의 내부 관점

– 개발자 측면의 내부 관점 메트릭 차원 – 품질을 제어

소프트웨어 품질 특성의 세 가지 차원 ( 출처 – 소프트웨어 공학의 모든 것 495 page )

– 품질 모델

ISO/IEC 9126 소프트웨어가 가질 수 있는 여러 가지 품질 특성을 정의함 ISO에서는 여섯 가지의 품질 특성을 정의함

ISO와 IEEE에서는 품질 속성의 계층을 다르게 정의함

ISO 9126과 IEEE 1061의 품질 모델 ( 출처 – 소프트웨어 공학의 모든 것 496 page )

– 품질 속성

신뢰성 소프트웨어에 요구된 기능을 명시된 조건 하에 실행하여 정확하고 일관성 있는 결과를 생성 하는 능력

강인성 소프트웨어에 요구된 기능을 어렵거나 예외적인 환경에서 수행할 능력

효율성 소프트웨어에 요구된 기능을 최소의 시간과 자원을 사용하여 원하는 결과를 생성 하는 능력

상호운용성 소프트웨어가 다른 소프트웨어와 정보를 교환 하는 능력

유지보수성 소프트웨어가 수리 및 진화 될 수 있는 성질

테스트가능성 소프트웨어에 요구된 또는 적용될 수 있는 모든 형식의 평가 예 > 인스펙션, 동료 검토, 화이트박스 테스팅, 블랙박스 테스팅 등

이식성 소프트웨어가 여러 운영 환경 및 플랫폼에서 실행될 수 있도록 변형이 가능 한 성질

재사용성 소프트웨어가 확장이나 커스텀화 없이 유사한 또는 다른 배경에서 사용 될 수 있는 성질

모듈성 소프트웨어가 모듈 컴포넌트의 통합이나 조정을 쉽게 만드는 성질

– 소프트웨어 유형과 품질의 관계

소프트웨어 유형에 따른 품질 특성 중요도의 차이 ( 출처 – 소프트웨어 공학의 모든 것 498 page )

12-3. 품질 관리

소프트웨어 제품이나 아이템이 정해진 요구에 적합 하다는 것을 보장 하는 데 필요한 계획적이고 체계적인 활동

하다는 것을 하는 데 필요한 품질 관리 기능 프로세스와 표준의 정의 품질 보증 프로세스 개선

소프트웨어 품질 관리 ( 출처 – 소프트웨어 공학의 모든 것 500 page )

12-3-1. 품질 보증 조직

– 관리적 활동

개발 조직의 표준화 방법론을 잘 따르도록 하는 것

– 기술적 활동

방법론을 잘 정의하는 것

품질 관리 조직 ( 출처 – 소프트웨어 공학의 모든 것 501 page )

12-3-2. 프로세스와 표준을 정의

소프트웨어 개발, 품질 관리 프로세스 및 방법론의 정의

개발 주기 동안 품질보증 작업을 수행할 표준, 절차, 가이드라인의 정의

품질 측정과 평가를 위한 품질 메트릭, 지표 정의

전통적인 프로세스의 품질보증 ( 출처 – 소프트웨어 공학의 모든 것 502 page )

12-3-3. 품질 보증 활동

품질 계획 프로젝트 초반에 이루어지는 활동

특정 프로젝트에 대한 품질 계획을 작성함 품질 제어 프로젝트 전반에 걸쳐 이루어짐

품질 계획의 실행을 모니터링 하고 현실적으로 수정이 필요하면 품질 계획을 수정함 품질 보증 제어

계획이 정확하게 실행되고 있는지 확인하는 것

개발자가 품질보증 활동을 수행하도록 도와주는 것

품질 관련 데이터를 모아 데이터베이스를 사용하여 관리

관리자에게 프로세스 개선을 위한 제안을 하고 수용된 제안이 적절히 실현되고 프로세스에 녹아들었는지 확인

12-3-4. 인스펙션

품질 보증을 위한 검토 작업

품질 보증을 위한 검토 작업 ( 출처 – 소프트웨어 공학의 모든 것 507 page )

품질 개선과 비용 절감을 위한 기법으로 사용

프로덕트를 공통되는 오류, 변칙, 표준이나 관례의 부적합리스트와 체크해 보는 작업

– 인스펙션 과정

인스펙션 과정 ( 출처 – 소프트웨어 공학의 모든 것 508 page )

12-4. 품질 측정

– 소프트웨어 측정

소프트웨어 속성의 객관적이고 정량적인 평가

– 소프트웨어 메트릭

표준화된 소프트웨어 측정 방법

12-4-1. 품질 측정의 유용성

– 품질 측정과 메트릭

요구분석, 설계, 구현, 문서화가 포함된 소프트웨어의 정량적인 평가

12-4-2. 품질 메트릭

전통적인 품질 메트릭 ( 출처 – 소프트웨어 공학의 모든 것 514 page )

12-5. 프로세스 개선

엔지니어링 프로세스가 경험에 따라 어떤 차이가 있는지 연구하고 모델 제시

CMMi

프로세스 성숙도를 위한 프레임워크

– 용도

성숙도 평가 기준

능력을 스스로 평가하고 개선의 방향을 설정

위키백과, 우리 모두의 백과사전

소프트웨어 공학에서 소프트웨어 품질(software quality)은 비즈니스 문맥에서 품질이 정의된 곳에 존재하는, 두 개의 서로 관련되면서도 구별된 개념을 가리킨다.

소프트웨어 기능 상의 품질(software functional quality)은 기능 요건이나 사양에 기반하여 주어진 설계를 얼마나 잘 충족하고 있는지를 반영한다. 이러한 특성은 소프트웨어의 목적이 부합하는지, 또 가치가 있는 상품으로서 시장의 경쟁작들과 비견할만한지를 기술할 수 있다. [1]

소프트웨어 구조 상의 품질(software structural quality)은 기능 요건의 전달을 지원하는 비기능 요건을 어떻게 충족하는지를 가리키는데, 이를테면 소프트웨어가 올바르게 개발될 수 있는지를 가늠하는 척도로서 내구성이나 유지보수성을 들 수 있다.

소프트웨어 품질은 소프트웨어 내부 구조, 소스 코드, 단위 수준, 기술 수준, 시스템 수준의 분석을 통해 평가되며, 아키텍처가 OMG의 주제에 따른 논문에 개요로 서술된 소프트웨어 구조의 원칙을 준수하는 방식을 수행한다.[2] 반면, 기능 상의 품질은 일반적으로 소프트웨어 테스트를 통해 강제되어 측정된다.

역사적으로, 소프트웨어 품질 관리에 적용 가능한 특성과 메트릭스의 구조, 분류, 용어는 ISO 9126-3과 이후의 ISO 25000:2005[3] 품질 모델(SQuaRE)[4]로부터 가져온 것이다. 이러한 모델에 기반하여, CISQ(Consortium for IT Software Quality)는 비즈니스 가치를 제공하는 소프트웨어에 필수적인 5가지 주요 구조 특징들을 정의하고 있다: 신뢰성, 효율성, 보안, 유지보수, (적절한) 크기.

같이 보기 [ 편집 ]

각주 [ 편집 ]

소프트웨어 품질관리와 테스팅의 이해 소프트웨어공학관점에서 본 테스팅

◎ 연재기사 ◎

▶ 소프트웨어 품질관리와 테스팅의 이해 소프트웨어공학관점에서 본 테스팅

▷ 소프트웨어 테스팅의 두 가지 특징 정적 코드 분석과 동적 코드 분석의 이해

소프트웨어 품질관리와 테스팅의 이해

소프트웨어공학관점에서 본 테스팅

초기 소프트웨어공학에서는 개발과 테스트를 각각의 단계로 규정짓고 이를 서로 다른 분야로 정의, 각자 나름대로의 방법론을 정립하고 이끌어 왔다. 그 대표적인 것이 폭포수 모델로서 개발환경의 변화로 다양한 방법론이 발표돼 왔다. 요구분석, 설계, 구현 모든 단계는 테스트와 아주 밀접한 관계에 있으며 각 단계에서 미리 테스트가 가능하다면 오류 해결시간을 줄일 수 있다. 소프트웨어 개발 중간 중간 결과물에 대한 테스트를 하면 품질 향상과 생산성 향상이라는 두 마리의 토끼를 한 번에 잡을 수 있다.

시스템을 운영하고 사용자가 증가하면 가장 이슈가 되는 부분이 성능 테스트다. 하지만 시스템의 개발시점에서는 정확한 기준을 잡을 수 없어 성능 테스트에 대한 부분을 중요하게 여기지 않고 지나치곤 한다. 또한 성능 테스트의 주체도 모호해 개발팀과 테스트팀간의 이견이 많다. 성능 테스트는 개발팀과 테스트팀이 협업해 효율적인 방법을 찾아서 수행해야만 운영중 심각한 문제를 미연에 막을 수 있다.

오류 찾기

동일한 요구사항으로 두 팀이 동일한 개발도구로 개발을 진행한다고 했을 때 요구사항이 동일하고 도구가 동일하기 때문에 비슷한 결과물이 나왔을까 답은 그렇지 않다. 서로 다른 결과가 나왔으며 또한 서로 다른 버그들을 내포하게 된다. 그리고 발생하는 버그의 해결에 어려움을 갖는다. 왜 어려움을 느낄까

부분적 단계적 오류 접근

문제를 지켜본 숙련된 개발자는 각 단계에서 문제의 원인이 될 만한 여러 가지에 대해 체크한다. 현상만 보지 않고 처음부터 마지막까지 단계를 나눠 부분적이고 단계적으로 문제에 접근하는 것이다. 부분별로 나눈 모든 단계의 공정을 체크하고 각 단계의 작업에서 오류가 있는지를 체크하며 오류가 있음을 지적한다. 우리는 오류가 발생할 때 단순히 문제의 현상만을 보고 문제가 발생한 곳이 문제라고 생각하며 오류를 찾으려고 한다. 많은 시스템이 연동되는 현재의 비즈니스 환경에서는 오류의 원인 및 오류를 발생시킨 시스템이 다양할 수밖에 없다. 연동된 시스템들에 대한 정확한 이해와 점진적 오류 접근 방법으로 빠르고 효율적으로 오류를 찾아낼 수 있다. 오류가 발생한 것으로 보이는 부분에서 몇 시간을 씨름한 결과 전혀 예상하지 못했던 단순한 곳에서 오류가 발생할 때가 많으며 이 때는 오류의 원인을 찾고도 허무해진다. 단순히 브라우저에서 데이터를 출력하는 기능만 해도 문제가 발생할 수 있는 곳은 다양하다. 브라우저 자체에서 차단해 출력이 안 될 수도 있고 네트워크의 문제 또는 웹 서버나 데이터베이스 문제가 원인일 수도 있다.

오류 발생 지점

따라서 오류의 원인을 파악하기 위해 시스템을 분할해서 테스트하고 오류를 찾아야 한다. 시스템 전체에 대한 이해가 높고 예전에 이같은 문제를 해결한 경험이 있다면 문제가 발생했을 것이라 예측되는 부분을 먼저 확인하는 것이 빠르다. 하지만 문제가 어디서부터 시작됐는지 알기 힘든 경우는 End Point부터 체크해야 한다. 브라우저에는 문제가 없는지, 네트워크는 잘 되는지, 웹 서버는 정상적으로 동작하고 있는지, 데이터베이스 서버는 정상적인지, 데이터베이스의 데이터는 정상적인지 부분적이며 단계적으로 접근하는 것이 효율적이다.

사용자 정보가 보이지 않는다고 할 경우 첫 번째 DB 서버가 동작중인지, 데이터가 정상적으로 저장돼 있는지를 체크한다. 두 번째 웹 서버와 DB간의 통신이 되는지 체크한다. 세 번째 웹 서버에서 DB 서버에 대한 설정이 정상적인지 체크한다. 네 번째 로직상에서 에러가 발생하지 않는지 체크한다. 이렇게 부분을 나누고 단계별로 체크하다보면 쉽게 에러 발생 원인을 찾을 수 있다.

원리와 시스템의 이해

문제를 찾기 위해서는 시스템의 원리와 특성을 알아야 한다. 소프트웨어 동작원리와 시스템의 특성을 알지 못하면 문제를 명확하게 정의할 수 없다. 이러한 원리와 특성을 미리 알고 있었다면 문제가 발생하기 전에 막을 수 있었을 것이며 문제가 발생했을 때도 빨리 원인을 찾을 수 있었을 것이다. 숙련된 개발자는 원리와 특성의 이해로 공정상의 문제를 분할하고 단계별로 접근해 빨리 문제를 찾는다. 숙련된 개발자에게 시스템의 원리와 특성에 대한 이해와 경험이 없었다면 문제를 빨리 찾을 수 있었을까 그렇지 않다. 원리와 특성의 이해가 반드시 선행돼야 한다. 소프트웨어에서도 마찬가지로 원리와 시스템의 이해가 필요하다.

개발할 시스템의 영역을 나누고 각 개발자를 담당자로 선정해 개발한다. 개발자는 자신이 개발한 부분만 관심이 있지 다른 사람이 개발한 부분에 대해서는 관심이 없다. 자신의 것 개발하기도 바쁜데 다른 사람이 개발하는 소프트웨어까지 굳이 이해해야 할 필요성을 느끼지 못하기 때문이다. 하지만 소프트웨어가 동작하기 위해서는 각 부분들이 연동돼야 한다. 연동된 소프트웨어에서 버그가 발생할 경우 개발자는 자신이 맡은 부분만을 분석하고 이상이 없으면 그 소스는 괜찮은 것 같다며 다른 사람에게 분석할 것을 요청한다. 요청받은 다른 사람은 다시 자신이 만든 소스를 확인한다. 고친 적이 없는데 왜 안 되는지 모르겠다며 화를 낼 때도 있다. 그럼 어디서 문제가 발생한 것일까 같이 분석해 보면 서로 잘못된 이해로 잘못된 데이터를 주고받아 발생한 문제일 경우가 많다. 다른 사람이 맡은 부분에 대해서도 관심을 갖고 이해하고 있었다면 처음에 분석한 사람이 문제를 찾았을 수도 있다. 이와 같이 타 소프트웨어에 대한 이해도가 높을수록 버그를 해결하는 시간은 줄어든다.

시스템 이해도에 따른버그 해결 시간

본인이 담당하는 부분뿐만 아니라 시야를 돌려 다른 사람이 개발하는 부분까지도 이해할 수 있는 자세를 갖고 개발한다면 문제해결 능력이 월등히 향상됨을 확인할 수 있을 것이다.

“아는만큼 보인다. 원리와 시스템을 이해하라”

전체기능과 시스템의 이해를 높이는 방법에는 무엇이 있을까 개발자는 테스트를 정말 하기 싫어한다. 그래서 테스트를 시키면 “내가 이거하려고 여기 들어온 줄 알어!”하며 회사를 그만둘지도 모른다. 하지만 테스트를 해 보면 기능과 시스템에 대한 이해를 높일 수 있고 자신이 개발한 소프트웨어의 불편한 점이나 문제점을 사용자 입장에서 직접 느낄 수 있다. 왜 테스트가 좋을까 우리가 영어를 공부할 때 듣기와 읽기는 수동적인 방법이며 쓰기와 말하기는 능동적인 방법이라고 한다. 그래서 쓰기와 말하기가 어렵고 힘들지만 학습능력 향상에 좋다고 한다. 이처럼 문서로 시나리오나 스펙을 읽는 것보다 직접 테스트하는 능동적인 방법이 이해도를 더욱 높일 수 있는 것이다.

개발자가 전체 기능과 시스템을 이해하기 위해 테스트하는 것은 좋은 방법이며 개발자의 자발적 의지에 의해 진행하는 것이 더욱 효과적이다. 강제로 그리고 계속적으로 테스트를 시킨다면 역효과가 날 수 있으니 조심해야 한다.

커버리지가 높으면 높을수록

코드에 대해 테스트가 된 코드의 비율을 커버리지(Coverage)라고 한다. 테스트 케이스를 통해 테스트를 진행했을 경우 코드를 기준으로 테스트하는 화이트박스 테스트는 코드가 테스트된 비율이고 기능 테스트인 블랙박스 테스트는 기능이 테스트된 비율을 뜻한다. 커버리지가 높다는 것은 테스트되지 않은 소스나 기능의 비율이 낮다는 것으로 소프트웨어가 갖는 잠재버그가 작다는 것을 의미한다.

코드 커버리지

테스트 케이스에 따라 테스트되는 코드의 커버리지가 달라진다. <그림 3>에서 보는 것과 같이 add()의 경우는 a와 b값의 크기에 상관없이 실행되므로 값의 크기에 따라 커버리지가 영향을 받지 않는다. 하지만 divide()는 a와 b 값의 크기에 따라 a의 값이 b값보다 클 때는 c = a + b;를 실행하고 b의 값이 a값보다 크거나 같을 때는 c = b / a;를 실행하게 된다. divide()의 경우는 테스트 케이스 값에 따라 실행되는 코드가 달라지므로 모든 코드가 실행될 수 있도록 테스트 케이스를 만들고 테스트해야 한다. 만약 a가 b 값보다 큰 테스트 케이스만 만들어 테스트했을 경우 b의 값이 a보다 크거나 같을 때에 대해 테스트되지 않으므로 b의 값이 a보다 크거나 같을 때 수행되는 코드의 오류가 있더라도 테스트되지 않아 오류를 발견하지 못하게 된다.

기능 커버리지

코드 커버리지

소프트웨어의 기능을 수정할 때 그 수정이 갖는 의존성을 정확하게 다 파악하지 못하고 의존성을 갖는 소스나 기능 모두 테스트하지 못한 채 릴리즈되는 경우가 있다. 그 결과 수정으로 인한 잠재버그가 테스트되지 않고 릴리즈에 포함돼 현장에서 문제를 일으킨다.

사용자 정보 등록시 패스워드 암호화 기능을 추가했다. 단순한 추가로 보이지만 등록시에만 영향을 받는 것이 아니라 로그인, 사용자 정보 수정에 영향을 미치게 되므로 복잡한 작업이다. 단순히 등록 부분만 테스트한다면 이는 정보의 33%밖에 기능 수정에 대한 커버리지를 갖지 못하게 된다. 66% 정도는 테스트되지 않고 테스팅팀에 넘어가거나 그대로 출시된다. 커버리지를 높임으로써 잠재버그를 빨리 찾아낼 수 있어 소프트웨어 품질 향상에 도움을 줄 것이다.

“커버리지를 높이면 잠재버그는 줄어든다”

요구사항이 일부 수정돼 소프트웨어 일부가 수정될 때 이 수정이 어디까지 영향을 줄지를 파악하는 것은 어려운 일이다. 수정에 대한 의존성을 갖는 모든 부분을 찾아내지 못하고 일부만 테스트한다면 의존성을 갖는 부분에서는 수정으로 인한 에러가 발생할 것이다. 데이터베이스에서 회원정보 등록시 주민등록번호를 입력하지 않게 해 달라는 요청이 있어 데이터베이스 회원정보 테이블에서 주민등록번호 필드를 삭제할 경우 요구사항은 등록시 주민등록번호를 입력하지 않게 하는 것이다. 하지만 결국 주민등록 필드의 삭제로 인해 영향을 받는 기능은 회원정보등록뿐만 아니라 회원탈퇴, 회원정보수정, 회원정보검색에도 영향을 주게 된다. 요구사항에서는 드러나지 않으나 그 요구사항으로 인해 영향을 받는 기능까지도 충분한 테스트가 이뤄줘야 오류가 발생할 확률도 줄어든다.

성능 확보를 위한 테스트

기능 커버리지

성능 테스트란 무엇인가 사전적인 의미는 어떤 기계나 시스템을 실제로 사용되는 것과 같은 여건에서 성능을 측정하기 위해 실행하는 여러 가지 검사다. 통상적으로 한 개 또는 여러 개의 대표적인 프로그램을 측정하고자 하는 컴퓨터들에 수행시켜 성능을 측정함으로써 컴퓨터의 속도나 단위 시간당 일 처리량 등을 측정하는 것이다.

소프트웨어를 개발하면서 성능은 비기능적 요구사항이므로 개발 중 일정에 쫓기거나 정확한 성능 목표가 없다면 무시되고 간단하게 생각하고 넘어가는 사례가 있다. 그 결과 개발 마지막 단계 또는 릴리즈 단계에서 문제가 된다면 많은 비용을 지불하며 테스트하고 수정해야 한다. 성능은 요구사항 분석 단계에서부터 릴리즈 단계까지 정확한 성능 목표를 기준으로 테스팅돼야 하고 그 성능 목표를 위해 꾸준히 소프트웨어 튜닝 작업을 해야 한다. 성능을 위해 소프트웨어 구조가 바뀔 수도 있으며 구현하는 기능 또한 변경될 수 있기 때문이다. 성능 테스트는 소프트웨어의 병목지점을 파악하고 튜닝해 성능을 향상하는 것이며 소프트웨어의 가용성능을 측정해 시스템의 용량 산정과 시스템 확장 계획을 수립하기 위한 과정이다.

성능 테스트 요소

성능 테스트에 대한 이해를 위해 몇 가지 알아둬야 할 것이 있다. 성능 테스트를 하는 데 있어서 실제로 사용될 환경을 만들기 위해서는 부하가 어떻게, 얼마나 발생하는지를 파악해야 한다. 이는 부하 발생 모델이 될 수 있는데, 부하 발생 모델은 엑터에 의해 발생된다.

엑터는 측정하고자 하는 대상 시스템과 연관된 다른 시스템이 될 수도, 사용자가 될 수도 있다. 이 모든 엑터를 사용자로 규정한다면 시스템을 사용할 전체 사용자 수와 동시에 시스템을 사용하는 동시 사용자 수로 정의할 수 있다. <그림 5>와 같이 전체 사용자는 비접속자, 대기자, 사용자 모두를 포함하며 동시사용자는 대기자와 사용자를 포함한다.

사용자 및 호출간격의 정의

부하를 발생시키는 주체는 동시사용자다. 동시사용자에 의해 발생하는 호출 관계는 <그림 5>와 같이 요청시간(Request Time)과 대기시간(Think Time)으로 돼 있다. 응답시간(Response Time)은 사용자가 요청해서 응답을 받는 데까지의 시간이다. 이 시간은 요청이 갔다 오는 시간인 RTT(Round Trip Time)와 큐(Queue)에 대기하는 큐잉시간(Queuing Time), 요청을 처리하고 응답하는 시간인 프로세스 시간(Process Time) 등으로 구성된다. 또한 사용자가 다음 요청을 할 때까지 간격이 있는데 이를 대기시간이라고 한다. 이렇게 응답시간과 대기시간이 응답간격(Request Interval)이다. 우리는 이것을 어떻게 활용할 수 있을까 실제 환경과 유사한 부하를 만들어 내기 위해 이용된다. 사용자를 조사해 현 시스템의 전체 사용자 수와 그 중 동시사용자 수를 산정한다. 그리고 시스템의 응답시간과 대기시간을 선정한다면 동시에 몇 명의 사용자가 테스트 대상 시스템으로 요청을 보낼지의 여부를 계산할 수 있다. 테스트를 진행하면서 부하를 증가시켜야 한다면 동시사용자 수를 증가시키거나 대기시간을 줄이면 된다.

부하 처리량은 TPS, TPM, TPH로 표시하는데 초당, 분당, 시간당 처리되는 트랜잭션 양을 나타낸다. 처리하는 TPS가 크면 클수록 성능이 좋은 시스템이다.

병목 현상

동시사용자 수가 10,000명이며 응답시간은 3초, 대기시간은 7초라면 요청간격은 10초가 된다. 이 때 발생시켜야 하는 부하는 몇 TPS일까 10,000/10초(호출간격)=1,000TPS가 초당 1,000개의 트랜잭션을 발생시킨다면 예상되는 실제 환경과 유사한 부하를 만들어 낼 수 있다.

그렇다면 부하를 줬을 때 처리량에 따라 시스템의 성능은 어떻게 변화할까 사용자를 점차 증가시키며 부하를 줬을 때 처리량은 계속 증가하게 되는데 이를 저부하 구간이라고 한다. 사용자를 계속 증가시키면 어느 시점에서 처리량이 증가하지 않는 임계점에 도달하고 임계점을 기준으로 임계사용자 수가 결정된다. 이 구간은 고부하 구간이라고 한다. 고부하 구간에서 계속적으로 사용자 증가로 부하가 증가하면 서버에는 병목지점이 발생하고 시스템의 성능은 저하되기 시작한다. 이를 경합구간이라고 하며 시스템 성능 저하로 시스템에 계속적인 병목지점이 발생하고 결국은 시스템이 다운되는 현상이 발생할 수 있다. 이러한 병목구간은 사용자의 증가로 부하가 증가해 발생할 수 있지만 소프트웨어 소스의 리소스 관리 문제로 인해 조금씩 발생할 수도 있어 사용자의 증가가 직접적인 영향을 주지 않을 수도 있다. 따라서 시스템 병목현상의 원인을 많은 부하의 원인으로만 한정짓지는 말아야 한다.

시스템 확장 계획

Throughput 곡선

테스트를 진행할 때 시스템의 최대 처리량을 산정할 수 있다면 영업시 효율적인 시스템 선택으로 시스템 리소스의 활용도를 극대화 할 수 있을 뿐만 아니라 사용자 증가에 따른 시스템 확장 계획도 정확하게 수립할 수 있다.

부하 테스트를 진행하면서 User Count를 증가시켜 부하 발생량을 증가시킨다. 그 결과 시스템에 점점 많은 부하를 주어 시스템은 임계점에 도달하고 그 시점의 사용자 수를 임계사용자 수로 정한다. 그러면 이 시스템은 몇명의 동시사용자를 커버할 수 있다는 결과가 나온다.

테스트를 진행하다 보면 부하가 증가함에 따라 응답시간은 선형적으로 증가하게 된다는 것을 알 수 있다. 하지만 부하가 증가하고 병목구간이 발생하기 시작하면 요청의 대기시간이 길어져 응답시간이 기하급수적으로 증가된다. 임계사용자 수에 도달하면 성능개선 없이 응답시간만 계속 증가하게 되므로 이 시점의 사용자 수를 최대 허용 동시사용자 수라고 정의하기도 한다.

처리량과 최대 허용 동시사용자의 상관관계

목표로 하는 최대 허용 동시사용자의 목표치가 정의돼 있다면 이를 수용하는 시스템을 선정하기 위해 시스템을 확장·테스트해야 한다. 그리고 시스템을 확장한 만큼 시스템의 성능이 개선되지 않으므로 시스템 확장에 따른 성능 향상 비율을 산정해 추후 시스템 확장에 활용해야 한다. 성능 향상 계수는 시스템 확장과 성능과의 관계를 나타내며 성능 향상 비율·시스템 확장 비율로 계산된다.

피크치

성능 테스트 결과는 시스템의 비즈니스 로직 특성에 따라 변화를 가져온다. 어떤 태스크는 CPU를, 어떤 태스크는 메모리를, 어떤 태스크는 IO 리소스를 많이 사용하게 된다. 그러므로 성능 테스트시 체크해야 할 항목도 시스템의 비즈니스 특성에 따라 선정해야하며 모든 특성이 다 테스트 될 수 있도록 테스트 케이스를 선정하는 것도 중요하다. 현장에서 시스템의 성능을 모니터링하는 경우도 있는데 현장의 성능 모니터링은 신뢰성이 높다. 모니터링 결과 우리는 평균치와 피크치를 얻을 수 있다. 평균치와 피크치 중 어느 것이 용량 산정의 기준이 될까 피크치가 기준이 돼야 한다. 피크치까지 올라갈 수 있는 가능성이 있기 때문에 시스템 운영에 많은 영향을 줄 수 있다. 여기서 피크치가 실제적인 부하인지 다른 외부적인 요인에 의한 일시적인 피크치인지 정확하게 확인할 필요가 있다. 단순히 피크치를 확인하고 서버 용량을 산정한다면 불필요한 투자가 될 수도 있다.

“용량 기준은 실제 부하로 인한 피크치다”

용량 산정 기준

CPU의 경우는 피크치가 최대 80% 이하의 수준을 유지하도록 하고 메모리의 경우는 전체 메모리의 5% 이상 사용 가능한 메모리로 유지하면 된다. 성능 모니터링 결과를 정확하게 분석해 현재 시스템의 진단 및 시스템 사양 조정에 활용하면 정확한 시스템 확장을 통해 안정적인 서비스 지원 및 축소를 통한 원가절감이 가능할 것이다.

목적에 따른 성능 테스트

성능 테스트 방법에는 무엇이 있을까 성능 테스트 방법은 목적에 따라 크게 세 가지로 나눌 수 있다.

1) 단위 성능 시험 : 개개 업무의 최대 성능 산출

단위 성능 시험은 개개의 업무 모듈 혹은 프레임워크를 이루는 모듈의 최대 성능을 산출하기 위한 시험이다. 단위 성능 시험을 통해 조기에 단위 모듈의 성능적인 이슈를 찾아 튜닝함으로써 해결하는 데 그 목적이 있다. 성능 시험은 소스코드를 보지 않는 블랙박스 형태의 테스트지만 단위 성능 시험은 소프트웨어의 구조적인 문제에 대한 성능 검증도 하므로 화이트박스 형태의 테스트를 진행할 수도 있다. 어떠한 메커니즘을 소프트웨어 개발에 도입하고자 할 때 메커니즘을 이해하고 개발된 소스상에서 병목구간은 발생하지 않는지 테스트하고 튜닝해야 할 것이다. 통합 성능 시험은 실제 시스템이 가동되는 상황을 재현해야하므로 부하 시나리오를 만들고 부하 발생시 업무에 대한 가중치를 적용해 부하를 발생시켜야 할 것이다.

2) 통합 성능 시험 : 업무 가중치와 부하 시나리오를 이용한 시험

통합 성능 시험을 통해 목표 성능만큼의 부하를 처리하는지 검증할 수 있다.

3) 임계 성능 시험 : 시스템이 발휘할 수 있는 최대 성능 시험

임계 성능 시험은 목표 성능을 넘어 대상 시스템이 처리할 수 있는 최대 성능을 측정한다. 지속적으로 부하를 증가시키면서 대상 시스템의 임계점이 어디며 임계사용자 수는 얼마인지를 구할 수 있는 테스트다.

방법에 따른 성능 테스트

성능 테스트는 방법에 따라 다섯 가지로 나눌 수 있다.

1) 루프백(Loop Back) 시험 : 루프백 코드를 추가해 시험

소프트웨어가 여러 모듈간에 통합돼 있으므로 테스트 대상 코드에 바로 리턴하는 루프백 코드를 추가해 테스트하고자 하는 코드에 대한 성능 테스트를 진행한다. 성능적 이슈가 없는지 검증하는 테스트다.

2) 티어(Tier) 시험 : 티어간의 통신을 재현해 측정

시스템의 구성이 여러 티어로 구성돼 있을 때 병목이 발생하면 어느 티어에 의해 병목이 발생했는지 알 수 없으므로 티어간 분리를 해 각 티어에 병목이 없는지를 검증할 수 있도록 테스트 대상 티어에 직접 부하를 줘서 테스트하는 방법이다.

3) 스파이크 시험 : 동시사용자가 동시에 트랜잭션을 발생하는 시험

특정 기능이 특정 시점에 동시에 사용되며 그로 인해 시스템의 성능은 피크치에 도달할 수 있다. 이러한 기능에 대해서는 정해진 시간 내에 모두 정상적으로 처리되는지 검증하고 시스템이 정상적인 상태를 유지하는지 체크하는 테스트다.

4) 확장성 시험 : 시스템 증설에 대한 성능 향상 비율 측정

시스템을 증설한 만큼 성능이 비례하게 증가되지 않으므로 시스템 증설에 따른 성능 증가 폭을 측정하기 위한 테스트다. 이 결과는 시스템 확장에 활용할 수 있는 중요한 자료가 된다.

5) 가용성 시험 : 롱런(Long Run) 시험

자원 불균형 현상으로 시스템의 성능 저하나 다운 등의 현상이 있는지를 검증하기 위해 오랜 시간동안 진행하는 성능 테스트다.

소프트웨어 성능은 단위 모듈 개발자에게는 그리 중요하게 여겨지지 않는 요소일 것이다. 하지만 시스템이 통합되고 운영될 때 각 단위 모듈이 갖고 있는 병목은 통합된 시스템과 시스템 전체에 영향을 미쳐 사용자가 사용하는 시점에 엄청난 문제로 다가오는 경향이 많다. 모든 프로젝트 참여자는 소프트웨어 기능뿐만 아니라 성능의 중요성을 인식하고 성능 향상을 위한 활동을 모든 프로젝트 단계에서 진행해야 할 것이다.

요구분석 단계에서는 성능요소와 목표지수를 정확하게 선정하고 설계시에는 목표에 도달하기 위한 구조를 설계에 반영해야 한다. 구현시 코딩하고 단위 성능 테스트를 통해 코드상에 병목은 없는지 테스트하고 병목구간에 대해 튜닝해야 한다. 테스트 단계에서는 통합 테스트를 진행하고 임계 성능 테스트를 통해 시스템 확장계획을 수립해야 한다. 이와 같이 모든 단계에서 성능을 고려해야 한다. 하지만 많은 성능요소를 모두 만족시키는 것은 불가능하다. 따라서 개발하고자 하는 시스템에 대한 정확한 성능요소 선정 또한 주요한 작업 중 하나다.

트랜잭션을 모델링한다는 것

“성능 테스트를 정확하게 하십니까”라는 질문에 자신있게 대답할 수 있는 사람은 그리 많지 않을 것이다. 그렇다면 왜 성능 테스트를 하기 어려운걸까 몇 가지 원인을 찾아봤다. 첫째는 실제적으로 중요성이 몸에 와 닫지 않기 때문이다. 개발은 기능 중심으로 이뤄지고 개발일정도 기능 중심으로 체크된다. 따라서 기능 구현보다는 성능에 대한 중요성을 못 느끼게 되는 것이다. 둘째는 성능문제가 어디에서 발생될지 정확하게 모르기 때문이다. 무엇을 해야할지 감을 잡을 수 없으니 성능 테스트를 하지 못하는 것이다. 셋째는 실제 운영환경과 똑같은 환경을 만들 수 없는 제약사항 때문이다. 이같은 이유로 정확한 성능 테스트가 힘든 것이 사실이다. 하지만 성능문제로 발생하는 문제는 단순 기능의 문제를 훨씬 뛰어넘는 큰 문제를 야기시킨다. 전체 시스템이 멈춰버리는 것과 같은 심각한 상황을 초래할 수도 있다.

성능 테스트를 위해서는 어떤 트랜잭션이 존재하고 얼마나 많은 양의 트랜잭션이 발생하는지 분석돼야 한다. 이를 위해 트랜잭션의 패턴을 분석하고 각 패턴에서 실제적으로 발생하는 트랜잭션의 양을 산출해야 한다. 정확한 성능 테스트를 위해서는 실제 환경과 동일한 트랜잭션을 발생시켜 측정하는 것이 무엇보다도 중요하다. 트랜잭션 모델링을 통해 얻은 값의 정확도가 높을수록 성능 테스트에 대한 정확도가 높아진다.

“성능 테스트 결과의 정확도는 모델링의 정확도에 비례한다”

성능 테스트 툴

성능 테스트를 위해서는 대량의 부하를 발생시켜야 하므로 반드시 툴이 필요하다. 표준화된 프로토콜로 통신할 경우는 성능 테스트를 위해 상용 툴을 구입하기도 하지만 가격이 만만치 않다. 그래서 툴을 직접 개발해 사용하는 경우도 많다. 테스트 툴을 이용해 부하를 발생시키고 시스템 성능을 모니터링하기 위해 로그를 남겨 분석한다.

테스트 툴에는 입력해야 할 값이 필요하다. 트랜잭션에 대한 정보를 입력하는 것이다. 사용자 수, 반복주기, 동시사용자 수, 네트워크 프로토콜은 등 여러 가지 값이 있지만 입력에 어떤 값을 넣어야할지 전혀 알 수 없다.

성능 테스트 툴을 접해봤을 것이다. 테스트 툴에 대한 설명서는 볼 수 있지만 성능 테스트를 위한 파라미터값은 도메인마다 다르므로 가이드를 할 수 없다. 그래서 성능 테스트를 위한 트랜잭션 모델링이 필요한 것이다. 이처럼 툴에서 요구되는 파라미터는 트랜잭션 모델링에서 얻어진 값을 사용하면 된다.

트랜잭션을 발생시키기 위해서는 실제 환경과 유사한 트랜잭션 모델이 필요하다. 실제 환경에서 발생하는 트랜잭션에 대한 정확한 분석을 통해 트랜잭션 모델을 만들어 성능 테스트시 적용돼야 한다.

트랜잭션을 모델링하는 방법

예측에 의한 방법과 기존 사이트에 대한 로그분석 방법이 있다. 예측에 의한 방법은 트랜잭션의 패턴을 예측하는 것으로 정확성은 떨어지지만 실제 운영 사이트가 없다면 예측에 의한 방법을 사용할 수밖에 없다. 기존 사이트가 존재한다면 현재 운영되고 있는 사이트에 트랜잭션을 로그로 남기고 시스템 성능 로그를 남겨 분석함으로써 트랜잭션의 패턴을 모델링 할 수 있다. 이 방법은 정확성이 높다. 트랜잭션과 성능 로그를 함께 분석하면 트랜잭션에 따른 성능에 대한 영향도 예측할 수 있다. 단, 현장에 로그를 남기고 분석해야 하는 수고가 필요하다.

트랜잭션의 분류

성능 테스트시에는 문제가 발생하지 않았는데 실제 서비스 중에 성능 문제가 발생하는 것은 실제 운영되는 환경에서의 트랜잭션과 변수를 정확하게 반영하지 않고 테스트했기 때문이다. 이같은 테스트는 테스트를 위한 테스트가 될 수 있다. 트랜잭션의 형태는 다양하며 각 트랜잭션의 형태마다 서로 다른 형태로 발생된다. 트랜잭션의 형태는 외부입력으로 인해 발생하는 것과 자체적으로 발생하는 형태로 분류할 수 있다. 외부입력에 의해 발생하는 트랜잭션을 익스터널(외부) 트랜잭션이라 하고 내부에서 발생한 트랜잭션을 인터널(Internal) 트랜잭션이라 정의한다.

트랜잭션의 분류

익스터널 트랜잭션은 사용자 또는 외부 시스템에 의해 발생한 트랜잭션이고 인터널 트랜잭션은 내부의 타이머 또는 스케줄러에 의해 발생하는 트랜잭션이다.

모델링

트랜잭션은 분당 처리하는 트랜잭션 수인 TPM(Transaction Per Minute)을 산출하기 위해 분당 발생하는 트랜잭션 수를 모델링한다. 사용자에 의해 발생하는 트랜잭션의 경우는 응답결과를 확인하고 다음 트랜잭션을 수행하므로 최대응답시간에 대기시간을 더할 수 있다. 사용자 수는 비접속자, 대기자, 사용자를 의미하며 동시접속률은 대기자, 사용자를 계산하기 위한 동시접속확률이다. 동시접속률은 시스템의 특성이나 사용자의 특성을 고려해 정의한다. 사용자가 요청하고 응답을 기다릴 때까지 보통은 다른 요청을 하지 않고 기다리므로 트랜잭션 발생시간에 영향을 주는 시간이 최대응답시간이다. 요청에 대한 응답을 받은 후 다음 트랜잭션을 실행할 때까지의 시간이 대기시간이다.

1) 익스터널 트랜잭션 모델링

익스터널 트랜잭션의 변수명과 변수값

익스터널 트랜잭션 모델 = (ConnCnt * ConnRate) * (60/(MaxTime [+ThinkTime]))

사용자 수 = 10000, 동시접속률 = 20%, 최대응답시간 = 3초, Think Time = 5초일 때

(10000*0.2) * (60/ (3+5)) = 15000 TPM

2) 인터널 트랜잭션 모델링

인터널 트랜잭션의 변수명과 변수값

인터널 트랜잭션 모델 = TransactCnt * (60/CycleTime)

트랜잭션의 수 = 500, 발생 주기 = 5초 간격일 때

500 * (60/5) = 6000 TPM

익스터널 트랜잭션은 분당 15,000건, 인터널 트랜잭션은 분당 6,000건이 발생한다. 모델링의 값은 각 기능별 사용패턴에 따라 달라질 수 있으며 기능별로 트랜잭션을 구분하고 각 기능별 사용패턴에 맞게 트랜잭션을 모델링해 최종 TPM을 결정하고 이를 테스트에 반영한다.

트랜잭션의 진실

트랜잭션을 분석하다가 트랜잭션의 패턴이 계속 변한다는 재미있는 사실을 발견했다. 트랜잭션은 왜 바뀌는 것일까 트랜잭션이 바뀌는 이유를 이해하고 충분히 고려해 트랜잭션을 모델링해야 한다.

1) 시간대별 또는 내·외적 환경변화에 따라 변화한다

시간대별로 많이 사용하는 기능과 사용자의 수가 달라질 수 있다. 출입 시스템의 경우 출근시간이나 퇴근시간에 트랜잭션이 많고 사이트를 통해 이벤트를 한다든지 프로그램 내부적으로 스케줄링 태스크(정기점검, 일괄처리)가 있다면 이같은 내·외적 영향에 따라 트랜잭션은 증가한다.

2) 사용자의 사용 수준에 따라 트랜잭션이 변한다

사용자는 자신이 아는 만큼 사용한다. 기능이 익숙하지 않으면 사용하는 기능의 수와 사용횟수는 낮게 된다. 하지만 익숙해지기 시작하면 사용하는 기능의 수가 많아질 뿐만 아니라 사용하는 속도 또한 빨라진다. 이것은 트랜잭션의 증가를 가져온다. 그 결과 시간이 지날 수로 트랜잭션은 증가할 수 있다.

3) Unknown 트랜잭션이 영향을 준다

개발한 소프트웨어 이외에 백신이나 윈도우 업데이트 같은 타 소프트웨어에서 발생하는 트랜잭션이 성능 로그에 포함될 수 있다. 테스트시 Unknown 트랜잭션의 영향을 줄이기 위해 불필요한 서비스를 종료시키고 테스트를 진행해야 한다. 성능 로그의 피크치가 높게 나타났는데 이것이 개발한 소프트웨어의 트랜잭션으로 인한 것인지 타 소프트웨어에 의한 것인지 검토해야 한다. 피크치가 높게 나타난 순간 백신 프로그램의 검사나 윈도우의 업데이트가 실행됐을 가능성도 있기 때문이다.

모델링 적용

트랜잭션 모델링을 통해 얻은 값은 실제 성능 테스트 툴의 부하패턴 값으로 적용할 수 있다. 성능 테스트를 위한 다양한 값을 설정할 수 있도록 돼 있고 설정된 값에 따라 툴에서 부하를 발생시킨다.

부하 테스트를 위한 부하 패턴 설정

트랜잭션 모델링은 시스템이 사용되고 운영되는 실제 환경과 유사하게 트랜잭션을 발생시킴으로써 개발이 끝나고 릴리즈되기 전에 성능적인 문제를 미리 찾아 해결하고자 하는 데 그 목적이 있다.

[NHN SW 품질관리] 1. 소프트웨어 개발의 특징과 오해 (필사)

728×90

반응형

1. 소프트웨어 개발은 경험적 프로세스

정의된 프로세스 : 공장의 생산라인과 같이 반복할 수 있는 과정을 의미한다. 미리 정의된 절차가 있으며, 참여자는 절차를 잘 지키고 지시서를 충실하게 이행하여 반복적으로 같은 제품을 생산하는 것이다.

경험적 프로세스 : 비유하자면, 어머니가 음식을 만드는 과정과 유사하다.

음식이 완성될 때까지 양념을 넣고 간을 보고 다시 양념을 넣는 과정을 반복한다. 이렇게 피드백을 자주 받는 방식으로 제품을 생산하는 방식을 경험적 프로세스라고 한다.

※ 요즘 유행하는 Agile방법론은 “SW개발은 일반 제조업에서 사용하는 정의된 프로세스가 아니라, 경험적 프로세스에 더 적합하다고 생각하는 SW개발 방법론이다.”

※ 피드백이란? 현재까지 구현된 SW가 사용자의 요구 사항과 일치하는지를 확인하는 과정이다.

개발한 기능이 ‘사용자 요구 사항과 일치하는 것’은 ‘specification에 일치하는 것’보다 포괄적인 개념이다. 구현된 기능이 명세서와 일치하더라도 원래 의도와 다르게 구현된 경우가 많기 때문이다. 전통적인 개발 방법론에서는 이런 사실을 SW개발 프로젝트 막바지에 이르러서야

확인할 수 있다.

이런 문제를 프로젝트 후반부가 아닌 초기부터 자주 드러내어 문제를 일찍 해결하려는 방법이 반복점진적 개발 방법, 즉 Agile방법론이며 NHN에서 사용하는 방식이다.

2. SW 품질에 대한 정의

일반적으로 SW개발 프로젝트는 “비용”, :”시간”, “품질”을 3대 관리 요소로 보며 이를 “악마의 삼각형”이라고 한다.

이 삼각형은 3가지 관리요소가 제한된 자원을 나눠 가지며, 서로 제약하는 관계임을 보여준다.

따라서 한 요소를 강조하면 나머지 두 요소를 희생해야한다.

이 삼각형에서, “품질”은 기능이 오류 없이 동작해야함을 의미한다.

=> 시간과 비용을 중시하는 프로젝트라면 구현할 기능 수를 줄여야 한다.

그러나 구현할 기능 수를 그대로 유지하되 오류 없이 동작해야 한다는 입장이면 품질을 희생할 수 있다고 생각할 수 있다.

3. 오류 없는 SW는 비용이 많이 든다?

품질 비용이란 물품이나 서비스의 품질과 관련하여 발생하는 비용을 의미한다.

비용은 “예방 비용”, “평가 비용”, “내부 실패 비용”, “외부 실패 비용”으로 구성된다.

흔히 오류없이 동작하는 소프트웨어를 만드는 데는 과도한 품질 비용이 소모된다고 생각한다.

하지만 이 예방과 평가에 들어가는 비용은 실패비용에 비하면 아주 적은 비용에 불과하다.

※ ICST 2010에서 발표한 “구글의 개발 단계별 결함 수정에 들어간 비용”을 비교한 자료에서

개발자가 테스트 주도개발 (TDD) 과정에서 결함을 발견함녀 5달러의 비용으로 결함을 수정할 수 있지만

QA 단계인 시스템 테스트 과정에서 결함을 발견하면, 5000달러의 품질 비용이 소모된다고 발표했다.

이런 관점에서 본다면 SW품질을 높이기 위한 비용은 그 적용 시기가 문제이지 과도한 비용이 문제는 아님을 알 수 있다.

4. 기획서는 불변의 진리?

SW출시가 임박한 상황에서 가장 수용하기 어려운 것은 “초기 요구 사항의 변경”이다.

이것은 사용자에게 사소한 변경에 해당하더라도, 개발자에게는 근본을 흔드는 문제일 수 있기 때문이다.

이때 선택할 수 있는 길은 사용자의 변경 요구를 수용하여 일정을 미루거나. 변경 요구를 거부하는 것이다 ㅋㅋ.

변경 요구를 승인하고 매일 야근하는 방법도 있겠지만… 이는 언급하지 않겠다.

이러한 초기 요구사항의 변경은 왜 일어나는 것일까?

1) SW개발에서 조금의 코드를 수정함으로써 무엇이든 이룰 수 있다는 생각은 옳지 않다.

쉽게 수정이 가능하다는 생각으로 개발 후반부에 많은 요구 사항을 변경하면 프로젝트가 실패할 확률이 높아진다.

2) SW가 눈으로 확인할 수 있는 대상이 아니라는 것에 있다.

SW개발의 모든 단계에서 가시성이 확보되지는 않으므로, 고객의 요구 사항은 대부분 구현이 어느 정도 완료된 프로젝트 마지막 단계에 이르러서야 확인할 수 있다.

건물 건축에 있어서 준공이 시작되는 단계부터 지속적으로 진행 상황을 눈으로 보고 요구사항과 일치하는지를 확인 할 수 있으나,

SW개발에 있어서는 고객이 진행 상황을 파악하기 위해 프로젝트룸을 방문하더라도 볼 수 있는 것이라곤, 커피잔과 피곤에 찌든 개발자, 그리고 코딩창 뿐이다. SW개발이 최종 UI까지 완료된 후에야 고객은 비로소, 자신이 원하는 프로그램인지 아닌지를 판단할 수 있기 때문이다.

3) 언어의차이

고객이 요구사항을 설명할때, 고객이 설명한 내용을 기획서에 담을 때, 기획서의 내용을 설계문서에 옮길때, 설계한 내용을 코드로 구현할 때, 테스터가 테스트 케이스를 만들 때 쓰는 용어가 모두 다르다.

사용하는 용어가 다르면, 고객의 요구사항이 잘못 전달될 가능성이 크고, 잘못된 요구 사항은 고객에게 프로젝트 산출물을 시연하는 프로젝트 후반부에서야 발견되고, 이는 요구 사항 변경으로 이어지기 때문이다.

이런 문제는 이 장 이후에 나오는 다양한 기술의 방법을 통해 일부 제거할 수는 있지만, 완벽하게 제거할 수는 없다.

4) 비즈니스 환경의 변화

일반적으로 요구사항이 도출되고나서 SW가 완성되기 까지는 일정 시간이 소요된다.

그 사이 비즈니스환경은 달라질 수 있으며, 예전의 요구사항을 쓸모 없게 되고 새로운 요구 사항이 도출될 수도 있다.

따라서 기획서는 변경이 발생하지 않는 불변의 진리가 될 수 없으며, 그렇게 만들기 위해 노력하는 것도 효과적이지 못하다.

더 효과적인 방법은 프로젝트 참여자들이 기획서는 언제나 변경될 수 있다는 사실을 인정하고 변경 사항에 빠르게 대응할 수 있는 체계를 만드는 것이며, NHN의 QP활동은 요구 사항 변경에 효과적으로 대응하는 방법과 기술을 포함한다.

5. 회의의 중요성

회의시간은 필요하나 모든 참석자에게 훌륭한 도구라고 할 수 없다. 호의 시간 내내 메일만 보고 있는 사람, 자신과 관련된 이슈가 모두 정리 되었음에도 어쩔 수 없이 남아있는 사람, 왜 들어와 있는지 이유도 모르는 사람에게 회의는 낭비이다.

많은 사람이 모이는 회의가 효과적이지 못한 의사소통 방법이란 것을 알면서도 없애지 못하는 이유는 무엇일까?

SW개발은 수집한 고객의 요구사항을 토대로 제품을 개발하여 인도하는 과정이다.

고객의 요구사항은 통상 ‘요구 사항 정의서’라는 형식으로 기획 단계에서 정리되고, 개발 단계에서 ‘설계서, 상세 요구 사항’ 등으로 변환되며, QA단계에서 ‘테스트 케이스’로 변환된다. 하지만 기획, 개발 QA단계에서 사용하는 용어는 모두 다르다.

기획, 개발, QA가 모인 회의에서 개발자는 서버, 사용자DB등의 용어를 사용하며 기획자는 서비스, 고객들의 용어를 사용하고 QA는 프론트 서버, 백본 서버등의 용어를 사용하는 등 동일한 내용에 대해 다른 관점으로 용어를 사용한다.

또한 각 단계를 거쳐 정보가 전달되는 과정에서 정보의 전달되는 과정에서 정보의 변경 및 누락이 발생한다.

2009년 NHN의 신입 사원 교육 과정에서 ‘말 전달하기 게임’을 통해 정보 변경과 누락에 대한 모의 실험을 해본 적이 있다고 한다.

게임은 3명의 지원자 중 1명이 이해하기 쉬운 문장 3줄을 읽고 다른 사람에게 읽은 문장을 전달하여 마지막 사람이 말한 내용과 원문을 비교하는 것이었다.

예상하는 바와 같이 전달된 내용은 핵심뿐만 아니라 기본적인 골격도 바뀌어 있었다고 한다.

문제를 해결하기 위해 전통적인 개발 방법론에서는 ‘정확한 요구 사항’, ‘공통 용어집’, ‘문서 검토’ 를 사용하였으며, 문서를 쉽고 명료하게 작성하라고 강조한다. 또한 회의를 통해 내용을 공유하고 공동의 이해를 추구하라고 권장한다.

이런 과정을 통해 의사소통이 정확해질 것이라 기대하는 것이다. 그런데, SW개발의 ‘정확’이라는 개념에는 함정이 있다. 정확함이란 무엇인가?

=> 효과적인 명세 작성 파트에서 설명.

6. 기획자는 기획만, 개발자는 개발만, 테스터는 테스트만?

소프트웨어 개발 프로젝트에는 다양한 역할이 존재. 요구 사항은 제시하고 개발 비용을 제공하는 고객과, 고객 요구사항을 정리하고 고도화 하는 기획자, 이를 제품으로 만들어 내는 개발자 그리고 개발된 제품이 고객의 요구 사항을 만족하는지를 검증하는 QA/테스터가 있다.

‘이전 단계 작업 완료 -> 다음 단계 작업 시작’ 이라는 workflow 논리라는 SW개발 방법이 지배해왔으므로 역할을 기반으로 한 업무 분배는 논리적으로 이해하기 쉽고 매우 친숙하다. 기획과 설계가 완벽하게 마무리 되어야 개발이 진행될 수 있으며 개발이 완료된 후에야 테스트가 진행될 수 있다고 당연하게 생각한다.

이런 기능적 역할 분담과 순차적 일 흐름은 업무에 몰입할 수 있는 장점이 있지만 각 단계를 넘어가기 위해서는 의사소통 비용이 너무 많이 들고 역할별 이기주의를 만들어낸다. 기획자는 자신의 기획을 개발자들이 잘못 이해했다고 하고, 개발자는 구현할 수도 없는 엉성한 기획서를 주더니 내용도 수시로 변경하여 자원을 낭비한다고 하고, QA/테스터는 개발자들이 너무 많은 오류가 너무 많은 산출물을 주어서 매번 테스트를 새로 수행하게 된다고 개발자는 비난하며, 개발자들은 중요한 오류는 찾아내지 못하면서 사소한 오류에 집착한다며 QA/테스터를 비난한다. 관리자는 일정도 지키지 못하고 문제점을 가시화하지 않았다면서 모든 관련자를 비난하고, 그런 문제점을 효과적으로 관리하지 못했다는 비난을 고객에게 듣게 된다.

많은 SW 프로젝트에서 좋은 기획자, 개발자, QA/테스터를 찾아보기 힘든것은 바로 이런 이유 때문이다. 결국 모두가 상처받는 구조인 것이다.

이런문제를 해결하기 위해서는 전통적 역할에 대한 인식이 바뀌어야 하며 상호견제가 아닌 협업을 위한 구조가 만들어져야 한다.

SW개발은 고객의 요구 사항을 만족하는 SW를 만드는 것이 목적이므로 기획, 개발, QA/테스터 는 이를 달성할 수 있도록 함께 노력해야한다.

즉, 기획자의 기획 내용이 고객요구 사항과 일치하는지를 고객, 개발자, QA/테스터가 협업하여 검증하고 피드백을 줘야한다.

개발자가 생산한 제품이 기획 요구와 일치하는 지도 고객, 기획, QA/테스터가 함께 검증해야 한다. 또한 QA/테스터가 발견한 오류가 고객에게 어떤 영향을 주는지 고객, 개발자, 기획자가 함께 검증해야 한다. 이런 과정은 일회성 행사로 진행되는 것이 아니라 짧은 주기로 항시 수행되어야 한다.

NHN은 개발 프로세스 전 과정에서 이런 경계를 허물려고 노력하고 있다. 그 방법은 뒤에서 설명..

7. 생산성, 측정하지 못하면 개선하지 못한다?

기술의 발전 속도가 빠르고 진입 장벽이 낮은 SW분야에서 생산성을 향상시키는 일은 매우 중요하다. 많은 SW 개발 조직은 다양한 방식으로 생산성을 측정하고 개선하기 위해 노력하고 있으며, 대표적인 생산성 측정항목은 코드 라인 수와 버그밀도이다.

코드 라인 수 (LOC)로 생산성을 측정하는 방식은 단위 시간에 더 많은 코드를 생산하면 생산성이 높은 것처럼 보이므로 중복 코드를 발생시키고 리팩토링을 기피하게 만드는 부작용을 유발한다. LOC를 생산성과 품질을 측정하는 지표로 신뢰할 수 없는 이유는 케퍼스 존스가 1978년에 자신의 저서인 Assessment and Control of Software Risks에서 밝히고 있다.

높은 LOC가 높은 생산성을 의미한다면 근무 환경을 제공하는 것이 생산성 향상의 지름길이 될 것이다.

폭포수 모델은 각 단계( 요구/분석 -> 설계 -> 구현 -> 테스트 -> 유지 보수 )에서 모든 버그를 최대한 생산하여 제거하는 모델이다.

개발 후반부일 수록 의사소통 비용이 증가하므로 버그 제거비용도 상승한다. 하지만 단순히 버그의 밀도만 관리한다면 설계와 구현 단계에서 100개의 버그를 제거한 프로젝트와 테스트와 유지보수 단계에서 100개의 버그를 제거한 프로젝트의 생산성이 같이보인다는 문제가 생긴다.

생산성 측정의 어려움을 해결하기 위해서 개인이 아닌 팀 단위로 측정 단위를 높이거나 기능점수(Function Point) 등을 이용하는 방법도 시도했다.

하지만 사람의 변동성 요소, 즉 실연의 아픔을 겪은 후, 과음을 한 후 등과 같이 객관적으로 측정할 수 없는 상태들이 추가될 수 있는 요소를 완전히 제거하지 못했다.

도요타의 LEAN방법은 투입한 비용대비 수익으로 생산성을 계산하기도 한다. 아주 이상적인 방법이며 모든 문제를 개발의 문제로만 국한시키지 않고 조직의 각 구성원들이 생산성에 대한 책임을 나누어 가지므로 회사 전체를 하나의 방향으로 단결시켜 나갈 수 있다. 그러나 각 조직의 기여도를 찾아야 할 경우나 부분 최적화에 대한 욕구가 강할 경우, 수익이 장기간에 거쳐 발생하여 현재의 생산성 측정이 어려운 경우, 조직 간 협입이 아닌 경쟁에서 발생하는 경우에는 이 방식도 문제가 된다.

단일 지표의 문제점을 해결하기 위해서

버그 수,

코드 라인 수,

복잡도,

예상 대비 실 투입 시간

등등 여러 지표를 함께 분석하는 경우에도 지표간의 상관 관계를 설명할 수 있는 공식이 없어서 이를 신뢰할 수 없다.

이 같은 문제는 2003년 마틴 파울러가 “소프트웨어 생산성은 측정 불가능하다” 라고 주장한 기사에 잘 설명되어 있다.

즉, 특정 지표 몇가지를 이용해서 개발 생산성을 측정하고 조율하는 것은 효과적인 방법이 아니며, 목표 수치의 달성이 곧 품질과 생산성의 향상으로 연결되지 않는다는 사실을 유념해야한다.

NHN의 QP도 “테스트 커버리지”, “잔존 결함 밀도”, “코딩 표준 준수율”, “코드 리뷰 수행률”, “중복 코드”, “코드 복잡도”와 같은 항목을 측정한다.

하지만 NHN에서는 목표 수치의 달성을 절대적 가치로 생각하지 않으며 효과적인 개선 방법을 조직 스스로가 결정하고 발전시켜 나갈 수 있는 부가 정보로 활용하고 있다. 특정 항목의 측정 결과가 나쁠 경우, 해당 부분에 잠재적 문제가 있을 수 있음을 관련자에게 알리는 용도로 사용하며 측정 대상도 조직과 비즈니스 상황에 맞게 지속적으로 조정하고 있다.

728×90

반응형

품질 관리와 프로세스 개선

Preface

이번 장을 공부하며 소프트웨어 공정 과정에서 매우 중요시 하는 품질 관리가 개발 라이프사이클에 포함되어 있지 않은 이유에 대해 생각해보았다.

그 결과 품질 관리는 어느 특정 단계에서만 실시되는 것이 아닌, 개발 전 과정에 걸쳐 이루어지는 것이므로 독립적인 개념으로 설명할 수밖에 없다는결론을 내릴 수 있었다.

또한, 대입 시험을 예시로 든 CMMI 모델을 살펴보며 소프트웨어 공학을 마친 후 다른 과목을 학습할 때 이 모델을 직접 제작하여 그에 따라 실천한다면 큰 도움이 될 것 같다는 생각이 들어 실제로 CMMI 모델을 작성해 볼 예정이다.

1. 품질 관리

– 소프트웨어 품질 : 소프트웨어의 유용성을 얻기 위해 갖추어야 할 특성들의 집합

1) 사용자의 입장에서 평가

2) 각 공정과정마다 공식기술검토회를 거치는 것이 좋음

– 소프트웨어 품질 보증(SQA : Software Quality Assurance) : 소프트웨어를 개발할 때 과학적 관리 기법을 적용하여 사용자가 요구하는 품질의 제품을 체계적·경제적으로 달성하려는 활동들의 집합

– 소프트웨어 품질 보증 방법

1) 각 공정과정에 적용될 수 있는 방법과 도구들이 확립되어야 함

2) 각 공정과정의 결과물에 대한 공식 기술 검토가 이루어져야 함

3) 다단계 시험 전략이 필요함

4) 문서 관리에 관한 적절한 통제 절차가 필요함

5) 기록 유지와 보고가 체계적으로 이루어져야 함

6) 개발 표준의 확립이 필요함

7) 품질과 진행과정에 대한 측정이 필요함

– 품질 비용 : 제품 및 서비스의 품질과 관련하여 발생하는 비용

1) 예방 비용

2) 평가 비용

3) 실패 비용

– 소프트웨어 품질 요소 : 소프트웨어의 유용성 및 사용 목적을 달성하는 데 필요한 성질

[소프트웨어 품질 요소]

– 프로젝트 품질 관리 활동

1. 품질 계획 수립 : 프로젝트 및 소프트웨어의 품질 기준 수립

1) 프로젝트 계획 단계에서 수행

2) 결과물 : 품질 보증 계획서

2. 품질 보증(QA) 수행 : 프로젝트가 실행되며 품질 요구사항과 표준을 사용하고 있는지 확인

1) 품질 감사, 프로세스 분석을 통해 진행

2) 소프트웨어에 대한 품질 보증이 아닌, 프로젝트의 프로세스가 적합하게 이루어졌다는 것을 보여주는 것

3. 품질 통제(QC) : 프로젝트 각 단계의 산출물이 품질 표준에 부합하는지 감시

1) 결과가 불만족스러운 경우 원인 제거 방안 마련

– 기술 검토의 목적 : 다음 단계로 넘어가기 전 결함을 수정하여 개발 비용 최소화

– 공식 기술 검토 결과물

1) 검토 요약 보고서

2) 행동 항목 리스트 : 추가로 조사해야 할 항목 작성

– 공식 기술 검토 지침

1) 산출자가 아닌 산출물을 검토하라

2) 검토를 위한 시간, 자원을 할당하여 일정을 세운 후 이를 유지하라

3) 검토의 목적은 문제의 발견이므로 논쟁과 반박을 삼가라

4) 참가자의 수를 제한하고 사전 준비를 하라

5) 검토자의 의견을 기록하라

– 소프트웨어를 측정하는 것은 매우 중요하다.

– 소프트웨어 척도(metrics) : 소프트웨어와 관련된 다양한 자료를 수치로 표시하는 것

2. 소프트웨어 프로세스 개선

– 품질과 생산성에 영향을 주는 3요소

1) 사람(peolpe)

2) 문제(problem)

3) 프로세스(process)

– 소프트웨어 프로세스 개선(SPI)의 목적

1) 기존 프로세스를 점검하여 문제 발견

2) 프로세스를 개선하여 제품의 품질 향상

3) 비용과 일정 단축

– 프로세스 개선을 위해선 프로세스 측정이 우선되어야 한다.

– 프로세스 프레임워크 종류

1) CMMI

2) ISO 9001

3) SPICE 등

3. CMMI

– CMM(Capability Maturity Model for Sofrware) : 프로세스 개선 성숙도 모델(SW 영역에 한정)

→ 프로세스들의 모범적인 실무 지침 및 기준 제공

– 표준 프로세스 : 프로젝트를 수행하는 데 꼭 필요한 설명서(가이드라인)

– CMMI : 하드웨어, 시스템, 소프트웨어 영역을 통합하여 만든 프로세스 개선 성숙도 모델

1) 성숙도를 0레벨에서 5레벨까지(초기, 관리, 정의, 정량적 관리, 최적화)로 구별

2) 각 레벨마다 프로세스 영역(PA)을 지정

3) CMMI 평가 지침서는 목적, 주요 프로세스 영역, 주요 행동 지침에 대한 가이드라인을 제공

[4가지 지식 범주와 22개의 프로세스 영역] [CMMI 성숙도 레벨 6단계]

– 프로세스 영역(PA) : 성숙도를 성취하기 위해 만족시켜야 하는 요구사항

1) SG(Specific Goals) : 특정 목표

2) SP(Specific Practices) : 특정 수행 지침

① 결과물 : 대표적인 작업 산출물

② 실행 가이드라인 : 하부 지침

3) GG(Generic Goals) : 일반 목표

4) GP(Generic Practices) : 일반 수행 지침

[CMMI 모델 컴포넌트]

– CMMI 모델 컴포넌트

1) 필수(required) : 목표

2) 기대(expected) : 가이드라인

3) 유용(informative) : 필수 구성 요소와 기대 구성 요소에 접근하기 위한 상세 설명

– CMMI 평가 모델

1. 능력 모델

1) 조직의 각 프로세스 영역별로 능력 수준을 보여줌

2) 프로세스 영역 전체를 연속적 표현 방법으로 나타냄

3) 특정 프로세스 영역을 기준으로 조직 간 비교 평가 가능

4) 조직은 대게 각 프로세스 영역의 성숙도 수준이 서로 다름

[연속적 능력 모델]

2. 성숙도 모델

1) 각 레벨에 충족되어야 하는 PA 정의

2) 각 레벨에서 요구되는 모든 PA의 성숙도가 만족되면 다음 단계로 이동

3) 프로세스 영역을 단계적 표현 방법으로 나타냄

4) 대부분 기업들이 사용

[단계적 성숙도 모델]

– CMMI의 기능

1) 프로세스 표준화

2) 업무 처리 프로세스의 명확화

3) 프로젝트 목표 및 계획의 정량적 수립 가능 etc.

– CMMI 인증 평가 : 조직의 모델 대비 프로세스 적용 수준(성숙도) 판단을 통해 개선사항 도출 및 지속적인 개선 방향을 제시하기 위해 시행

4. ISO 9001

– ISO에서 제정한 품질 경영 시스템에 관한 국제 규격 중 고객에게 제공되는 제품 및 서비스 체계가 규정된 요구사항을 만족하고 지속적으로 유지·관리되고 있음을 인증해주는 제도이다.

– 품질 경영 : 품질을 위해 조직을 지휘하고 관리하는 활동

1) 품질 계획

2) 품질 관리

3) 품질 보증

4) 품질 개선

– 품질 경영 시스템 : 품질을 통한 시장 경쟁 우위 확보에 중점을 두어 조직 지휘·관리

– 국제표준화기구(ISO : International Organization for Standardization)

1) 국제 표준을 개발하고 발행

2) 비정부기구(NGO)

– ISO 9001 표준

1) 프로세스에 기반한 접근방법을 채택하도록 권장하지만, 정형화된 품질 경영 프로세스를 제시하지 않고, 특정 프로세스를 제한하지도 않음

2) 문서화된 품질 경영 시스템 요구

① 품질 방침 및 목표를 기술한 품질 계획서

② 품질 매뉴얼 : 조직의 품질 방침과 품질 경영 시스템을 기술한 가장 상위의 문서

③ 품질 절차서 : 품질 매뉴얼을 실행하기 위한 세부 문서

④ 품질 관련 프로세스를 문서화한 절차서

⑤ 시방서(specification), 설계 도면 등의 기술 문서

⑥ 기록 문서

– ISO 9001 기능

1) 고객 만족

2) 기업의 신뢰도 향상

3) 제품 및 서비스 품질 향상 etc.

– ISO 품질 경영 원칙

1) 고객 중심

2) 리더십

3) 전원 참여

4) 프로세스 접근 방법

5) 경영에 대한 시스템 접근 방식6) 지속적 개선7) 의사 결정에 대한 사실적 접근8) 상호 이익이 되는 공급자 관계

– ISO 인증 준비 과정1) 진단2) 추진 팀 교육3) 품질 경영 시스템 개발4) 품질 시스템 실행5) 최종 점검 및 심사

5. SPICE 모델

– SPICE(Software Process Improvement and Capability dEtermination)

1) 소프트웨어 프로세스 성숙도 평가를 위해 ISO에서 지정한 소프트웨어 심사 표준(인증 규격)

2) CMMI, ISO 9001 등의 장점을 수용하고 통합한 평가 모델

– SPICE의 프로세스 범주

1) CUSTOMER-SUPPLIER (고객- 공급자 )

2) ENGINEERING (엔지니어링)

3) SUPPORT (지원)

4) MANAGEMENT (관리)

5) ORGANIZATION (조직)

[SPICE 각 레벨별 측정 관점]

– SPICE 심사는 조직을 대상으로 이루어지며, 사업 목적과 관련된 일부 프로세스 영역들만 선택하여 심사받을 수 있다.

참고 문헌 : 윤청, 『소프트웨어 공학 에센셜』(생능출판), 2019, p.476~517.

키워드에 대한 정보 소프트웨어 품질 관리

다음은 Bing에서 소프트웨어 품질 관리 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 IT 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업TIP] – Recruit|FORCS

  • 포시에스
  • FORCS
  • 연구소
  • 취준생
  • 면접
  • 자소서
  • 포트폴리오
  • 취준
  • 꿀팁
  • 프로그램
  • 관리직
  • 연구직
  • OZreport
  • AI
  • 전자문서
  • 전자약정
  • 전자문서솔루션
  • 이폼사인
  • eformsign
  • 오즈이폼
  • OZeForm
  • 오즈리포트
  • 언택트
  • 비대면
  • 취업
  • csts

IT #취준생들 #모여봐! #[소프트웨어 #품질 #관리자가 #알려주는 #취업TIP] # # # #- # # # #Recruit|FORCS


YouTube에서 소프트웨어 품질 관리 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 IT 취준생들 모여봐! [소프트웨어 품질 관리자가 알려주는 취업TIP] – Recruit|FORCS | 소프트웨어 품질 관리, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  온라인 학습 머신 러닝 | 머신러닝 온라인 교육 1편 - 머신러닝의 기초 개념을 잡아봅시다 모든 답변

Leave a Comment