번역기 | Zhu Xianzhong
Reviewer | Sun Shujuan
일반적으로 소프트웨어 테스트는 상대적으로 간단합니다. 각 입력 => 알려진 출력입니다. 그러나 소프트웨어 테스팅의 역사를 통틀어 많은 테스트가 추측 수준에 머무르는 경우가 많습니다. 즉, 테스트 중에 개발자는 사용자의 작업 프로세스를 상상하고 가능한 부하를 예측하고 소요 시간을 분석한 다음 테스트를 실행하고 현재 결과를 기준 답변과 비교합니다. 회귀가 없는 것으로 확인되면 현재 빌드 계획이 올바른 것으로 간주되며 후속 테스트를 계속합니다. 회귀가 있으면 반환하십시오. 대부분의 경우 우리는 이미 출력을 알고 있지만 더 잘 정의할 필요가 있습니다. 회귀의 경계는 명확하고 모호하지 않습니다. 실제로 이것이 바로 기계 학습(ML) 시스템과 예측 분석이 등장하여 모호함을 없애는 곳입니다.
테스트가 완료된 후 성능 엔지니어가 하는 일은 결과의 산술 평균과 기하 평균을 보는 것뿐만 아니라 관련 백분율 데이터도 보는 것입니다. 예를 들어, 시스템이 실행 중일 때 가장 느린 요청의 10%는 시스템 오류로 인해 발생하는 경우가 많습니다. 이 오류는 항상 프로그램 속도에 영향을 미치는 조건을 만듭니다.
데이터에서 사용 가능한 속성을 수동으로 연결할 수 있지만 ML은 가능한 것보다 더 빠르게 데이터 속성을 연결할 수 있습니다. 성능 엔지니어는 잘못된 요청의 10%를 유발하는 조건을 식별한 후 동작을 재현하기 위한 테스트 시나리오를 구축할 수 있습니다. 수정 전후에 테스트를 실행하면 수정이 수정되었는지 확인하는 데 도움이 됩니다.
그림 1: 성과 지표에 대한 전반적인 신뢰도
기계 학습은 소프트웨어 개발을 촉진하여 문제의 개발 기술을 더욱 강력하고 다양한 분야의 사용자 요구에 더 잘 만족시키는 데 도움이 됩니다. 분야와 산업. 파이프라인과 환경의 데이터를 딥 러닝 알고리즘에 공급하여 인과 패턴을 노출할 수 있습니다. 성능 엔지니어링 방법과 결합된 예측 분석 알고리즘은 보다 효율적이고 빠른 처리량을 지원하고 최종 사용자가 자연스러운 시나리오에서 소프트웨어를 사용하는 방법에 대한 통찰력을 얻으며 개발자가 생산 환경에서 결함이 있는 제품이 사용될 가능성을 줄이는 데 도움이 됩니다. 문제와 원인을 조기에 식별함으로써 개발 수명주기 초기에 문제를 수정하고 생산에 미치는 영향을 방지할 수 있습니다. 전반적으로 예측 분석을 활용하여 애플리케이션 성능을 향상시킬 수 있는 몇 가지 방법은 다음과 같습니다.
"빅 데이터"는 일반적으로 데이터 세트를 의미합니다. 예, 대용량 데이터 세트이므로 속도가 급격히 증가하고 내용도 크게 변경됩니다. 이러한 데이터를 분석하려면 데이터에서 패턴과 정보를 추출할 수 있는 특수한 방법이 필요합니다. 최근 몇 년 동안 스토리지, 프로세서, 프로세스 병렬성 및 알고리즘 설계의 개선으로 시스템이 합리적인 시간 내에 대량의 데이터를 처리할 수 있게 되었고 이러한 방법을 더 폭넓게 사용할 수 있게 되었습니다. 의미 있는 결과를 얻으려면 데이터 일관성을 보장해야 합니다.
예를 들어, 각 프로젝트는 동일한 순위 시스템을 사용해야 하므로, 사람들이 "DEFCON 5"를 사용하여 "DEFCON 1"을 의미하는 것처럼 한 프로젝트에서는 1을 핵심 값으로 사용하고 다른 프로젝트에서는 5를 사용하면 값이 처리하기 전에 정규화해야 합니다. 예측 알고리즘은 알고리즘과 알고리즘이 제공하는 데이터로 구성되며, 소프트웨어 개발은 최근까지 유휴 상태로 삭제되기를 기다리는 방대한 양의 데이터를 생성합니다. 그러나 예측 분석 알고리즘은 이러한 파일을 처리하여 다음과 같이 감지할 수 없는 패턴에 대해 이 데이터를 기반으로 질문하고 대답할 수 있습니다.
이러한 질문과 답변은 예측 분석의 목적입니다. 즉, 앞으로 일어날 일을 더 잘 이해하기 위한 것입니다.
예측 분석의 또 다른 주요 구성 요소는 알고리즘을 신중하게 선택하거나 구현해야 한다는 것입니다. 모델이 점점 더 복잡해지고, 입력 데이터의 변화에 점점 더 민감해지고, 잠재적으로 예측이 왜곡되는 경향이 있기 때문에 간단하게 시작하는 것이 중요합니다. 분류와 회귀라는 두 가지 유형의 문제를 해결할 수 있습니다(그림 2 참조).
그림 2: 분류 및 회귀
신경망은 예를 통해 학습하고 과거 데이터와 현재 데이터를 사용하여 미래 가치를 예측합니다. 그들의 아키텍처를 통해 우리의 두뇌가 패턴을 감지하는 방식을 복제하여 데이터에 숨겨진 복잡한 관계를 식별할 수 있습니다. 이는 데이터를 수용하고 예측을 계산하며 출력을 단일 예측으로 제공하는 많은 레이어로 구성됩니다.
결정 트리는 특정 옵션의 잠재적인 위험과 이점을 예측하기 위해 일련의 "if/then" 옵션으로 결과를 표시하는 분석 방법입니다. 모든 분류 문제를 해결하고 복잡한 질문에 답할 수 있습니다.
그림 3에 표시된 것처럼 의사결정 트리는 향후 의사결정을 설명하고 의사결정 경로를 식별하는 데 도움이 되도록 데이터를 분기형 파티션으로 분할하는 다양한 방법을 식별할 수 있는 알고리즘으로 생성된 하향식 트리와 유사합니다.
로드하는 데 3초 이상 걸리면 트리의 한 가지가 장바구니를 버린 사용자일 수 있습니다. 그 아래에는 다른 가지가 여성인지 여부를 나타낼 수 있습니다. 분석에 따르면 여성은 충동적인 구매를 할 가능성이 더 높으며 이러한 지연은 반추로 이어질 수 있으므로 "예"라고 답하면 위험이 높아집니다.
그림 3: 의사결정 트리 예
회귀는 가장 널리 사용되는 통계 방법 중 하나입니다. 이는 블랙 프라이데이 세일 기간 동안 각 서비스에 추가해야 하는 추가 리소스 수와 같은 숫자를 추정할 때 중요합니다. 많은 회귀 알고리즘은 변수 간의 관계를 추정하고 대규모 및 혼합 데이터 세트에서 주요 패턴은 물론 변수 간의 관계를 찾도록 설계되었습니다. 이는 단순 선형 회귀 모델(데이터에 맞는 직선 함수 계산)부터 로지스틱 회귀(곡선 계산)까지 다양합니다(그림 4).
선형 및 로지스틱 회귀전체 비교 | |
선형 회귀 |
로지스틱 회귀 |
은 향후 몇 달간 사용자 트래픽 급증 위험과 같은 연속 범위의 값을 정의하는 데 사용됩니다. |
이는 이전 세트를 기반으로 매개변수를 예측하는 통계 방법입니다. 이진 분류에 가장 적합합니다. y=0 또는 1인 데이터 세트. 여기서 1은 기본 클래스 다른을 나타냅니다. 그 이름은 변환 함수 (는 논리 함수 ) 에서 유래되었습니다. |
y=a+bx로 표현됩니다. 여기서 x는 출력 y를 결정하는 데 사용되는 입력 집합입니다. 계수 a와 b는 x와 y 사이의 관계를 수량화하는 데 사용됩니다. 여기서 a는 절편이고 b는 선의 기울기입니다. |
로지스틱 함수로 표현됩니다. 여기서 , β0은 절편, β 1 은 요율입니다 . 훈련 데이터를 사용하여 예측 결과와 실제 결과 사이의 오류를 최소화하는 계수를 계산합니다. |
목표는 대부분의 점에 가장 가까운 직선을 맞춰서 y와 직선 사이의 거리나 오류를 줄이는 것입니다. |
확률을 이진 분류로 변환하기 위해 임계값이 적용되는 S자형 곡선을 형성합니다. |
그림 4: 선형 회귀와 로지스틱 회귀
알고리즘이 특정 속성을 해결하기 때문에 지도 학습 방법입니다. 비지도 학습은 특정한 결과를 염두에 두지는 않지만 가능한 패턴이나 추세를 식별하려는 경우에 사용됩니다. 이 경우 모델은 가능한 한 많은 기능 조합을 분석하여 인간이 조치를 취할 수 있는 상관 관계를 찾습니다.
그림 5: 지도 학습과 비지도 학습
이전 알고리즘을 사용하여 제품 및 애플리케이션에 대한 소비자 인식을 측정하면 성능 엔지니어링이 더욱 소비자 중심적이 됩니다. 모든 정보가 수집되면 적절한 도구와 알고리즘을 통해 정보를 저장하고 분석해야 합니다. 이 데이터에는 오류 로그, 테스트 사례, 테스트 결과, 프로덕션 이벤트, 애플리케이션 로그 파일, 프로젝트 문서, 이벤트 로그, 추적 등이 포함될 수 있습니다. 그런 다음 이를 데이터에 적용하여 다양한 통찰력을 얻을 수 있습니다.
이 기술은 품질에 대한 Shift-Left 접근 방식을 지원하므로 성능 테스트를 수행하는 데 걸리는 시간, 식별할 수 있는 결함 수 및 결과로 발생할 수 있는 결함 수를 예측할 수 있습니다. 이를 통해 성능 테스트에 대한 더 나은 적용 범위를 달성하고 현실적인 사용자 경험을 창출합니다. 사용성, 호환성, 성능 및 보안 문제는 사용자에게 영향을 주지 않고 예방하고 수정할 수 있습니다.
다음은 품질 개선에 도움이 될 수 있는 정보 유형의 몇 가지 예입니다.
이 사실을 알고 나면 변경하고 테스트를 만들어 유사한 문제를 더 빨리 예방할 수 있습니다.
소프트웨어 엔지니어는 프로그래밍이 시작된 이래로 수백 가지 가정을 해왔습니다. 그러나 오늘날의 디지털 사용자는 이를 더 잘 인식하고 있으며 실수와 실패를 덜 관용합니다. 한편, 기업들은 점점 더 테스트하기 어려워지는 맞춤형 서비스와 복잡한 소프트웨어를 통해 더욱 매력적이고 세련된 사용자 경험을 제공하기 위해 경쟁하고 있습니다.
오늘날 모든 것이 원활하게 작동하고 널리 사용되는 모든 브라우저, 모바일 장치 및 앱을 지원해야 합니다. 단 몇 분의 충돌로 인해 수천 달러 또는 수백만 달러의 피해가 발생할 수 있습니다. 문제 발생을 방지하려면 팀은 소프트웨어 수명주기 전반에 걸쳐 관찰 솔루션과 사용자 경험을 통합해야 합니다. 복잡한 시스템의 품질과 성능을 관리하려면 테스트 사례를 실행하고 로드 테스트를 실행하는 것 이상이 필요합니다. 추세는 상황이 통제되고 있는지, 개선되고 있는지, 악화되고 있는지 여부와 속도를 판단하는 데 도움이 될 수 있습니다. 머신러닝 기술은 성능 문제를 예측하여 팀이 올바른 조정을 할 수 있도록 도와줍니다. 마지막으로, 벤자민 프랭클린의 명언으로 결론을 맺겠습니다. "1온스의 예방은 1파운드의 치료와 같습니다."
Zhu Xianzhong, 51CTO 커뮤니티 편집자, 51CTO 전문가 블로그, 강사, 컴퓨터 교사 Weifang 대학이자 프리랜스 프로그래밍 업계의 베테랑입니다.
원제: Performance Engineering Powered by Machine Learning, 작성자:
위 내용은 머신러닝으로 고품질 소프트웨어 엔지니어링 지원의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!