소프트웨어 제품 테스트. 다른 함수를 사용하는 함수의 기능을 확인하는 방법은 무엇입니까? 관련 테스트 변경

실패 후 30분 이내에 프로그램을 18번 다시 시작할 수 있고 그 후에야 모니터를 창에 정확히 던질 수 있을 정도로 관대하더라도, 이 프로그램으로 작업하는 것이 더 편할 것이라는 데 동의할 것입니다. 가을” .

낙하, 동결, 귀하가 개발 한 프로그램의 필요한 조치를 수행하지 못하는 경우가 매우 드물도록 만드는 방법은 무엇입니까?

이 질문에 대한 정확한 답은 없습니다. 그러나 수세기 동안 가장 현명한 과학자들은 이것에 대해 수년 동안 생각했지만 그럼에도 불구하고 모든 프로그램 오류를 제거하지는 못하더라도 적어도 오류를 제거하기 위해 활동하는 환상을 만드는 치료법을 찾을 수 있었습니다.

그리고 이 도구의 이름은 소프트웨어 제품 테스트.

현명한 사람들에 따르면 테스트는 개발 품질을 보장하는 가장 확립된 방법 중 하나입니다. 소프트웨어효과적인 도구 세트에 포함되어 있습니다. 현대 시스템소프트웨어 제품 품질 보증.

소프트웨어 제품의 품질은 제품 고객, 스폰서, 최종 사용자, 제품 개발자 및 테스터, 엔지니어, 마케팅, 교육 및 영업 사원. 각 참가자는 제품에 대해 다른 생각을 가질 수 있으며 제품이 얼마나 좋고 나쁜지, 즉 제품의 품질이 얼마나 높은지 알 수 있습니다. 따라서 제품의 품질을 보장하는 문제의 정식화는 이해 관계자와 그들의 품질 기준을 식별한 다음 이러한 기준을 충족하는 최적의 솔루션을 찾는 작업으로 귀결됩니다.

언제, 누구?

숙련된 개발자에 따르면 소프트웨어 제품 테스트는 제작 초기부터 바로 수행되어야 합니다. 그러나 동시에 숙련 된 개발자는 왕실 사업이 아니기 때문에 테스트에 참여해서는 안됩니다. 테스터라고 하는 특수 교육을 받은 직원이 소프트웨어 제품을 테스트해야 합니다. 가장 경험이 많은 개발자라도 최신 광학 기기를 사용해도 자신의 실수를 볼 수 없기 때문입니다.

그럼에도 불구하고 모든 개발자는 목표에 따른 분류 측면에서 소프트웨어 제품 테스트를 두 가지 클래스로 나누어야 한다는 데 동의합니다.

  • 기능 테스트
  • 비기능 테스트

기능 테스트

기능 테스트는 소프트웨어 제품이 이 제품 생성에 대한 참조 조건에 지정된 기능 요구 사항을 준수하는지 확인하는 것으로 이해됩니다. 간단히 말해서 기능 테스트는 소프트웨어 제품이 모든 기능을 수행하는지 여부를 확인합니다.

따라서 기능 테스트를 수행하기로 결정했습니다. 참조 조건을 보고 기능 요구 사항을 읽고 최소한 테스트할 수 있는 순서가 아님을 이해합니다. 오래 전에 다른 사람들이 이미 이러한 불일치를 알아차리고 이를 극복하는 방법을 알아냈다는 사실에 놀랄 것입니다.

기능 테스트를 수행하기 위해 기술 제어 부서의 직원은 애플리케이션 기능(API) 테스트를 위한 문서 프로그램 및 방법을 개발합니다. PMI 문서에는 소프트웨어 제품 테스트 시나리오(테스트 사례) 목록이 포함되어 있습니다. 상세 설명단계. 테스트 시나리오의 각 단계는 사용자(테스트 전문가)의 작업과 예상 결과(이러한 작업에 대한 프로그램의 응답)로 특징지어집니다. 프로그램 및 테스트 방법론은 실제 모드에서 소프트웨어 제품의 작동을 시뮬레이션해야 합니다. 즉, 테스트 스크립트는 시스템의 향후 사용자가 수행할 작업 분석을 기반으로 작성되어야 하며 개발자만 이해할 수 있는 인위적으로 컴파일된 일련의 조작이 아니어야 합니다.

일반적으로 기능 테스트는 두 가지 수준에서 수행됩니다.

  • 구성 요소(단위) 테스트. 소프트웨어 제품의 개별 구성요소를 세부 사항, 목적 및 기능적 특징에 중점을 두고 테스트합니다.
  • 통합 테스트. 이 유형테스트는 구성 요소 테스트 후에 수행되며 제어 흐름 및 데이터 교환 수준에서 다양한 하위 시스템의 상호 작용에서 결함을 식별하는 것을 목표로 합니다.

비기능 테스트

비기능 테스트는 예를 들어 인체 공학 또는 성능과 같은 소프트웨어 제품의 품질을 평가합니다.

이러한 유형의 테스트의 중요성은 분명하며 정당화가 필요하지 않다고 생각합니다. 결국 모든 사람은 예를 들어 시스템 성능이 충분하지 않은 경우 사용자가 자신의 행동에 대한 응답을 반나절 기다려야하므로 대규모 최대 절전 모드로 이어질 수 있음을 이해합니다.

이름에서 알 수 있듯이 비기능 테스트는 소프트웨어 제품이 비기능 요구 사항을 충족하는지 확인합니다. 위임 사항그것의 창조에. 그리고 Functional Testing과 마찬가지로 Non-Functional Testing을 위한 프로그램과 테스트 방법론을 개발한다.

애자일 시대의 임베디드 소프트웨어 테스팅 및 컴플라이언스

