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

충돌 후 30분 이내에 프로그램을 18번 다시 시작할 수 있을 정도로 인내심을 갖고 모니터를 창에 직접 던진다고 해도 "충돌"이 발생하지 않으면 이 프로그램을 사용하는 것이 더 편할 것이라는 데 동의할 것입니다. ” .

충돌, 정지 또는 개발한 프로그램의 필수 작업 수행 실패 사례가 매우 드물게 되도록 어떻게 보장할 수 있습니까?

에 대한 정확한 답변은 이 질문아니요. 그러나 수세기에 걸쳐 가장 현명한 과학자들은 이 주제에 대해 수년 동안 생각해 왔으며 모든 프로그램 오류를 제거하지 못하더라도 적어도 오류를 제거하기 위한 조치의 환상을 만드는 해결책을 찾을 수 있었습니다.

그리고 이 치료법은 테스트 소프트웨어 제품 .

현명한 사람들에 따르면, 테스팅은 개발 품질을 보장하는 가장 확립된 방법 중 하나입니다. 소프트웨어그리고 세트에 포함되어 있어요 효과적인 수단 현대 시스템소프트웨어 제품의 품질을 보장합니다.

소프트웨어 제품의 품질은 제품 고객, 스폰서, 최종 사용자, 제품 개발자 및 테스터, 지원 엔지니어, 마케팅 등 이해관계자의 관점에서 제품이 얼마나 "좋은지" 결정하는 일련의 속성으로 특징지어집니다. , 교육 및 영업 인력. 참가자마다 제품에 대한 생각이 다르고, 제품의 좋고 나쁨, 즉 제품의 품질이 어느 정도인지에 대한 생각이 다를 수 있습니다. 따라서 제품 품질 보장 문제를 설정하는 것은 이해관계자와 그들의 품질 기준을 식별하고 이러한 기준을 충족하는 최적의 솔루션을 찾는 작업으로 이어집니다.

언제, 누구?

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

그러나 모든 개발자는 목적별 분류 관점에서 소프트웨어 제품을 테스트하는 것을 두 가지 클래스로 나누어야 한다는 데 동의합니다.

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

기능 테스트

기능 테스트는 소프트웨어 제품이 이 제품 생성을 위한 기술 사양에 지정된 기능 요구 사항을 준수하는지 확인하는 것을 의미합니다. 간단히 말해서 기능 테스트는 소프트웨어 제품이 필요한 모든 기능을 수행하는지 확인합니다.

그래서 마침내 기능 테스트를 수행하기로 결정했습니다. 기술 사양을 살펴보고 기능 요구 사항을 읽고 적어도 테스트가 수행될 수 있는 순서가 아니라는 것을 깨닫게 됩니다. 꽤 오래 전에 다른 사람들이 이미 이러한 불일치를 발견하고 이를 극복하는 방법을 알아냈다는 사실에 놀랄 것입니다.

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

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

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

비기능 테스트

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

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

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

애자일 시대의 임베디드 소프트웨어 테스트 및 규정 준수

업계 표준 준수는 무시하거나 나중에 수행할 수 있는 작업이 아닙니다. 이는 임베디드 소프트웨어(소프트웨어) 개발 프로세스의 필수적인 부분입니다. 항공전자공학, 자동차, 의료 등 일부 산업에서는 복잡하고 문제가 없는 임베디드 시스템 개발 시 품질 표준을 엄격히 준수하는 것이 제품 출시에 필수적입니다. 전통적으로 테스트는 표준 규제 산업을 위한 임베디드 시스템 개발에서 중요한 역할을 해왔습니다. 그러나 최근 몇 년 동안 확립된 테스트 관행과 프로세스, 해당 프로젝트에서의 위치와 역할이 크게 변경되었습니다. 그것은 게임 체인저였으며, 게임의 규칙이 바뀌면 승리하려면 그들과 함께 바꿔야 합니다.

