Microsoft Research에서 개발 한 Chess는 가능한 모든 스레드 인터 리에있는 인터 리핑을 체계적으로 탐색하여 멀티 스레드 프로그램에서 동시성 오류를 감지하기위한 강력한 도구입니다. 교착 상태, 활기차 및 데이터 경주와 같은 문제를 효과적으로 식별 할 수있어 동시 소프트웨어를 테스트하는 데 귀중한 자산이됩니다 [1] [3] [4]. 그러나 체스가 MVVMCross와 효과적으로 사용하여 동시성 오류를 감지 할 수 있는지 여부는 여러 요인에 따라 다릅니다.
mvvmcross 개요
MVVMCross는 MVM (Model-View-ViewModel) 패턴을 사용하여 크로스 플랫폼 응용 프로그램을 구축하기위한 프레임 워크입니다. 종속성 주입 및 스레딩 유틸리티를 포함하여 크로스 플랫폼 개발의 복잡성을 관리하기위한 도구 및 인프라를 제공합니다 [2] [5].
mvvmcross와 체스 사용
MVVMCross와 함께 체스를 사용하려면 체스를 테스트 프레임 워크에 통합해야합니다. 몇 가지 단계와 고려 사항은 다음과 같습니다.
1. MVVMCross의 동시성 : MVVMCross 응용 프로그램에는 종종 비동기 데이터로드 또는 백그라운드 작업을 처리 할 때 동시 작업이 포함됩니다. 체스는 이러한 동시 시나리오를 테스트하는 데 도움이 될 수 있습니다.
2. 테스트 설정 : 체스를 사용하려면 MVMCross 테스트를 설정해야합니다. 여기에는 체스가 실행할 수있는 테스트 방법을 생성하는 것이 포함되며, 이는 동시성 버그를 감지하기 위해 스레드 인터리빙을 체계적으로 다양하게 변합니다. 체스의 일정 메커니즘으로 작업하려면 테스트 클래스를 조정해야 할 수도 있습니다.
3. 속성 및 주석 : Chess는`[scheduletestmethod] 및`[dataracetestmethod]`와 같은 속성을 사용하여 동시 테스트를위한 방법을 표시합니다. 이 속성을 MVMCross 테스트 방법에 적용하여 체스의 기능을 활용해야합니다 [1].
4. 통합 문제 : 주요 과제는 체스를 MVMCross 프레임 워크의 기존 테스트 인프라와 통합하는 것입니다. MVVMCross 테스트는 일반적으로 'mvxiocsupportingtest`에서 상속하고 조롱 종속성에 MOQ를 사용합니다 [2]. 체스가 이러한 구성 요소와 완벽하게 작동하도록해야합니다.
5. 재현성 : 체스의 강점 중 하나는 동시성 오류를 재현하는 능력이며, 이는 디버깅에 중요합니다. 체스를 MVVMCross와 성공적으로 통합하면 동시성 문제를보다 효과적으로 재현하고 디버그 할 수 있어야합니다.
결론
체스는 동시성 오류를 감지하기위한 강력한 도구이지만 MVVMCross와의 통합에는 신중한 설정 및 적응이 필요합니다. 체스를 MVMCross 테스트 프레임 워크에 성공적으로 통합 할 수 있다면 크로스 플랫폼 응용 프로그램에서 동시성 문제를 식별하고 디버그하는 효과적인 방법이 될 수 있습니다. 그러나이 통합의 복잡성은 프로젝트 아키텍처 및 테스트 요구 사항의 세부 사항에 따라 다를 수 있습니다.
인용 :[1] https://github.com/leesanderson/chess
[2] https://www.mvvmcross.com/documentation/fundamentals/testing
[3] https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-2007-149.pdf
[4] https://www.microsoft.com/en-us/download/details.aspx?id=52619
[5] https://stackoverflow.com/questions/17602137/mvvmcross-how-does-this-get-get-linked-tothe-viewmodel/17602246
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2008/june/tools-ne-techniques-to-identify-concurrency-issues
[7] https://stackoverflow.com/questions/689671/tool-for-detecting-concurrency-problems
[8] https://stackoverflow.com/questions/22122318/how-can-i-detect-tle-platime-at-runtime-using-mvvmcross
[9] https://courses.cs.washington.edu/courses/cse503/10wi/readings/osdi2008chess.pdf