산업 표준 준수는 소홀히 하거나 나중에 할 수 있는 것이 아닙니다. 이는 임베디드 소프트웨어(SW) 개발 프로세스의 필수적인 부분입니다. 항공 전자 공학, 자동차 및 의료와 같은 일부 산업의 경우 복잡하고 문제가 없는 임베디드 시스템 개발에서 품질 표준을 엄격히 준수하는 것이 제품을 시장에 출시하기 위한 필수 조건이 되고 있습니다. 전통적으로 테스트는 표준 기반 산업을 위한 임베디드 시스템 개발에서 중요한 역할을 했습니다. 그러나 최근 몇 년 동안 확립된 관행 및 테스트 프로세스, 이러한 프로젝트에서의 위치 및 역할이 크게 변경되었습니다. 그것은 게임의 모든 규칙을 극적으로 변화시켰고, 게임의 규칙이 변할 때, 이기기 위해서는 그들과 함께 변해야 합니다.

최신 첨단 기술이 끊임없이 발전함에 따라 기업은 빠르게 변화하는 환경에서 길을 잃지 않도록 신뢰할 수 있고 안전하며 사용하기 쉽고 상호 운용 가능한 제품을 시장에 신속하게 제공해야 합니다. 기술 세계. 이러한 상황에서 소프트웨어 개발 프로세스가 엄격하게 순차적이고 테스트가 가장 마지막에 수행되는 전통적인 폭포수 모델은 과거의 일이 되고 있습니다. DevOps 및 Agile 방법은 엔지니어가 서로를 따라가던 작업을 동시에 수행할 수 있게 해주기 때문에 인기를 얻고 있습니다.

성능 시험

성능 테스트 단계에서는 먼저 부하 테스트를 수행하는데, 그 목적은 시스템이 실제 작동 모드에 가까운 모드에서 외부 영향에 적절하게 대응하는지 확인하는 것입니다.

부하 테스트 외에도 최소 하드웨어 및 최대 부하 조건(스트레스 테스트) 및 최대 처리 정보량 조건(볼륨 테스트) 조건에서 테스트가 수행됩니다.

또 다른 유형의 테스트가 있습니다. 안정성 및 신뢰성 테스트에는 정상적인 조건에서 소프트웨어 제품에 대한 장기 테스트뿐만 아니라 단기간의 스트레스 부하 후 정상 작동으로 돌아가는 기능도 포함됩니다.

테스트 문서

위에서 언급했듯이 테스트는 GOST 34.603-92에 따라 개발 중인 테스트 프로그램 및 방법론에 따라 수행됩니다.

테스트용으로 개발됨 테스트 케이스, 소프트웨어 제품의 모든 작동 모드를 확인하기에 충분한 데이터를 포함해야 합니다. 일반적으로 실제 데이터를 기반으로 고객과 계약자가 공동으로 테스트 케이스를 작성합니다.

모든 유형의 성능 테스트를 수행하기 위해 소위 데이터 생성기가 가장 자주 생성되어 다음을 수행할 수 있습니다. 자동 모드성과를 평가할 때 객관적인 결과를 얻기에 충분한 데이터를 생성합니다.

테스트 중에 테스트 프로토콜이 작성되어 테스트의 모든 단계 및 단계 통과에 대한 정보와 테스트 중에 받은 의견이 입력됩니다.

테스트 결과가 음성이면 결함을 수정하고 다시 테스트합니다.

탐색적 테스트