새로운 최첨단 기술이 지속적으로 개발됨에 따라 기업은 빠르게 변화하는 기술 세계에서 길을 잃지 않기 위해 신뢰할 수 있고 안전하며 사용하기 쉽고 다른 시스템과 호환되는 제품을 시장에 신속하게 제공해야 합니다. 이러한 상황에서 소프트웨어 개발 프로세스가 엄격하게 순차적이고 테스트가 마지막에 수행되는 전통적인 폭포 모델은 과거의 일이 됩니다. DevOps와 Agile 방법은 엔지니어가 이전에 서로 따라오던 작업을 동시에 완료할 수 있게 해주기 때문에 점점 더 대중화되고 있습니다.

성능 시험

성능 테스트 단계 중 첫 번째 단계는 부하 테스트이며, 이 테스트의 목적은 시스템이 실제 작동에 가까운 모드에서 외부 영향에 적절하게 대응하는지 확인하는 것입니다.

부하 테스트 외에도 최소 하드웨어 및 최대 부하 조건에서 테스트(스트레스 테스트)를 수행하고 처리된 정보의 최대량 조건에서 테스트(체적 테스트)를 수행합니다.

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

테스트를 위한 문서

위에서 언급한 바와 같이 테스트는 GOST 34.603-92에 따라 개발된 프로그램 및 테스트 방법론에 따라 수행됩니다.

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

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

테스트 중에 테스트의 모든 단계 및 단계 완료에 대한 정보와 테스트 중에 받은 의견이 포함된 테스트 프로토콜이 작성됩니다.

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

탐색적 테스트

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

스트레스 테스트

부하 테스트는 부하가 걸린 상태에서 테스트 중인 시스템의 성능을 분석하는 프로세스입니다. 부하 테스트의 목적은 외부 부하를 견딜 수 있는 애플리케이션의 능력을 확인하는 것입니다. 일반적으로 테스트는 여러 단계로 수행됩니다.

1. 테스트 스크립트 생성

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

2. 테스트 구성 개발

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

3. 테스트 테스트 수행

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

테스트 자동화

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

유용성 테스트

모든 애플리케이션은 사용하기 위해 생성됩니다. 사용 편의성은 프로그램의 중요한 품질 지표입니다. IT 업계에서는 성공적인 유용성 수정 후 프로젝트가 시작된 사례를 많이 알고 있습니다. 청중이 넓을수록 사용성 요소가 더 중요해집니다. 사용성 테스트에는 사용자 행동에 대한 자세한 분석이 포함됩니다. 인체공학을 평가하려면 비즈니스 작업을 완료하는 속도뿐만 아니라 사용자의 감정, 표정, 목소리 음색에 대한 데이터를 갖는 것이 중요합니다.

구성 테스트

구성 테스트를 통해 애플리케이션이 다양한 플랫폼에서 작동하므로 최대 사용자 수에 대해 확신을 가질 수 있습니다. 웹 애플리케이션의 경우 일반적으로 브라우저 간 테스트가 선택됩니다. Windows 애플리케이션의 경우 - 다양한 테스트 운영체제및 비트 크기(x86, x64). 구성 테스트의 중요한 구성 요소는 테스트 인프라입니다. 테스트를 수행하려면 테스트 시스템을 지속적으로 유지 관리해야 합니다. 그 수는 5에서 수십까지 다양합니다.

통합 테스트

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

스트레스 테스트

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

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

get-data를 테스트할 때키에 대한 데이터 가용성을 확인해야 합니까? source-a, source-b 및 source-c 중 하나가 실패하면 이 함수가 단위 테스트에 실패하는 것이 타당합니까? 그 기능의 역할이 데이터를 결합하는 것이고, 실제로 그렇게 된다면 그것으로 충분할 것입니다. 그렇죠?

1

답변 2개

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

엄청난. 그렇다면 확인해 보아야 합니다. 특정 ID에 대해 올바른 데이터를 반환하고 있습니까?

이제 이 함수는 source-a, source-b 및 source-c 세 가지 함수를 사용하여 세 가지 종류의 맵을 생성합니다.

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

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

