2011-03-19 10 views
11

저는 소프트웨어 엔지니어로서 펌웨어 테스트 엔지니어로 고용 될지도 모릅니다. 난 그냥 펌웨어를 테스트하는 데 사용되는 시장에서 사용할 수있는 몇 가지 소프트웨어 도구에 대한 아이디어를 얻고 싶습니다. 펌웨어를 제공하고 펌웨어에 제공하는 테스트 유형에 대해 설명 할 수 있습니까? 미리 감사드립니다. 여기오늘 펌웨어를 테스트 할 때 사용할 수있는 소프트웨어 도구는 무엇입니까?

+1

[jtag] (http://en.wikipedia.org/wiki/Joint_Test_Action_Group) 디버깅에 익숙해야하는 임베디드 스타일 작업에 대한 많은 채용 정보를 볼 수 있습니다. – sarnold

+4

@sarnold : JTAG 자체는 "테스트 도구"가 아닙니다. 개발 호스트 디버거와 온칩 디버그 하드웨어를 통합하는 프로세서 간의 물리적 연결 및 통신을 의미하며 고비용의 외부 인서 킷 에뮬레이터 하드웨어 또는 덜 강력한 소프트웨어 기반 원격 디버그 모니터의 필요성을 피할 수 있습니다. 특정 작업 요구 사항으로 그것을 집어 넣는 사람은 그것이 무엇인지 정확하게 알지 못하고 실제로 하드웨어 디버거/ICE 경험을 원합니다. 어느 쪽이든 나는 그것이 그 문제와 관련이 있다고 생각하지 않는다. – Clifford

답변

12

테스트는 여러 가지 형태로 제공되며 여러 단계에서 수행 할 수 있습니다. 코드가 작성되기 전에 설계 검증과 별도로 코드 테스트는 단위 테스트, 통합 테스트, 시스템 테스트 및 수락 테스트로 나눌 수 있습니다 (단, 정확한 용어 및 단계는 매우 다를 수 있음). V 모델에서 이들은 요구 사항과 설계 개발 단계에 수평 적으로 대응할 것입니다. 또한 개발 및 유지 관리에서 회귀 테스트를 수행하여 다른 변경 사항이 적용될 때 수정 된 버그가 수정되지 않도록 할 수 있습니다.

도구에 관한 한 정적 분석과 동적 분석으로 구분할 수 있습니다. 정적 도구는 실행없이 소스 코드를 분석하지만 동적 분석은 실행 중 코드의 동작과 관련이 있습니다. 일부 (값 비싼) 도구는 실제 실행없이 코드 실행이 실패하는 방식을 결정하는 정적 분석 기술인 "추상 실행"을 수행합니다.이 방법은 계산 비용이 많이 들지만 기존의 동적 분석보다 훨씬 더 많은 실행 경로와 변수 상태를 처리 할 수 ​​있습니다.

정적 분석의 가장 간단한 형태는 코드 검토입니다. 인간이 당신의 코드를 읽게합니다. SmartBear's Code Collaborator과 같이이 표면적 인 수동 프로세스를 지원하는 도구가 있습니다. 마찬가지로 가장 간단한 동적 분석 방법은 디버거에서 코드를 단계별로 실행하거나 다양한 테스트 시나리오로 코드를 실행하는 것입니다. 첫 번째는 단위 개발 및 디버깅 중에 프로그래머가 수행 할 수 있지만 후자는 수락 또는 통합 테스트에 더 적합합니다.

코드 검토를 잘 수행하면 많은 양의 오류, 특히 설계 오류가 제거 될 수 있지만 프로그래밍 언어의 미묘하거나 모호한 의미로 인해 발생하는 특정 유형의 오류를 찾는 것은 그리 효율적이지 않습니다. 이러한 종류의 오류는 Gimpel's PC-Lint and FlexeLint tools 또는 Programming Research's QA tools과 같은 정적 분석 도구를 사용하는 자동 감지에 적합하지만 컴파일러의 경고 수준을 높게 설정하거나 둘 이상의 컴파일러로 컴파일하는 것과 같은 비용이 적게 드는 방법도 유용합니다.

동적 분석 도구는 코드 범위 분석, 코드 성능 프로파일 링, 메모리 관리 분석 및 경계 검사와 같은 여러 가지 형식으로 제공됩니다.

높은 엔드 도구/공급 업체 Coverity, PolySpace (추상적 인 분석 도구), Cantata, LDRAKlocwork의 좋아하는을 포함한다. 하단 (가격, 반드시 효과) 나는 스트레스 테스트가 유용하다고 같은 PC - 린트와 Tessy, 심지어 오픈 소스 splint (C에만 해당) 및 unit testing tools

+1

매우 비싼 정적 분석기는 가격의 10 분의 1을 지불하는 것보다 낫지 않다는 것을 강조하는 것이 중요합니다. LDRA를 사용하고 있으며 비용이 많이 들지만 다른 도구보다 성능이 뛰어납니다. 차이점은 LDRA는 극도로 방아쇠를 당겼으며 많은 수표가 제거 되더라도 모든 실제 문제에 대해 약 100 개의 잘못된 오류를 제공한다는 것입니다. 코드에 여러 가지 결함이 있으므로 여러 분석기로 코드를 확인하는 것이 좋습니다. – Lundin

+0

@ Lundin : 물론입니다. 아마도 강조하지 않고 언급 했었습니다. @Lemual은 사용 가능한 도구에 대해 알고 싶었는데, 그가 만날 수있는 것을 알고 싶어한다고 가정합니다. 그녀가 그러한 도구를 선택하도록 임무를 준 경우 다른 종류의 대답이 필요합니다. – Clifford

8

내가 유용하다고 한 일부 펌웨어 테스트 기술 ... PC에서

  1. 단위 테스트는; 즉, 펌웨어로부터 함수를 추출하고, 더 빠른 플랫폼에서 컴파일 및 테스트한다. 이것은 예를 들어 함수를 철저히 테스트 할 수있게 해주는 반면, 이는 시간이 많이 걸리는 현장에서 시간을 소비하게됩니다.

  2. 자유 실행 하드웨어 타이머를 사용하여 펌웨어 인터럽트 핸들러에 입력 및 종료시 틱 및 인터럽트 수를 계측하십시오. 각 인터럽트 처리기의 최소 및 최대 빈도와 기간을 추적하십시오. 이 데이터를 사용하여 Rate Monotonic Analysis 또는 Deadline Monotonic Analysis를 수행 할 수 있습니다.

  3. Modbus RTU와 같은 표준 프로토콜을 사용하여 필요에 따라 상태 데이터 배열을 사용할 수 있습니다. 이것은 구성 및 검증 데이터에 사용될 수 있습니다.

  4. 자동 빌드 프로세스 (예 : 소스 코드 저장소에서 버전 정보 가져 오기)를 사용하여 펌웨어 버전 번호를 코드에 빌드하십시오. # 3을 사용하여 버전 번호를 사용 가능하게 만드십시오.

  5. lint 또는 다른 정적 분석 도구를 사용하십시오. lint와 -Wall을 사용하는 컴파일러의 경고를 요구하십시오.

  6. 펌웨어의 CRC를 코드에 삽입하고 런타임에 확인하는 방법으로 빌드 도구를 보강하십시오.

0

많은 수의 등의 도구 . 이것은 대개 짧은 시간에 시스템에 많은 입력을 제공하고 처리 방법을 확인하는 것을 의미합니다. 입력은

  • 처리 할 데이터가 많은 파일 일 수 있습니다. 예를 들어 경보 장치로 분석해야하는 웨이브 데이터 파일이 있습니다.
  • 다른 컴퓨터에서 실행중인 응용 프로그램에서 데이터를 받았습니다. 예를 들어 임의의 터치 스크린을 생성하는 프로그램은 데이터를 눌렀다가 놓아 디버그 포트의 장치로 보냅니다.

이러한 유형의 테스트는 (특히 성능이 중요하고 제한적인 시스템에서) 많은 버그를 떨쳐 버릴 수 있습니다. 좋은 로깅 시스템은 스트레스 테스트에 의해 제기 된 오류의 원인을 추적해야하는 것도 좋습니다.

관련 문제