탐색 테스트(임시 테스트는 기능 테스트의 하위 종입니다. 명확한 문서 및 요구 사항이 없는 유연한 개발 방법으로 빠르게 성장하는 프로젝트에 사용됩니다. 탐색 테스트는 소프트웨어 테스트의 정점입니다. 고품질 테스트를 사용할 수 있습니다. 자격을 갖춘 전문가에게 거의 전적으로 연기자, 그의 경험, 지식 (주제 영역 및 테스트 방법 모두), 본질에 빠르게 침투하는 능력에 달려 있습니다.

스트레스 테스트

부하 테스트는 부하의 영향을 받는 테스트 중인 시스템의 성능을 분석하는 프로세스입니다. 부하 테스트의 목표는 응용 프로그램이 외부 부하를 견딜 수 있는지 확인하는 것입니다. 일반적으로 테스트는 여러 단계로 수행됩니다.

1. 테스트 스크립트 생성

효과적인 분석을 위해 시나리오는 실제 사용 사례에 최대한 근접해야 합니다. 예외는 항상 가능하며 가장 상세한 테스트 계획도 단일 사례를 다루지 않을 수 있음을 이해하는 것이 중요합니다.

2. 테스트 구성 개발

테스트 시나리오가 있으면 부하가 증가하는 순서를 분산시키는 것이 중요합니다. 성공적인 분석을 위해서는 성능 평가 기준(응답 속도, 요청 처리 시간 등)을 강조할 필요가 있습니다.

3. 테스트 테스트 실시

테스트를 수행할 때 스크립트 실행과 테스트 중인 시스템의 응답을 적시에 모니터링하는 것이 중요합니다. 높은 로드를 에뮬레이션하려면 심각한 하드웨어 및 소프트웨어 인프라가 필요합니다. 경우에 따라 작업 비용을 줄이기 위해 수학적 모델링 방법이 사용됩니다. 저부하에서 얻은 데이터를 기준으로 삼아 근사화합니다. 시뮬레이션된 부하 수준이 높을수록 추정 정확도가 낮아집니다. 그러나이 방법은 비용을 크게 줄입니다.

테스트 자동화

자동 테스트의 주요 기능은 회귀 테스트를 빠르게 수행하는 기능입니다. 자동화의 주요 이점(Worksoft 보고서에 따르면)은 직원 효율성 향상, 조기 결함 감지 등입니다. 고품질비즈니스 프로세스. 이러한 장점은 중요한 단점으로 상쇄됩니다. 높은 비용 - 테스트 자동화를 구현하고 유지하는 데 드는 비용이 높기 때문에 회사의 약 50%가 여전히 대부분 수동 테스트를 사용합니다.

사용성 테스트

모든 앱은 사용하도록 제작되었습니다. 사용 용이성은 프로그램의 중요한 품질 지표입니다. IT 업계는 성공적인 사용성 수정 이후에 이륙하는 프로젝트의 많은 예를 알고 있습니다. 청중이 많을수록 유용성 요소가 더 중요합니다. 사용성 테스트에는 사용자 행동에 대한 자세한 분석이 포함됩니다. 인체 공학을 평가하려면 비즈니스 작업을 완료하는 속도뿐만 아니라 사용자의 감정, 표정 및 음성 음색에 대한 데이터가 중요합니다.

구성 테스트

구성 테스트는 응용 프로그램이 최대 사용자 수를 의미하는 다양한 플랫폼에서 작동할 것이라는 확신을 줍니다. 웹 응용 프로그램의 경우 일반적으로 브라우저 간 호환성 테스트가 선택됩니다. Windows 응용 프로그램의 경우 - 다양한 테스트 운영체제및 비트(x86, x64). 구성 테스트의 중요한 구성 요소는 테스트 인프라입니다. 테스트를 위해서는 일련의 테스트 시스템을 지속적으로 유지 관리해야 합니다. 그들의 수는 5에서 수십까지 다양합니다.

통합 테스트

프로젝트에 둘 이상의 구성 요소가 있는 경우 통합 테스트가 필요합니다. 복잡한 애플리케이션 아키텍처에서 품질 보증에 필요한 조건은 프로그램 부분 간의 상호 작용을 확인하는 것입니다. 테스트는 "통해" 사례를 개발하고 수행함으로써 달성됩니다. 통합 테스트는 구성 요소 테스트 후에 수행됩니다. 따라서 테스트 사례의 비즈니스 방향을 존중하면서 구성 요소 테스트 경험을 고려하는 것이 매우 중요합니다.

스트레스 테스트

모든 시스템에는 한계가 있습니다 정상적인 기능. 한계를 초과하면 시스템이 스트레스 상태에 들어가고 동작이 크게 변경됩니다. 스트레스 테스트는 정상 작동 한계를 초과하는 조건에서 애플리케이션의 성능을 확인합니다. 이는 금융 소프트웨어, 항공 산업 프로그램 및 의학과 같은 "중요한" 프로그램에 특히 중요합니다. 스트레스 테스트는 장기간에 걸친 시스템의 거동에 대한 데이터를 획득하고 처리하기 위해 소프트웨어 개발 단계뿐만 아니라 전체 운영 주기에 걸쳐 수행됩니다.

get-data 함수가 있다고 가정합니다., 전달된 사용자 ID에 대한 정보 맵을 반환합니다. 이제 이 함수는 3가지 함수 source-a , source-b 및 source-c를 사용하여 세 가지 다른 종류의 맵을 얻습니다. 이제 이 모든 맵을 하나의 맵으로 결합하고 get-data에서 반환합니다..

get-data를 테스트할 때, 키에 대한 데이터가 있는지 확인해야 합니까? source-a , source-b 및 source-c 중 하나가 실패하면 이 함수가 단위 테스트에 실패하는 것이 이치에 맞습니까? thats 함수의 작업이 데이터를 결합하는 것이라면 충분할 것입니다.

1

2 응답

전달된 사용자 ID에 대한 정보 맵을 반환하는 get-data 함수가 있다고 가정합니다.

엄청난. 그런 다음 확인해야합니다. 주어진 ID에 대해 올바른 데이터를 반환하고 있습니까?

이제 이 함수는 3가지 함수 source-a, source-b 및 source-c를 사용하여 3가지 다른 종류의 맵을 얻습니다.

테스트에서 어떤 구현 세부 사항을 무시해야 합니까? 테스트하는 것은 작업 단위(이 메서드)가 수행해야 하는 작업(ID를 가져오고 해당 ID에 대한 XYZ 데이터 반환)을 수행한다는 것입니다. 어떻게이 방법은 실제로 중요하지 않습니다. 결국 이 단위 테스트의 주요 이점은 방법 구현을 리팩터링할 수 있고 테스트에서 제대로 수행했는지 확인할 수 있다는 것입니다.

그러나 아마도 데이터 소스를 모의해야 하므로 언젠가는 테스트에서 이 코드가 어떻게 작동하는지 알아야 할 것입니다. 여기에서 세 가지 상충하는 목표의 균형을 맞춰야 합니다. 즉, 테스트를 격리(데이터를 조롱하여)하고 테스트가 요구 사항과 실용성에 초점을 맞추도록 합니다.

결국 이것은 중요한 코드입니다. 실제 코드를 백업하기 위한 테스트가 있고, 많은 시간과 번거로움을 들여 광택을 확인하는 것은 테스트만큼 유용하지 않습니다. 만들기 .

단위 테스트에서는 한 클래스의 기능만 테스트해야 합니다. source-a, source-b 및 source-c 메서드가 다른 클래스를 호출하는 경우 해당 클래스를 모의해야 합니다(해당 클래스에서 단위 테스트를 수행해야 함).

통합 테스팅에서 여러분은 그들 사이에서 상호 작용하는 여러 클래스의 동작을 테스트하고 있습니다. 즉, get-data 함수는 검색 중인 데이터가 올바른지(source-a, source-b 및 source-c가 올바른지 확인해야 함) , 데이터가 제대로 조인됨) .

단위 테스트는 더 간단하고 집중적이며 개발자가 만들어야 합니다. 통합 테스트는 일반적으로 상대적으로 빠르게 구식이 됩니다(있는 경우). 내부 부품변경됨) 수행하기가 더 어렵습니다. QA 프로필에서 생성해야 합니다.