결국 이것은 중요한 코드입니다. 실제 코드를 지원하기 위한 테스트가 있는데, 시간이 많이 걸리고, 다듬기를 확인하는 번거로움이 테스트만큼 유용하지 않습니다. 만들기 .

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

통합 테스트에서는 클래스 간에 상호 작용하는 여러 클래스의 동작을 테스트합니다. 이는 데이터 가져오기 기능이 검색되는 데이터가 올바른지 확인해야 함을 의미합니다(소스-a, 소스-b 및 소스-c가 정확하고 데이터가 제대로 연결되어 있습니다).

단위 테스트는 더 간단하고 집중적이며 개발자가 작성해야 합니다. 통합 테스트는 일반적으로 상대적으로 빨리 구식이 됩니다(있는 경우). 내부 구성 요소변경됨) 수행이 더 어려워졌습니다. QA 프로필로 생성되어야 합니다.

충돌 후 30분 이내에 프로그램을 18번 다시 시작할 수 있을 정도로 인내심을 갖고 모니터를 창에 직접 던진다고 해도 "충돌"이 발생하지 않으면 이 프로그램을 사용하는 것이 더 편할 것이라는 데 동의할 것입니다. ” .

충돌, 정지 또는 개발한 프로그램의 필수 작업 수행 실패 사례가 매우 드물게 되도록 어떻게 보장할 수 있습니까?

이 질문에 대한 정확한 답은 없습니다. 그러나 수세기에 걸쳐 가장 현명한 과학자들은 이 주제에 대해 수년 동안 생각해 왔으며 모든 프로그램 오류를 제거하지 못하더라도 적어도 오류를 제거하기 위한 조치의 환상을 만드는 해결책을 찾을 수 있었습니다.

그리고 이 치료법은 소프트웨어 제품 테스트.

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

소프트웨어 제품의 품질은 제품 고객, 스폰서, 최종 사용자, 제품 개발자 및 테스터, 지원 엔지니어, 마케팅 등 이해관계자의 관점에서 제품이 얼마나 "좋은지" 결정하는 일련의 속성으로 특징지어집니다. , 교육 및 영업 인력. 참가자마다 제품에 대한 생각이 다르고, 제품의 좋고 나쁨, 즉 제품의 품질이 어느 정도인지에 대한 생각이 다를 수 있습니다. 따라서 제품 품질 보장 문제를 설정하는 것은 이해관계자와 그들의 품질 기준을 식별하고 이러한 기준을 충족하는 최적의 솔루션을 찾는 작업으로 이어집니다.

언제, 누구?

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

그러나 모든 개발자는 목적별 분류 관점에서 소프트웨어 제품을 테스트하는 것을 두 가지 클래스로 나누어야 한다는 데 동의합니다.

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

기능 테스트

기능 테스트는 소프트웨어 제품이 이 제품 생성을 위한 기술 사양에 지정된 기능 요구 사항을 준수하는지 확인하는 것을 의미합니다. 간단히 말해서 기능 테스트는 소프트웨어 제품이 필요한 모든 기능을 수행하는지 확인합니다.

그래서 마침내 기능 테스트를 수행하기로 결정했습니다. 기술 사양을 살펴보고 기능 요구 사항을 읽고 적어도 테스트가 수행될 수 있는 순서가 아니라는 것을 깨닫게 됩니다. 꽤 오래 전에 다른 사람들이 이미 이러한 불일치를 발견하고 이를 극복하는 방법을 알아냈다는 사실에 놀랄 것입니다.

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

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

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

비기능 테스트

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

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

이름에서 알 수 있듯이 비기능 테스트는 소프트웨어 제품이 생성되는 기술 사양의 비기능 요구 사항을 준수하는지 확인합니다. 그리고 기능 테스팅과 마찬가지로 비기능 테스팅을 위한 테스트 프로그램과 방법론도 개발된다.

애자일 시대의 임베디드 소프트웨어 테스트 및 규정 준수

