해부 SQLSERVER 제6 편 오 카 MDF 시스템 테스트 에서 regressions 피하 기

9633 단어 sqlserver
원문:
해부 SQLSERVER 제6 편 오 카 MDF 에 대한 시스템 테스트 에서 regressions 피하 기 (번역)
해부 SQLSERVER 제6 편 Orca MDF 시스템 테스트 에서 regressions 를 피하 기 (번역)
http://improve.dk/avoiding-regressions-in-orcamdf-by-system-testing/
내 가 새로운 기능 과 새로운 데이터 구 조 를 계속 추가 하여 Orca MDF 소프트웨어 에 지원 할 때 bug 의 위험 계속 증가 했다.
특히 내 가 매우 큰 미 지 의 기능 을 개발 할 때 나 는 구조 와 이 구조의 관 계 를 예측 할 수 없다. 위험 을 낮 추기 위해 테스트 는 매우 필요 하 다.
 
유닛 테스트
유닛 테스트 대상 프로 그래 밍 에서 소스 코드 의 특정한 기능 을 테스트 하 는 가장 작은 부분 입 니 다.하나의 테스트 의 예 는 SqlBigInt 데이터 형식 해석 류 입 니 다.
이렇게 생 겼 어야 되 는데.
using System;

using NUnit.Framework;

using OrcaMDF.Core.Engine.SqlTypes;



namespace OrcaMDF.Core.Tests.Engine.SqlTypes

{

    [TestFixture]

    public class SqlBigIntTests

    {

        [Test]

        public void GetValue()

        {

            var type = new SqlBigInt();

            byte[] input;



            input = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F };

            Assert.AreEqual(9223372036854775807, Convert.ToInt64(type.GetValue(input)));



            input = new byte[] { 0x82, 0x5A, 0x03, 0x1B, 0xD5, 0x3E, 0xCD, 0x71 };

            Assert.AreEqual(8200279581513702018, Convert.ToInt64(type.GetValue(input)));



            input = new byte[] { 0x7F, 0xA5, 0xFC, 0xE4, 0x2A, 0xC1, 0x32, 0x8E };

            Assert.AreEqual(-8200279581513702017, Convert.ToInt64(type.GetValue(input)));

        }



        [Test]

        public void Length()

        {

            var type = new SqlBigInt();



            Assert.Throws<ArgumentException>(() => type.GetValue(new byte[9]));

            Assert.Throws<ArgumentException>(() => type.GetValue(new byte[7]));

        }

    }

}

이 테스트 는 SqlBigInt 류 의 주 입구 점, 테스트 long 을 포함 합 니 다. bigint 데이터 형식 이 넘 치 거나 넘 치 는 상황 을 초래 할 수 있 는 지, 길이 검사 도 포함 되 어 있 습 니 다.
SqlBigInt 처럼 간단 한 유형 단위 테스트 는 잘 작 동 합 니 다.가끔 은 단원 테스트 가 복잡 할 때 가 있다. 관련 된 유형 은 해당 하 는 방법, 유형 등 그 가 운행 하 는 바 텀 구 조 를 지원 해 야 할 때 mock 테스트
비록 이것 은 업무 전략 이지 만 테스트 는 계속 진행 해 야 한다. 특히 프로젝트 초기 단계 에 전체 구 조 는 동태 적 인 것 이다.
 
시스템 테스트
테스트 범위 에서 우 리 는 더욱 큰 범위 의 테스트 - 시스템 테스트 가 필요 하 다.시스템 테스트 는 시스템 이 하나의 전체 로 서 시스템 내부 작업 원 리 를 기본적으로 무시 하 는 데 목적 을 둔다.
분류 하려 면 블랙 박스 테스트 로 나 눌 수 있 습 니 다.Orca MDF 에 대해 서 는 90% 의 모든 regressions 를 잡 을 수 있 을 것 으로 예상 합 니 다. 10% 의 시간 만 사용,
유닛 테스트 보다 더 많은 시간 을 사용 하여 소량의 regressions 만 캡 처 합 니 다.
따라서 이것 은 개발 기간 의 테스트 를 통 해 관건 적 인 단원 테스트 와 통합 테스트 를 도입 할 수 있 는 좋 은 방법 이다.
예 를 들 어 DatabaseMetaData 류 의 사용자 표 이름 에 대한 분석 을 테스트 하고 싶 습 니 다. SysObjects 의 값 목록 을 모 의 할 수 있 고 DatabaseMetaData 류 에 대해 서도 모 의 할 수 있 습 니 다.
의 구조 함수 도 MdfFile 에 필요 한 인 자 를 모 의 할 수 있 습 니 다. 이 를 위해 저 는 MdfFile 에서 인 터 페 이 스 를 추출 하고 위 에서 mocking framework 를 사용 해 야 합 니 다.
 
시스템 테스트 방법 은 다음 절 차 를 수행 합 니 다.
1. SQLSERVER 인 스 턴 스 연결
2. 테스트 펌웨어 (Test fixture) 에서 테스트 구 조 를 구축한다.
3. 데이터베이스 분리
4. Orca MDF 를 실행 하고 분 리 된 데이터베이스 검증 결 과 를 불 러 옵 니 다.
 
두 개의 사용자 표를 만 들 고 DatabaseMetaData 류 의 출력 을 검증 하 는 테스트 샘플
using System.Data.SqlClient;

using NUnit.Framework;

using OrcaMDF.Core.Engine;



namespace OrcaMDF.Core.Tests.Integration

{

    public class ParseUserTableNames : SqlServerSystemTest

    {

        [Test]

        public void ParseTableNames()

        {

            using(var mdf = new MdfFile(MdfPath))

            {

                var metaData = mdf.GetMetaData();



                Assert.AreEqual(2, metaData.UserTableNames.Length);

                Assert.AreEqual("MyTable", metaData.UserTableNames[0]);

                Assert.AreEqual("XYZ", metaData.UserTableNames[1]);

            }

        }



        protected override void RunSetupQueries(SqlConnection conn)

        {

            var cmd = new SqlCommand(@"

                CREATE TABLE MyTable (ID int);

                CREATE TABLE XYZ (ID int);", conn);

            cmd.ExecuteNonQuery();

        }

    }

}

 
실제 실제 생활 장면 에서 이렇게 하면 매우 빠르게 테스트 할 수 있다.전송 기록 의 해석 을 테스트 하고 싶 습 니까?대상 데이터베이스 상 태 를 만 들 고 스 캔 한 표 데 이 터 를 검증 하기 위해 새로운 테스트 를 만 들 고 TSQL 코드 를 작성 해 야 합 니 다.
 
시스템 테스트 의 단점
불 행 히 도 시스템 테스트 는 만능 약이 아니 라 단점 도 있다.가장 뚜렷 한 단점 은 성능 이다.
유닛 테스트 는 보통 매우 빨리 실행 되 어야 합 니 다. 기본적으로 모든 파일 을 저장 한 후에 배경 에서 실행 할 수 있 습 니 다.연 결 된 CPU 부터 실행 까지 모든 시스템 테스트 는 30 분 이 걸 립 니 다.
다행히 병행 운행 에는 문제 가 없다.4 핵 기계 에서 나 는 분당 480 개의 테스트 를 실행 할 수 있다.이것 은 완전한 테스트 집합 을 합 리 적 인 시간 에 제어 할 수 있다.
동시에 테스트 부분 집합 을 유지 하면 빠르게 실행 할 수 있 습 니 다.일반적인 코드 변경 은 테스트 에 많은 영향 을 미 치지 않 습 니 다.
 
제6 편 끝

좋은 웹페이지 즐겨찾기