실패 후 30분 이내에 프로그램을 18번 다시 시작할 수 있고 그 후에야 모니터를 창에 정확히 던질 수 있을 정도로 관대하더라도, 이 프로그램으로 작업하는 것이 더 편할 것이라는 데 동의할 것입니다. 가을” .

낙하, 동결, 귀하가 개발 한 프로그램의 필요한 조치를 수행하지 못하는 경우가 매우 드물도록 만드는 방법은 무엇입니까?

이 질문에 대한 정확한 답은 없습니다. 그러나 수세기 동안 가장 현명한 과학자들은 이것에 대해 수년 동안 생각했지만 그럼에도 불구하고 모든 프로그램 오류를 제거하지는 못하더라도 적어도 오류를 제거하기 위해 활동하는 환상을 만드는 치료법을 찾을 수 있었습니다.

그리고 이 도구의 이름은 소프트웨어 제품 테스트.

현명한 사람들에 따르면 테스팅은 소프트웨어 개발의 품질을 보장하는 가장 확립된 방법 중 하나이며 현대 소프트웨어 품질 보증 시스템의 효과적인 도구 세트에 포함되어 있습니다.

소프트웨어 제품의 품질은 제품 고객, 스폰서, 최종 사용자, 제품 개발자 및 테스터, 엔지니어, 마케팅, 교육 및 영업 사원. 각 참가자는 제품에 대해 다른 생각을 가질 수 있으며 제품이 얼마나 좋고 나쁜지, 즉 제품의 품질이 얼마나 높은지 알 수 있습니다. 따라서 제품의 품질을 보장하는 문제의 정식화는 이해 관계자와 그들의 품질 기준을 식별한 다음 이러한 기준을 충족하는 최적의 솔루션을 찾는 작업으로 귀결됩니다.

언제, 누구?

숙련된 개발자에 따르면 소프트웨어 제품 테스트는 제작 초기부터 바로 수행되어야 합니다. 그러나 동시에 숙련 된 개발자는 왕실 사업이 아니기 때문에 테스트에 참여해서는 안됩니다. 테스터라고 하는 특수 교육을 받은 직원이 소프트웨어 제품을 테스트해야 합니다. 가장 경험이 많은 개발자라도 최신 광학 기기를 사용해도 자신의 실수를 볼 수 없기 때문입니다.

그럼에도 불구하고 모든 개발자는 목표에 따른 분류 측면에서 소프트웨어 제품 테스트를 두 가지 클래스로 나누어야 한다는 데 동의합니다.

  • 기능 테스트
  • 비기능 테스트

기능 테스트

기능 테스트는 소프트웨어 제품이 이 제품 생성에 대한 참조 조건에 지정된 기능 요구 사항을 준수하는지 확인하는 것으로 이해됩니다. 간단히 말해서 기능 테스트는 소프트웨어 제품이 모든 기능을 수행하는지 여부를 확인합니다.

따라서 기능 테스트를 수행하기로 결정했습니다. 참조 조건을 보고 기능 요구 사항을 읽고 최소한 테스트할 수 있는 순서가 아님을 이해합니다. 오래 전에 다른 사람들이 이미 이러한 불일치를 알아차리고 이를 극복하는 방법을 알아냈다는 사실에 놀랄 것입니다.

기능 테스트를 수행하기 위해 기술 제어 부서의 직원은 애플리케이션 기능(API) 테스트를 위한 문서 프로그램 및 방법을 개발합니다. PMI 문서에는 단계에 대한 자세한 설명과 함께 소프트웨어 제품 테스트 시나리오(테스트 사례) 목록이 포함되어 있습니다. 테스트 시나리오의 각 단계는 사용자(테스트 전문가)의 작업과 예상 결과(이러한 작업에 대한 프로그램의 응답)로 특징지어집니다. 프로그램 및 테스트 방법론은 실제 모드에서 소프트웨어 제품의 작동을 시뮬레이션해야 합니다. 즉, 테스트 스크립트는 시스템의 향후 사용자가 수행할 작업 분석을 기반으로 작성되어야 하며 개발자만 이해할 수 있는 인위적으로 컴파일된 일련의 조작이 아니어야 합니다.

일반적으로 기능 테스트는 두 가지 수준에서 수행됩니다.

  • 구성 요소(단위) 테스트. 소프트웨어 제품의 개별 구성요소를 세부 사항, 목적 및 기능적 특징에 중점을 두고 테스트합니다.
  • 통합 테스트. 이러한 유형의 테스트는 구성 요소 테스트 후에 수행되며 제어 흐름 및 데이터 교환 수준에서 다양한 하위 시스템의 상호 작용에서 결함을 식별하는 것을 목표로 합니다.

비기능 테스트

비기능 테스트는 예를 들어 인체 공학 또는 성능과 같은 소프트웨어 제품의 품질을 평가합니다.

이러한 유형의 테스트의 중요성은 분명하며 정당화가 필요하지 않다고 생각합니다. 결국 모든 사람은 예를 들어 시스템 성능이 충분하지 않은 경우 사용자가 자신의 행동에 대한 응답을 반나절 기다려야하므로 대규모 최대 절전 모드로 이어질 수 있음을 이해합니다.

이름에서 알 수 있듯이 비기능 테스팅은 소프트웨어 제품이 생성을 위한 참조 조건에서 비기능적 요구 사항을 준수하는지 확인합니다. 그리고 Functional Testing과 마찬가지로 Non-Functional Testing을 위한 프로그램과 테스트 방법론을 개발한다.

애자일 시대의 임베디드 소프트웨어 테스팅 및 컴플라이언스