업계 표준 준수는 무시하거나 나중에 수행할 수 있는 작업이 아닙니다. 이는 임베디드 소프트웨어(소프트웨어) 개발 프로세스의 필수적인 부분입니다. 항공전자공학, 자동차, 의료 등 일부 산업에서는 복잡하고 문제가 없는 임베디드 시스템 개발 시 품질 표준을 엄격히 준수하는 것이 제품 출시에 필수적입니다. 전통적으로 테스트는 표준 규제 산업을 위한 임베디드 시스템 개발에서 중요한 역할을 해왔습니다. 그러나 최근 몇 년 동안 확립된 테스트 관행과 프로세스, 해당 프로젝트에서의 위치와 역할이 크게 변경되었습니다. 그것은 게임 체인저였으며, 게임의 규칙이 바뀌면 승리하려면 그들과 함께 바꿔야 합니다.

새로운 최첨단 기술이 지속적으로 개발됨에 따라 기업은 빠르게 변화하는 기술 세계에서 길을 잃지 않기 위해 신뢰할 수 있고 안전하며 사용하기 쉽고 다른 시스템과 호환되는 제품을 시장에 신속하게 제공해야 합니다. 이러한 상황에서 소프트웨어 개발 프로세스가 엄격하게 순차적이고 테스트가 마지막에 수행되는 전통적인 폭포 모델은 과거의 일이 됩니다. DevOps와 Agile 방법은 엔지니어가 이전에 서로 따라오던 작업을 동시에 완료할 수 있게 해주기 때문에 점점 더 대중화되고 있습니다.

성능 시험

성능 테스트 단계 중 첫 번째 단계는 부하 테스트이며, 이 테스트의 목적은 시스템이 실제 작동에 가까운 모드에서 외부 영향에 적절하게 대응하는지 확인하는 것입니다.

부하 테스트 외에도 최소 하드웨어 및 최대 부하 조건에서 테스트(스트레스 테스트)를 수행하고 처리된 정보의 최대량 조건에서 테스트(체적 테스트)를 수행합니다.

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

테스트를 위한 문서

위에서 언급한 바와 같이 테스트는 GOST 34.603-92에 따라 개발된 프로그램 및 테스트 방법론에 따라 수행됩니다.

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

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

테스트 중에 테스트의 모든 단계 및 단계 완료에 대한 정보와 테스트 중에 받은 의견이 포함된 테스트 프로토콜이 작성됩니다.

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

탐색적 테스트

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

스트레스 테스트

부하 테스트는 부하가 걸린 상태에서 테스트 중인 시스템의 성능을 분석하는 프로세스입니다. 부하 테스트의 목적은 외부 부하를 견딜 수 있는 애플리케이션의 능력을 확인하는 것입니다. 일반적으로 테스트는 여러 단계로 수행됩니다.

1. 테스트 스크립트 생성

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

2. 테스트 구성 개발

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

3. 테스트 테스트 수행

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

테스트 자동화

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

유용성 테스트

모든 애플리케이션은 사용하기 위해 생성됩니다. 사용 편의성은 프로그램의 중요한 품질 지표입니다. IT 업계에서는 성공적인 유용성 수정 후 프로젝트가 시작된 사례를 많이 알고 있습니다. 청중이 넓을수록 사용성 요소가 더 중요해집니다. 사용성 테스트에는 사용자 행동에 대한 자세한 분석이 포함됩니다. 인체공학을 평가하려면 비즈니스 작업을 완료하는 속도뿐만 아니라 사용자의 감정, 표정, 목소리 음색에 대한 데이터를 갖는 것이 중요합니다.

구성 테스트

구성 테스트를 통해 애플리케이션이 다양한 플랫폼에서 작동하므로 최대 사용자 수에 대해 확신을 가질 수 있습니다. 웹 애플리케이션의 경우 일반적으로 브라우저 간 테스트가 선택됩니다. Windows 애플리케이션의 경우 - 다양한 운영 체제 및 비트 전송률(x86, x64)에서 테스트합니다. 구성 테스트의 중요한 구성 요소는 테스트 인프라입니다. 테스트를 수행하려면 테스트 시스템을 지속적으로 유지 관리해야 합니다. 그 수는 5에서 수십까지 다양합니다.