산업 표준 준수는 소홀히 하거나 나중에 할 수 있는 것이 아닙니다. 이는 임베디드 소프트웨어(SW) 개발 프로세스의 필수적인 부분입니다. 항공 전자 공학, 자동차 및 의료와 같은 일부 산업의 경우 복잡하고 문제가 없는 임베디드 시스템 개발에서 품질 표준을 엄격히 준수하는 것이 제품을 시장에 출시하기 위한 필수 조건이 되고 있습니다. 전통적으로 테스트는 표준 기반 산업을 위한 임베디드 시스템 개발에서 중요한 역할을 했습니다. 그러나 최근 몇 년 동안 확립된 관행 및 테스트 프로세스, 이러한 프로젝트에서의 위치 및 역할이 크게 변경되었습니다. 그것은 게임의 모든 규칙을 극적으로 변화시켰고, 게임의 규칙이 변할 때, 이기기 위해서는 그들과 함께 변해야 합니다.

최신 첨단 기술이 끊임없이 발전함에 따라 기업은 빠르게 변화하는 환경에서 길을 잃지 않도록 신뢰할 수 있고 안전하며 사용하기 쉽고 상호 운용 가능한 제품을 시장에 신속하게 제공해야 합니다. 기술 세계. 이러한 상황에서 소프트웨어 개발 프로세스가 엄격하게 순차적이고 테스트가 가장 마지막에 수행되는 전통적인 폭포수 모델은 과거의 일이 되고 있습니다. DevOps 및 Agile 방법은 엔지니어가 서로를 따라가던 작업을 동시에 수행할 수 있게 해주기 때문에 인기를 얻고 있습니다.

성능 시험

성능 테스트 단계에서는 먼저 부하 테스트를 수행하는데, 그 목적은 시스템이 실제 작동 모드에 가까운 모드에서 외부 영향에 적절하게 대응하는지 확인하는 것입니다.

부하 테스트 외에도 최소 하드웨어 및 최대 부하 조건(스트레스 테스트) 및 최대 처리 정보량 조건(볼륨 테스트) 조건에서 테스트가 수행됩니다.

또 다른 유형의 테스트가 있습니다. 안정성 및 신뢰성 테스트에는 정상적인 조건에서 소프트웨어 제품에 대한 장기 테스트뿐만 아니라 단기간의 스트레스 부하 후 정상 작동으로 돌아가는 기능도 포함됩니다.

테스트 문서

위에서 언급했듯이 테스트는 GOST 34.603-92에 따라 개발 중인 테스트 프로그램 및 방법론에 따라 수행됩니다.

테스트를 위해 소프트웨어 제품의 모든 작동 모드를 테스트하기에 충분한 데이터가 포함된 테스트 케이스가 개발됩니다. 일반적으로 실제 데이터를 기반으로 고객과 계약자가 공동으로 테스트 케이스를 작성합니다.

모든 유형의 성능 테스트를 수행하기 위해 성능을 평가할 때 객관적인 결과를 얻기에 충분한 양의 데이터를 자동으로 생성할 수 있는 소위 데이터 생성기가 가장 자주 생성됩니다.

테스트 중에 테스트 프로토콜이 작성되어 테스트의 모든 단계 및 단계 통과에 대한 정보와 테스트 중에 받은 의견이 입력됩니다.

테스트 결과가 음성이면 결함을 수정하고 다시 테스트합니다.

탐색적 테스트

탐색 테스트(임시 테스트는 기능 테스트의 하위 종입니다. 명확한 문서 및 요구 사항이 없는 유연한 개발 방법으로 빠르게 성장하는 프로젝트에 사용됩니다. 탐색 테스트는 소프트웨어 테스트의 정점입니다. 고품질 테스트를 사용할 수 있습니다. 자격을 갖춘 전문가에게 거의 전적으로 연기자, 그의 경험, 지식 (주제 영역 및 테스트 방법 모두), 본질에 빠르게 침투하는 능력에 달려 있습니다.

스트레스 테스트

부하 테스트는 부하의 영향을 받는 테스트 중인 시스템의 성능을 분석하는 프로세스입니다. 부하 테스트의 목표는 응용 프로그램이 외부 부하를 견딜 수 있는지 확인하는 것입니다. 일반적으로 테스트는 여러 단계로 수행됩니다.

1. 테스트 스크립트 생성

효과적인 분석을 위해 시나리오는 실제 사용 사례에 최대한 근접해야 합니다. 예외는 항상 가능하며 가장 상세한 테스트 계획도 단일 사례를 다루지 않을 수 있음을 이해하는 것이 중요합니다.

2. 테스트 구성 개발

테스트 시나리오가 있으면 부하가 증가하는 순서를 분산시키는 것이 중요합니다. 성공적인 분석을 위해서는 성능 평가 기준(응답 속도, 요청 처리 시간 등)을 강조할 필요가 있습니다.

3. 테스트 테스트 실시

테스트를 수행할 때 스크립트 실행과 테스트 중인 시스템의 응답을 적시에 모니터링하는 것이 중요합니다. 높은 로드를 에뮬레이션하려면 심각한 하드웨어 및 소프트웨어 인프라가 필요합니다. 경우에 따라 작업 비용을 줄이기 위해 수학적 모델링 방법이 사용됩니다. 저부하에서 얻은 데이터를 기준으로 삼아 근사화합니다. 시뮬레이션된 부하 수준이 높을수록 추정 정확도가 낮아집니다. 그러나이 방법은 비용을 크게 줄입니다.

테스트 자동화

자동 테스트의 주요 기능은 회귀 테스트를 빠르게 수행하는 기능입니다. 자동화의 주요 이점(Worksoft 회사 보고서에 따르면)은 직원 효율성 증가, 결함 조기 감지 및 비즈니스 프로세스 품질 향상입니다. 이러한 장점은 중요한 단점으로 상쇄됩니다. 높은 비용 - 테스트 자동화를 구현하고 유지하는 데 드는 비용이 높기 때문에 회사의 약 50%가 여전히 대부분 수동 테스트를 사용합니다.

사용성 테스트

모든 앱은 사용하도록 제작되었습니다. 사용 용이성은 프로그램의 중요한 품질 지표입니다. IT 업계는 성공적인 사용성 수정 이후에 이륙하는 프로젝트의 많은 예를 알고 있습니다. 청중이 많을수록 유용성 요소가 더 중요합니다. 사용성 테스트에는 사용자 행동에 대한 자세한 분석이 포함됩니다. 인체 공학을 평가하려면 비즈니스 작업을 완료하는 속도뿐만 아니라 사용자의 감정, 표정 및 음성 음색에 대한 데이터가 중요합니다.

구성 테스트

구성 테스트는 응용 프로그램이 최대 사용자 수를 의미하는 다양한 플랫폼에서 작동할 것이라는 확신을 줍니다. 웹 응용 프로그램의 경우 일반적으로 브라우저 간 호환성 테스트가 선택됩니다. Windows 응용 프로그램의 경우 - 다양한 운영 체제 및 비트(x86, x64)에서 테스트합니다. 구성 테스트의 중요한 구성 요소는 테스트 인프라입니다. 테스트를 위해서는 일련의 테스트 시스템을 지속적으로 유지 관리해야 합니다. 그들의 수는 5에서 수십까지 다양합니다.

통합 테스트

프로젝트에 둘 이상의 구성 요소가 있는 경우 통합 테스트가 필요합니다. 복잡한 애플리케이션 아키텍처에서 품질 보증에 필요한 조건은 프로그램 부분 간의 상호 작용을 확인하는 것입니다. 테스트는 "통해" 사례를 개발하고 수행함으로써 달성됩니다. 통합 테스트는 구성 요소 테스트 후에 수행됩니다. 따라서 테스트 사례의 비즈니스 방향을 존중하면서 구성 요소 테스트 경험을 고려하는 것이 매우 중요합니다.

스트레스 테스트

모든 시스템에는 정상적인 기능의 한계가 있습니다. 한계를 초과하면 시스템이 스트레스 상태에 들어가고 동작이 크게 변경됩니다. 스트레스 테스트는 정상 작동 한계를 초과하는 조건에서 애플리케이션의 성능을 확인합니다. 이는 금융 소프트웨어, 항공 산업 프로그램 및 의학과 같은 "중요한" 프로그램에 특히 중요합니다. 스트레스 테스트는 장기간에 걸친 시스템의 거동에 대한 데이터를 획득하고 처리하기 위해 소프트웨어 개발 단계뿐만 아니라 전체 운영 주기에 걸쳐 수행됩니다.

모든 유형의 기능 테스트 중에서 프로그램이 처음부터 올바르게 작동해야하기 때문에 당연히 선두 위치를 차지합니다. 그렇지 않으면 사용 편의성, 보안 및 충분한 속도에 대한 의미가 전혀 없습니다. 다양한 테스트 기술을 습득하는 것 외에도 각 전문가는 가장 효과적인 결과를 얻기 위해 적절한 테스트 방법을 이해해야 합니다.

기능 테스트: 주로 어디에 노력을 기울여야 합니까?

단위 및 시스템 테스트용

"흰색" 또는 "검은색" 상자를 선택하려면

수동 테스트 및 자동화용

새로운 기능을 테스트하거나 ;

"음성" 또는 "양성" 테스트.

이러한 모든 활동 영역 사이에서 각 영역의 장점을 최대한 활용하여 노력의 균형을 맞추기 위해 "중간"이 될 올바른 경로를 찾는 것이 중요합니다.

소프트웨어 검증이 수행됩니다. 다른 방법들그 중 하나는 블랙박스 또는 데이터 기반 테스트입니다.

이 경우 프로그램은 "블랙 박스"의 관점에서 제시되며 프로그램의 동작이 사양을 준수하지 않는 상황을 찾기 위해 테스트가 수행됩니다. 모든 오류는 철저한 테스트의 도움으로 수행되는 데이터 관리에 의해 결정됩니다.

프로그램의 경우 명령 실행이 이전 이벤트에 따라 달라지면 가능한 모든 시퀀스를 확인해야 합니다. 대부분의 경우 철저한 테스트를 수행하는 것은 불가능하므로 더 자주 수용 가능하거나 합리적인 옵션을 선택합니다. 이는 모든 입력 데이터의 작은 하위 집합에서 프로그램을 실행하는 것으로 제한됩니다. 이 옵션은 사양과의 편차가 없음을 완전히 보장합니다.

기능 테스트에는 올바른 테스트 선택이 포함됩니다. 동시에 세트를 구성하는 이러한 방법을 구별하는 것이 일반적입니다.

경계값 분석;

동등한 파티션;

오류 추측;

원인과 결과 사이의 관계 분석.

각각을 개별적으로 고려할 수 있습니다.

경계 값 분석. 경계 값은 일반적으로 등가 클래스의 경계에 있는 값으로 이해됩니다. 그러한 장소에서는 오류를 찾을 가능성이 가장 큽니다. 이러한 방법을 사용하려면 전문가의 독창성과 고려중인 특정 문제에 대한 전문화가 필요합니다.

동등한 파티션. 가능한 모든 입력 매개변수 세트는 여러 등가 클래스로 나뉩니다. 유사한 오류를 감지하는 원칙에 따라 데이터를 결합합니다. 일반적으로 하나의 클래스 세트가 오류를 감지하면 동등한 클래스도 오류를 표시한다는 것이 인정됩니다. 기능 테스트 이 방법두 단계로 수행됩니다. 첫 번째 단계에서는 동등 클래스가 선택되고 두 번째 단계에서는 이미 특수 테스트가 구성됩니다.

원인과 결과의 관계 분석. 시스템은 이러한 검사로 인해 성능이 높은 테스트를 선택할 수 있습니다. 이 경우 별도의 입력조건을 원인으로 하고 출력조건을 결과로 본다. 이 방법은 모든 유형의 원인을 특정 결과에 귀속시키는 아이디어, 즉 동일한 인과 관계를 명확히 하는 데 기반합니다. 소프트웨어 제품 테스트는 여러 단계로 수행되어 원인과 결과 목록이 생성됩니다.

  • 작업 표준 또는 구현 계획에서 개발자의 의도하지 않은 편차;
  • 기능 및 인터페이스 요구 사항의 사양이 개발 표준을 준수하지 않고 실행되어 프로그램 기능이 중단됩니다.
  • 개발 프로세스 조직 - 프로젝트 관리자의 자원(인력, 기술, 소프트웨어 등) 관리가 불완전하거나 불충분하고 프로젝트 요소의 테스트 및 통합 문제.

ISO/IEC 12207 표준의 권장 사항을 기반으로 테스트 프로세스를 고려하고 각 수명 주기 프로세스에서 발견되는 오류 유형을 나열해 보겠습니다.

요구사항 개발 프로세스. 시스템의 초기 개념과 시스템의 초기 요구 사항을 결정할 때 사양을 작성하는 동안 분석가 오류가 발생합니다. 최상위시스템 및 주제 영역의 개념적 모델 구축.

이 프로세스의 일반적인 오류는 다음과 같습니다.

  • 최종 사용자에 대한 요구 사항 사양의 부적절성 - 운영 환경 또는 사용자와의 소프트웨어 상호 작용에 대한 잘못된 사양
  • 개별 및 일반 소프트웨어 속성에 대한 고객 요구 사항 간의 불일치
  • 기능적 특성에 대한 잘못된 설명;
  • 고객 요구 사항 구현의 모든 측면에 대한 도구 부족 등

디자인 과정.컴포넌트 설계상의 실수는 알고리즘, 제어 로직, 데이터 구조, 인터페이스, 데이터 흐름을 모델링하는 로직, 입출력 형식 등을 설명할 때 발생할 수 있습니다. 이러한 오류는 분석가의 사양 결함과 설계자의 결함을 기반으로 합니다. 여기에는 다음과 관련된 오류가 포함됩니다.

  • 환경과 사용자 인터페이스의 정의;
  • 기능에 대한 설명과 함께(복잡한 구성 요소를 확인할 때 감지되는 구성 요소의 목적과 목적이 부적절함)
  • 정보 처리 프로세스의 정의 및 프로세스 간의 상호 작용(구성 요소와 프로세스 간의 관계에 대한 잘못된 정의의 결과)
  • 개별 구성 요소 및 PS 전체에 대한 설명에서 데이터 및 구조의 잘못된 할당;
  • 모듈 알고리즘에 대한 잘못된 설명 포함;
  • 프로그램에서 가능한 오류 발생 조건의 정의와 함께;
  • 프로젝트에 채택된 표준 및 기술을 위반하는 경우.

인코딩 단계.이 단계에서 시스템을 개발하고 디버깅하는 과정에서 설계 결함, 프로그래머 및 관리자의 오류로 인한 오류가 발생합니다. 오류의 원인은 다음과 같습니다.

  • 입력 매개 변수, 배열 인덱스, 루프 매개 변수, 출력 결과, 0으로 나누기 등의 값에 대한 제어 부족
  • 호출된 서브루틴, 함수 등에서 반환 코드를 분석할 때 불규칙한 상황을 잘못 처리합니다.
  • 코딩 기준 위반(나쁜 댓글, 비합리적 모듈 할당및 구성 요소 등);
  • 다른 개체 또는 같은 개체의 다른 이름을 표시하기 위해 같은 이름을 사용하는 것, 잘못된 이름 니모닉 - 다른 개발자에 의한 프로그램의 일관성 없는 변경 등

테스트 프로세스.이 과정에서 프로그래머와 테스터는 조립 및 테스트 기술을 수행하고 테스트 스위트 및 테스트 시나리오를 선택하는 등의 작업을 수행할 때 오류가 발생합니다. 이러한 오류로 인해 발생하는 소프트웨어 오류는 구성 요소 및 소프트웨어의 오류 통계에 반영되지 않고 제거되어야 합니다. 일반적으로.

유지보수 프로세스. 유지 관리 프로세스 중에 운영 문서의 결점 및 결함, 수정 가능성 및 가독성에 대한 불충분한 지표, 소프트웨어 유지 관리 및/또는 개선을 담당하는 사람의 무능력으로 인해 발생하는 오류가 발견됩니다. 변경 사항의 특성에 따라 이전 단계에서 이전에 나열된 오류와 유사한 거의 모든 오류가 이 단계에서 발생할 수 있습니다.

프로그램에서 발생하는 모든 오류는 일반적으로 다음과 같은 부류로 나뉩니다[7.12].

  • 논리적 및 기능적 오류;
  • 계산 및 런타임 오류;
  • I/O 및 데이터 조작 오류
  • 인터페이스 오류;
  • 데이터 볼륨 오류 등

논리 오류알고리즘 논리 위반, 변수 및 연산자의 내부 불일치, 프로그래밍 규칙 위반의 원인입니다. 기능 오류는 잘못 정의된 기능, 적용 순서 위반 또는 구현의 완전성 부족 등의 결과입니다.

계산 오류소스 데이터의 부정확성 및 구현된 수식, 방법 오류, 계산 작업 또는 피연산자의 잘못된 적용으로 인해 발생합니다. 런타임 오류는 필요한 쿼리 처리 속도 또는 프로그램 복구 시간을 제공하지 못하는 것과 관련이 있습니다.

I/O 오류및 데이터 조작은 프로그램 실행을 위한 열악한 데이터 준비, 데이터를 데이터베이스에 입력하거나 데이터베이스에서 검색할 때 실패의 결과입니다.

인터페이스 오류개별 요소 간의 상호 연결 오류와 관련이 있으며, 이는 기능 환경과 상호 작용할 때뿐만 아니라 그들 사이에서 데이터를 전송할 때 나타납니다.

볼륨 오류데이터와 관련이 있으며 구현된 액세스 방법 및 데이터베이스 크기가 시스템 정보의 실제 볼륨 또는 처리 강도를 충족하지 않는다는 사실의 결과입니다.

주어진 주요 오류 클래스는 다양한 유형의 소프트웨어 구성 요소의 특징이며 프로그램에서 다양한 방식으로 나타납니다. 그래서 데이터베이스로 작업을 하다보면 데이터의 표현과 조작에 오류가 생기고, 논리적 오류응용 데이터 처리 절차 등의 작업에서 계산 오류는 계산 특성의 프로그램에서 우세하고 제어 및 처리 프로그램에서는 논리적 및 기능적 오류가 우세합니다. 서로 다른 기능을 구현하는 많은 다양한 프로그램으로 구성된 소프트웨어에는 오류가 포함될 수 있습니다. 다른 유형. 인터페이스 오류 및 범위 위반은 모든 유형의 시스템에 공통적입니다.

프로그램의 오류 유형을 분석하는 것은 소프트웨어의 정확성을 보장하기 위한 테스트 계획 및 테스트 방법을 작성하기 위한 전제 조건입니다.

소프트웨어 개발 지원 도구(CASE 기술, 객체 지향 방법 및 모델 및 프로그램용 설계 도구) 개발의 현재 단계에서 소프트웨어가 가장 일반적인 오류로부터 보호되어 다음을 방지하는 설계가 수행됩니다. 소프트웨어 결함의 출현.

실패에 오류 연결.프로그램에 오류가 있으면 일반적으로 작동 중에 소프트웨어 오류가 발생합니다. 인과 관계 "오류-실패"를 분석하기 위해 다음 작업이 수행됩니다.

  • 설계 및 프로그래밍 기술의 결함 식별;
  • 설계 프로세스의 결함과 인적 오류 간의 관계
  • 실패, 결함 및 가능한 오류의 분류 및 각 개발 단계의 결함 - 프로젝트 사양, 프로그램 모델의 오류로 인해 특정 개발 프로세스에서 발생한 인적 오류 및 개체의 결함 비교
  • 수명 주기의 모든 단계에서 오류에 대한 검증 및 보호, 개발의 각 단계에서 결함 감지
  • 결함 및 결함에 대한 정보의 지역화, 수집 및 분석을 위한 상호 연결 시스템 및 방법을 개발하기 위한 소프트웨어의 결함 및 결함 비교;
  • 소프트웨어 문서화 및 테스트 프로세스에 대한 접근 방식 개발.

오류-실패 인과 관계의 궁극적인 목표는 특정 클래스의 오류를 테스트하고 감지하기 위한 방법과 도구를 정의하고 데이터 집합에 대한 테스트 완료 기준을 정의하는 것입니다. 소프트웨어 개발, 테스트 및 유지 관리 프로세스의 조직을 개선하는 방법을 결정합니다.

다음과 같은 고장 유형 분류를 제공합니다.

  • 시스템 전체 소프트웨어가 작동하지 않는 하드웨어
  • 입력 데이터 오류 및 통신 채널을 통한 데이터 전송 오류로 인해 발생하는 정보 제공 및 입력 장치 오류(하드웨어 오류의 결과);
  • 기계와 상호 작용할 때 작업자 오류로 인해 발생하는 인체 공학적(이 오류는 정보 또는 기능 오류로 이어질 수 있는 2차 오류임)
  • 소프트웨어, 구성 요소 등에 오류가 있는 경우

일부 오류는 요구 사항 정의, 설계, 출력 코드 생성 또는 문서의 결함으로 인해 발생할 수 있습니다. 한편, 프로그램 개발 중 또는 프로그램의 개별 요소에 대한 인터페이스 개발 중에 생성됩니다(매개 변수 순서 위반, 매개 변수 적거나 많음 등).

오류의 원인.프로젝트, 구성 요소, 코드 및 문서를 개발하는 동안 오류가 생성될 수 있습니다. 일반적으로 소프트웨어를 실행하거나 유지 관리하는 동안 가장 예상치 못한 다양한 지점에서 발견됩니다.

프로그램의 일부 오류는 요구 사항 정의, 설계, 코드 생성 또는 문서화의 결함으로 인해 발생할 수 있습니다. 반면에 프로그램 또는 해당 요소의 인터페이스 개발 중에 오류가 발생합니다 (예 : 통신 매개 변수 설정 순서를 위반 한 경우-필요한 것보다 적거나 많음 등).

오류가 나타나는 이유는 고객 요구 사항에 대한 오해입니다. 프로젝트 문서 등의 요구 사항이 정확하지 않습니다. 이는 고객이 제안한대로 작동하지 않는 일부 시스템 기능이 구현된다는 사실로 이어집니다. 이와 관련하여 고객과 개발자 사이에 설명을 위한 요구 사항의 일부 세부 사항에 대한 공동 토론이 이루어집니다.

시스템 설계 팀은 시스템 설명의 구문과 의미를 변경할 수도 있습니다. 그러나 일부 오류는 감지되지 않을 수 있습니다(예: 이러한 연산자의 인덱스 또는 변수 값이 잘못 설정됨).




맨 위