통합 테스트

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

스트레스 테스트

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

모든 유형 중에서 기능 테스트는 프로그램이 먼저 올바르게 작동해야 하기 때문에 정당하게 선두 위치를 차지합니다. 그렇지 않으면 사용 용이성, 보안 및 충분한 속도가 전혀 소용이 없습니다. 다양한 테스트 기술을 숙달하는 것 외에도 각 전문가는 가장 효과적인 결과를 얻기 위해 테스트를 올바르게 수행하는 방법을 이해해야 합니다.

기능 테스트: 주요 노력을 어디로 지시할 것인가?

단위 및 시스템 테스트용

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

수동 테스트 및 자동화용

새로운 기능을 테스트하기 위해 또는

"음성" 또는 "양성" 테스트의 경우.

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

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

이 경우 프로그램은 "블랙박스"의 관점에서 제시되며, 프로그램의 동작이 사양을 따르지 않는 상황을 확인하기 위해 테스트가 수행됩니다. 모든 오류는 철저한 테스트, 즉 가능한 모든 수단을 동원하여 수행되는 데이터 관리를 통해 식별됩니다.

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

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

경계값 분석;

동등한 분할;

오류 가정;

원인과 결과 사이의 연관성 분석.

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

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

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

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

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

ISO/IEC 12207 표준의 권장 사항을 기반으로 한 테스트 프로세스를 살펴보고 각 수명 주기 프로세스에서 감지되는 오류 유형을 살펴보겠습니다.

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

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

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

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

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

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

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

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

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

프로그램에서 발생하는 모든 오류는 일반적으로 다음과 같은 클래스로 구분됩니다 [7.12].

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

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

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

I/O 오류데이터 조작은 프로그램 실행을 위한 데이터의 품질이 좋지 않은 준비, 데이터베이스에 데이터를 입력하거나 데이터베이스에서 검색할 때의 실패로 인해 발생합니다.

인터페이스 오류개별 요소 간 관계의 오류를 의미하며, 이는 요소 간 데이터 전송 및 운영 환경과의 상호 작용 중에 나타납니다.

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

주어진 주요 오류 클래스는 다양한 유형의 소프트웨어 구성 요소의 특징이며 프로그램에서 다양한 방식으로 나타납니다. 따라서 데이터베이스 작업 시 데이터 표현 및 조작에 오류가 발생하며, 논리적 오류적용되는 데이터 처리 절차 등을 지정하는 경우. 계산 프로그램에서는 계산 오류가 지배적이며 제어 및 처리 프로그램에서는 논리적 및 기능적 오류가 지배적입니다. 다양한 기능을 구현하는 다양한 프로그램으로 구성된 소프트웨어에는 오류가 포함될 수 있습니다. 다른 유형. 인터페이스 오류와 볼륨 위반은 모든 유형의 시스템에서 일반적입니다.

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

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

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

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

오류-실패 원인 분석의 궁극적인 목표는 특정 클래스의 오류를 테스트하고 감지하는 방법과 수단뿐만 아니라 여러 데이터 세트에 대한 테스트를 완료하기 위한 기준을 정의하는 것입니다. 소프트웨어 개발, 테스트 및 유지 관리 프로세스의 조직을 개선하는 방법을 식별합니다.

실패 유형은 다음과 같이 분류됩니다.

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

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

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

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

오류의 원인은 고객 요구 사항에 대한 이해 부족입니다. 프로젝트 문서 등의 요구 사항 사양이 부정확합니다. 이로 인해 일부 시스템 기능이 구현되어 고객이 제안한 대로 작동하지 않게 됩니다. 이와 관련하여 요구 사항의 일부 세부 사항에 대해 고객과 개발자 간의 공동 논의가 수행되어 이를 명확히 합니다.

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




맨 위