Press "Enter" to skip to content

Space4u

S/W 개발 관리도구 모음

출처 : http://blog.naver.com/PostView.nhn?blogId=wisestone2007&logNo=221105376720&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true

SW 테스트 지원 도구란?

단순하고 반복적인 테스트 작업을 위해 코드 분석, 테스트 케이스 생성, 테스트 환경 구축 등을 도와 테스트의 효율성을 향상 시키는 도구로써 업무 수행 시 수작업 보다 도구를 사용하여 빠르게 수행 가능하며 테스트 수행 시간을 줄여 감소된 시간을 다른 활동에 활용 할 수 있고, 항상 동일한 테스트가 가능하여 매번 완전하게 결과를 검사 할 수 있는 정확성과 정밀성을 제공 한다. 또한, 시뮬레이션을 이용하여 실제 환경과 비슷한 환경에서 작업을 수행하여 리소스 절감이 가능하고, 테스트 인력과 달리 지속적인 작업 수행이 가능 하도록 지원 하는 도구 이다.

SW 테스트 지원 도구의 종류

도구 유형의미
테스트 관리 도구테스트 관리와 수행된 활동에 대한 전반에 대한 지원 및 관리
결함 추적 관리 도구결함 관리, 결함 추적, 변경 요구 사항 및 작업 할당을 수행
정적 분석 도구SW를 실행 시키지 않고 소스코드에서 실행 시 발생할 수 있는 결함을 관리
성능/부하 테스트 도구가상 사용자를 인위적으로 생성하여 시스템 처리 능력 측정해 주는 도구
형상 관리 도구소스 코드에 대한 Branch 생성, Merge 등의 변경 관리와 다양한 산출물의 버전 및 이력 관리를 할 수 있는 도구
빌드&릴리즈 도구소스 코드를 빌드하여 바이너리를 생성하고 이를 배포해주는 도구
프로젝트 관리 도구요구사항을 충족 시키기 위해 프로젝트 관리 프로세스를 효과적으로 관리
CI 관리 도구자동으로 빌드하여 주기적으로 생산해주는 도구

위에서 도구의 유형별 의미를 확인 해 보았다. 그렇다면 각각의 도구 유형의 기능 및 특성에 대해서 확인하고, 오픈 소스 도구의 종류와 각 특징들을 알아 보자.

SW 테스트 관리 도구란?

테스트 케이스 설계, 테스트 계획 수립, 테스트 케이스 할당, 실행 결과 입력, 리포트 작성 등 테스트 전반을 지원하는 관리 도구로써, 다음 과 같은 활동을 지원 한다.

• 테스트의 관리와 수행된 활동에 대한 지원

• 테스트 실행 도구, 결함 추적 그리고 요구사항 관리도구와의 인터페이스 역할

• 별도의 버전 관리 기능을 가지거나 혹은 다른 형상 관리 툴과의 인터페이스 기능을 가짐

• 테스트, 테스트 결과 그리고 요구사항 명세와 같은 소스 문서에 대한 부가사항에 대한 추적성 지원

• 테스트 결과를 기록하고 진행상황 리포트를 생성

SW 테스트 관리 오픈 소스 도구

TestLinkGanttProjectOpenProjRedmine
라이센스GPL2GPL3CPAL1GPL2
특징• 다양한 언어 지원.
• 다양한 버그 시스템들과 연동 가능.
(Mantis, Trac, Bugzilla)
• 간트 차트, 리소스 차트 지원.
• 작업자 투입율과 연동하여 일정관리 가능.
• 간트 차트, 리소스 차트 지원.
• 작업자 투입율과 연동하여 일정 관리 가능.
• 상용프로그램과 호환 가능.
• 형상관리와 통합.
• 간트 차트와 달력기능 제공.
• 다중 프로젝트 지원
기타http://testlink.orghttp://www.ganttproject.bizhttps://www.openproject.orghttp://www.redmine.org/

결함 추적 관리 도구란?

결함 추적 관리 도구는 테스트 진행 중 발견되는 결함 및 인시던트 리포트 정보를 저장하고 관리하는 도구로써, 다음 과 같은 활동을 지원 한다.

• 보고된 인시던트 리포트 간의 우선순위를 정할 수 있음

• 담당자에게 수정하거나 확인 테스트하라는 등의 임무를 할당할 수 있음

• 결함 수정 거부, 수정되어 테스트할 준비 완료, 수정을 다음 릴리즈로 연기 등으로 결함의 상태를 변경하고 귀속할 수 있음

결함 추적 관리 오픈 소스 도구

MantisBugzillaTrac
라이센스GPLMozilla Public LicenseBSD License
특징• 각각의 작업이나 전체 프로젝트에 대해서 작업 진행 상태를 도식화 가능.
• 프로젝트 변경 이력에 대한 추적/관리 및 유지보수.
• 프로젝트 참여자들의 작업 내용을 추가/보고/관리.
• 버그를 지속적으로 관리/참조 가능.
• 버그의 심각도 와 우선순위 지정 가능.
• 엑셀 변환 가능.
• 웹 상에서 게시판 형태로 되어있어 사용하기 쉬움.
• 티켓 발향으로 구성원간 의사소통.
• 마일스톤과 시간이력을 통해 진행 상태를 시각화 하여 제공.
기타https://www.mantisbt.orghttps://www.bugzilla.orghttps://trac.edgewall.org

정적 분석 도구란?

정적 분석 도구는 개발자, 테스터, 그리고 품질 보증 관련자가 동적 테스팅 전에 결함을 발견하는 것을 돕는 도구로써, 다음 과 같은 활동을 지원 한다.

• 코드로부터, 예를 들어 계획이나 위험 분석에 대한 중요한 정보를 줄 수 있는 특성을 계산

• 코딩 표준의 강제

• 구조와 의존성의 분석 (e.g. 링크된 웹 페이지)

• 코드 이해의 지원

정적 분석 오픈 소스 도구

FindBugsCheckStylePMD
라이센스GNULGPLBSD
특징• Java 언어 지원• Java 언어 지원.
• ANT와 결합 가능.
• Java 언어 지원.
• 다양한 플러그인 제공
• 다양한 오픈 소스와 결합 가능.
기타http://findbugs.sourceforge.net/index.htmlhttp://checkstyle.sourceforge.net/https://pmd.github.io/

성능 부하 테스트 도구란?

성능 부하 테스트 도구는 시스템의 응답시간, 처리량, 속도 등에 대해 테스트 수행을 지원 하는 도구로써, 다음 과 같은 활동을 지원 한다.

• 주로 시스템의 부하와 트랜잭션 측정

• 부하 발생을 통해 다수의 사용자 또는 많은 양의 입력 데이터를 모의 테스트

• 테스트 수행 중에 선정된 트랜잭션으로부터 응답시간을 측정 및 기록

• 일반적으로 응답시간에 대한 부하 테스트 로그와 그래프 기반의 리포트 제공

성능부하 테스트 오픈 소스 도구

JMeterSoapUISelenium
라이센스ApacheLGPLApache
특징• HTTP를 사용하여 사이트의 부하를 테스트.
• 다양한 서버 타입 지원. (HTTP, HTTPS, SOAP, LDAP, JMS 등)
• 완벽한 멀티 쓰레딩 프레임워크를 지원하여 다수의 쓰레드가 동시에 데이터를 추출할 수 있음.
• 기능, 리그레이션, 부하 테스트 가능.
• 다양한 오픈 소수와 결합 가능. (Maven, Hudson, Junit, ANT)
• 다양한 리포트 기능 지원. (PDF, DOC, HTML)
• 다양한 플러그인. (IntelliJ, NetBeans, Eclipse)
• 상용버전인 SoapUI Pro 존재.
• 기록 및 재생.
• 지능형 필드 선택. (ID, 이름, Xpath)
• 디버그 및 중단지점 설정.
• 테스트 저장.
• 웹 브라우저 플러그인 지원.
기타http://jmeter.apache.org/ https://www.soapui.org/ http://www.seleniumhq.org

형상 관리 도구란?

형상 관리 도구는 시스템 형상 요소(개발소스, 산출물 문서 등)의 기능적 특성이나 물리적 특성을 문서화 하고 소스코드나 문서의 버전관리, 이력관리, 추적 등 변경 사항을 체계적으로 관리할 수 있는 기능을 제공하는 도구로써, 다음 과 같은 활동을 지원 한다.

• 이전 리 버전이나 버전에 대한 정보를 언제든지 접근할 수 있어야 함 (이력 정보의 필요성)

• 불필요한 사용자가 소스를 수정할 수 없도록 해야 함 (개발 환경의 보안)

• 동일한 프로젝트에 대해서 여러 개발자가 동시에 개발 할 수 있어야 함 (동시 개발의 예)

• 에러가 발생했을 경우 빠른 시간 내에 FIX할 수 있어야 함(생명 주기의 자동화)

• 사용자의 요구에 따라 적시에 최상의 소프트웨어를 공급 할 수 있어야 함 (적시에 소프트웨어 공급)

형상 관리 오픈 소스 도구

TortoiseSVNGitSubversion (SVN)Mercurial
라이센스GPLGPL2APL2GPL2
특징• Windows Explorer에서 바로 Subversion를 사용하여 버전 컨트롤 가능.
• 특정 파일의 변경 로그 확인 가능.
• Git사용자가 Git 저장소를 보유하고 원격과 동기화.
• 거의 모든 명령을 로컬에서 수행하며, branch의 생성/전환/폐기가 빠름.
• 파일이나 디렉토리를 이동해도 이력 보존.
• CVS에 비해 빠른 속도.
• Gzip압축을 통한 저장 공간 절약.
• 크로스 플랫폼, 서버가 불필요, 분산 버전 관리 시스템.
• 원격 저장소와 작업 디렉토리의 구분이 없음.
기타https://tortoisesvn.net/https://git-scm.com/https://subversion.apache.org/https://www.mercurial-scm.org

빌드&릴리즈 관리 도구란?

빌드&릴리즈 관리 도구는 소스코드를 빌드 하여 바이너리를 생성하고 이를 배포해주는 도구로써, 다음 과 같은 활동을 지원 한다.

• 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정을 말하거나 그에 대한 결과물을 의미

• 소프트웨어의 빌드/릴리즈의 자동화를 도와주는 도구

• 개발 완료된 소프트웨어를 모두 결합하여 고객 또는 테스트 팀에게 전달/인도 하기

• 빌드&릴리즈는 형상 관리 영역의 한 부분

빌드&릴리즈 오픈 소스 도구

AntGradleMaven
라이센스APL2APL2APL2
특징• Build 자동화 (컴파일, Javadoc 생성, 실행, FTP SCP, SFTP 연결, CVS연동, 다른 공학 도구와 연동), 배포, 유닛 테스트(Junit활용, HTML등) 테스트 결과 보고서 작성.• ANT의 유연성과 기능을 Maven의 의존성 관리와 조합하여 보다 효과적인 빌드 자동화 실현.
• Groovy에 기반한 DSL을 통해 모든 종료의 빌드를 선언적 방식으로 처리할 수 있고, 많은 부분 적절한 Default값이 제공되어 편리한 적용 가능.
• 프로젝트에 필요한 라이브러리를 POM 파일 만으로 쉽게 구성 가능.
• Convention over Configuration 개념으로 관례적인 프로젝트 폴더 구조 사용.
• Jenkins 같은 CI 도구와 연계하여 빌드 과정 자동화 가능.
기타http://ant.apache.org/ https://gradle.org/https://maven.apache.org/

프로젝트 관리 도구란?

프로젝트 요구사항을 충족시키기 위해 지식, 기술, 도구, 기법 등을 프로젝트 활동에 적용하는 것으로 이러한 지식을 적용하기 위해서 프로세스를 효과적으로 관리해 주는 도구로써, 다음 과 같은 활동을 지원 한다.

• 잠재적인 비즈니스 또는 프로젝트 관련 위험 및 문제를 방지, 식별 및 최소화 하는 기능 제공

• 사용 가능한 리소스를 확인하고 팀을 구성하고 리소스 참여를 요청 할 수 있는 기능 제공

• 일정 진행 상태를 추적하고 변경내용을 관리 하는 기능 제공

프로젝트 관리 오픈 소스 도구

GanttProjectMylynOpenProjRedmine
라이센스GPLEPLCPAL1GPL2
특징• 상용 프로젝트 관리 도구와는 다르게 간단한 인터페이스로 쉽게 사용.
• 작성한 Gantt Chart를 PERT Chart로 쉽게 전환 가능.
• 프로젝트 관리.
• 버그 및 이슈관리.
• 새 기능 관리.
• 저장소와 통합.
• 복잡한 상용 프로젝트 관리 도구와는 다르게 간단한 인터페이스로 쉽게 사용가능,
• 작성한 Gantt Chart를 PERT Chart로 쉽게 전환.
• 다양한 OS지원.
• 유연한 이슈 및 버그 추적,
• 간트 차트와 달력 기능 제공.
• 다중 프로젝트 지원.
• 형상 관리 소프트웨어와의 통합.
기타http://www.ganttproject.bizhttp://www.eclipse.org/mylyn/https://www.openproject.orghttp://www.redmine.org/

CI 관리 도구란?

CI (Continuous Integration) 지속적인 통합이라는 뜻으로 형상관리 시스템에 있는 Source 파일을 읽어 들여 자동으로 빌드하여 실행할 수 있는 결과물 (exe, jar, apk or war등) 형태로 주기적으로 생산해 주는 도구로써, 다음 과 같은 활동을 지원 한다.

• 프로젝트 관리, 버전관리, 시스템에 연결하여 변경사항 인지, 빌드 스크립트 실행, 실행 결과 확인

• 특정 이벤트 발생 시 빌드 스크립트 실행

• 프로젝트 빌드 후 생성되는 산출물과 연동할 수 있는 기능

• 빌드 스크립트의 실행 결과를 구성원에게 피드백 할 수 있는 기능

CI 관리 오픈 소스 도구

Cruise ControlHudsonJenkins
라이센스BSDEPLMIT License
특징• 다양한 Plug-in 제공, 설치 용이, 사용자 커뮤니티의 활성화.• 쉽고 빠르게 설치가능.
• 웹 기반의 UI로 Client에서는 별도의 SW설치가 필요 없음.
• 동시에 여러 project Build가능 / 팀 단위 통합 Build 기능 제공.
• 쉬운 설치 및 웹 기반으로 된 쉬운 UI 제공.
• 여러 Project 동시 Build 제공.
• 다양한 언어/OS 지원.
기타http://cruisecontrol.sourceforge.net/http://hudson-ci.org/https://jenkins.io/

오픈 소스 위주의 각각의 테스트 지원 도구들을 살펴 보았고, 이러한 오픈 소스의 테스트 지원 도구 도입 시 발생할 수 있는 업무 효율의 장점과 함께 단점들도 발생 할 수 있으며 그 내용은 아래와 같다.

장점으로는

• 오픈 소스 사용 시 비용이 절감되고, 많은 정보들이 인터넷상에 공개 되어 있음

• 프로젝트 상황에 맞는 도구를 도입하여 사용이 가능 함

• 프로그래밍 능력이 있는 경우, 원하는 대로 변형하여 사용이 가능 함

• 더 좋은 제품이 나올 경우 새롭게 도입하는데 부담이 적음

단점으로는

• 초기 환경 구축 및 테스트를 수행 하기 위해 많은 시간, 비용, 노력이 요구 됨

• 문제 발생시 기술지원이 되지 않고, 상황에 따라 추가 버전의 개발이 중단 될 수 있음

• 동일한 기능의 상용 도구 보다 기능 범위가 작을 수 있음

• 오픈 소스 도구로 수행한 결과물이 신뢰성을 인정 받지 못하는 경우가 있을 수 있음

테스트 지원 도구는 반복적인 업무를 자동화 하여 테스트 수행 시간을 줄여 주는 효과와 더불어 효율적으로 테스트를 할 수 있다는 것 이다. 그리고 누가, 언제 테스트 해도 똑같은 결과를 얻을 수 있고 프로젝트에 적합한 도구로 만들어가기 위해서는 지속적인 관리, 내부 교육, 유지보수와 같은 노력과 시간을 들여 프로젝트 전반에 걸쳐 체계적으로 적용 될 수 있도록 도입 이후 관리가 필요하다.

참고 Website

http://www.oss.kr/oss_intro13

https://www.swbank.kr/helper/tool/toolMain.do

https://ko.wikipedia.org/wiki

유용한 정규식

정규식이란?
입력된 데이터의 패턴이 내가 원하는 패턴인지 검증하는데 사용한다.
예를 들어 입력값이 다 숫자로 되어 있는지… 알파벳으로 되어 있는지 등을 검사하는데 사용한다.

정규식 기초

^ : 문자열의 시작
$ : 문자열의 끝
[] : 문자열 셋, []안에서 ^쓰면 NOT을 의미함 
     ex) [ab][a-z][0-9] 라고 입력하면 첫글자는 a또는 b이고 그 다음에 a~z가 나오고 그 뒤에 0~9
       
* : 0번 이상 발생
+ : 1번 이상 발생
? : 0번 또는 1번 발생
{} : 횟수 표시
    [A]{3}이면 AAA이고 [a]{3,}이면 a가 3개 이상, [A]{2, 4}이면 A가 2개 이상, 4개 이하(AA, AAA, AAAA) 이다.
\d : 숫자, [0-9]와 동일
\D : 숫자가 아닌 것들 [^0-9]와 동일
| : OR의 의미
{} : 그룹화 한다.
. : \n 이외 모든 종류의 한 문자
\. : . 문자 
# : 숫자의 부호( + 혹은 - )

정규식 시험 사이트
https://regexr.com/
https://rubular.com/
http://www.regexplanet.com/advanced/java/index.html
https://regexper.com/
http://txt2re.com/index.php3

프로그래밍 하다가 일일이 해볼려면 수명이 단축된다.
이 사이트들에서 한번 해보고 프로그래밍에 적용하자!

정규식 예제

영문/숫자로 시작하고, 3~10자릿수 문자열

^[0-9a-zA-Z]{3,10}$ 

^ : 시작문자
[0-9a-zA-Z] : 숫자와 영문
{3,10} : 3~10자릿수
$ : 끝까지  
16진수 문자열

^[+-]?([a-f0-9]{6})$

^ : 시작문자
# : 부호문자
[+-] : + 혹은 -
? : 0개 혹은 1개. 여기서는 + 혹은 -의 부호문자가 +일 경우 생략될 수 있음.
([a-f0-9]{6}) : 0~9, a~f까지의 문자 6자리
$ : 끝까지
이메일 주소 

^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$ 

^([a-z0-9_\.-]+): 알파벳, 숫자, _, ., - 로 시작하는 1개 이상의 문자(이메일 주소의 ID에 해당함)
@: 골뱅이????
([\da-z\.-]+): 알파벳, 숫자, ., - 로 구성된 1개 이상의 문자(도메인)
\.: 그냥 .(쩜)
([a-z\.]{2,6}): 알파벳. 이 2개 이상 6개 이하인 문자열
$: 끝까지

아... 이건 복잡하다. 그냥 복사해서 쓰자
URL

 ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w_\.-]*)*\/?$ 

이것도 그냥 복사해서 쓰자. 복잡하다.
IP 주소

 ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ 

아놔... 길다. 복잡한건 걍 복사해서 쓰기!!
HTML 태그

 ^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$ 

웹페이지 긁어올때 유용하다.

안드로이드에서 adb shell로 apk 추출하기

설치된 패키지 찾기

adb shell
pm list packages -f | grep "패키지 이름 등등 검색어"

설치된 패키기 찾기(전체 패키지를 페이지단위로 보여주기)

adb shell pm list packages | more

실제로 해보기(볼드체만이 입력 명령임-예제로 카카오톡 apk를 추출해 보겠습니다.)
명령 프롬프트 창에서 작업합니다.

C:\Temp> adb shell
beryllium:/ $ 
beryllium:/ $ pm list packages -f | grep kakao
package:/data/app/com.kakao.talk-wuLPpyq8x_j7b7eUR_6vGg==/base.apk=com.kakao.talk
package:/data/app/com.kakao.taxi-_6AcQILJ-fTin_aO2jbH_Q==/base.apk=com.kakao.taxi
beryllium:/ $ exit
C:\Temp>adb pull /data/app/com.kakao.talk-wuLPpyq8x_j7b7eUR_6vGg==/base.apk
 /data/app/com.kakao.talk-wuLPpyq8x_j7b7eUR_6vGg==/base.apk: 1 file pulled. 36.5 MB/s (96969655 bytes in 2.532s)
C:\Temp>

C:\Temp 폴더에 base.apk 라는 이름으로 카카오톡 apk가 추출되었습니다.

블루투스 Characteristic 조회

{
    List<BluetoothGattService> gattServices = bBluetoothLeService.agetInstance().lmBGatt.getServices();

    if ( gattServices == null )
    {
        return;
    }
    String uuid = null;
    String unknownServiceString = "모르는 서비스";
    String unknownCharaString = "모르는 특성";

    ArrayList<HashMap<String, String>> gattServiceData = new ArrayList<HashMap<String, String>>();
    ArrayList<ArrayList<HashMap<String, String>>> gattCharacteristicData = new ArrayList<ArrayList<HashMap<String, String>>>();
    ArrayList<ArrayList<BluetoothGattCharacteristic>> mGattCharacteristics = new ArrayList<ArrayList<BluetoothGattCharacteristic>>();

    // Loops through available GATT Services.
    for ( BluetoothGattService gattService : gattServices )
    {
        HashMap<String, String> currentServiceData = new HashMap<String, String>();
        uuid = gattService.getUuid().toString();

        gattServiceData.add( currentServiceData );

        ArrayList<HashMap<String, String>> gattCharacteristicGroupData = new ArrayList<HashMap<String, String>>();
        List<BluetoothGattCharacteristic> gattCharacteristics = gattService.getCharacteristics();
        ArrayList<BluetoothGattCharacteristic> charas = new ArrayList<BluetoothGattCharacteristic>();

        // Loops through available Characteristics.
        for ( BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics )
        {
            charas.add( gattCharacteristic );
            HashMap<String, String> currentCharaData = new HashMap<String, String>();
            uuid = gattCharacteristic.getUuid().toString();
            gattCharacteristicGroupData.add( currentCharaData );

            List<BluetoothGattDescriptor> diss = gattCharacteristic.getDescriptors();
            for ( BluetoothGattDescriptor d : diss )
            {

                uuid = d.getUuid().toString();
                uuid = d.getUuid().toString();


            }
        }
        mGattCharacteristics.add( charas );
        gattCharacteristicData.add( gattCharacteristicGroupData );
    }
}

C # GDI + 게이지 컨트롤 사용자 컨트롤

C #의 예 : 무료 그리기 .Net GDI + 게이지 컨트롤 사용자 컨트롤

원문 : http://www.ucancode.net/Visual_C_MFC_Samples/CSharp_Example_Free_DOTNET_Gauge_Control_Draw_Source_Code.htm

자동 번역된 원문 : https://translate.googleusercontent.com/translate_c?depth=1&hl=en&ie=UTF8&prev=_t&rurl=translate.google.com&sl=auto&sp=nmt4&tl=ko&u=http://www.ucancode.net/Visual_C_MFC_Samples/CSharp_Example_Free_DOTNET_Gauge_Control_Draw_Source_Code.htm&xid=17259,15700023,15700043,15700124,15700149,15700186,15700191,15700201,15700214,15700215,15700218&usg=ALkJrhjgwnWG0C7Gdwu9LnRAInCVhzJabg

파일 보관 : 데모프로젝트, 소스

 AquaGauge_dll.zip AquaGauge_src.zip

자동 번역된 원문 갈무리
[그림이 보이지 않으면 원문이 삭제되거나 변경된 것임]

스크린 샷 - AquaGauge.gif
[그림1]


소개

쉽고 강력한 .NET GDI + 를 탐색하기 위해 .NET 사용자 정의 컨트롤 을 개발하기로 결정했습니다. .NET 2.0을 사용하여 개발 된이 간단한 계기 제어 는 모니터링 목적의 전체 범위를 충족시킬 수 있습니다. GDI +를 사용하여 광택 컨트롤을 개발하는 방법을 살펴 보겠습니다.

재정의 된 사용자 정의 컨트롤 메서드

일반적으로 사용자가 완전히 그려진 사용자 정의 컨트롤을 만들면 OnPaint 및 OnPaintBackground 메서드를 재정의해야 합니다. 또한 컨트롤 스타일을 적절하게 설정해야합니다. 이 공통 스타일은 this .SetStyle(ControlStyles.XXXXX, true/false); .

SupportsTransparentBackColor이렇게하면 Gauge 컨트롤 이 true 설정된 경우 투명한 배경색을 지원할 수 true .
ControlStyles.ResizeRedraw컨트롤 크기를 조정할 때 다시 칠할 수 있습니다.
ControlStyles.AllPaintingInWmPainttrue 인 경우 컨트롤 은 깜박임을 줄이기 위해 WM_ERASEBKGND 창 메시지를 무시합니다 . 
이 스타일은 UserPaint 비트가 true 로 설정된 경우에만 적용해야 true .
ControlStyles.UserPainttrue 컨트롤 은 운영 체제가 아니라 자체를 그립니다.
ControlStyles.OptimizedDoubleBuffertrue 경우, 컨트롤은 화면에 직접적으로가 아니라 버퍼에 먼저 그려 지기 때문에 깜박임을 줄일 수 있습니다. 이 속성을 true 설정하면 AllPaintingInWmPaint 도 true 설정해야 true .

OnPaint 및 OnPaintBackground 메서드는 컨트롤을 다시 칠해야 할 때마다 호출됩니다. 예를 들어 컨트롤의 크기를 조정하거나 폼을 최소화하고 최대화하면 OnPaint 메서드가 호출됩니다.

OnPaintBackground 대 OnPaint

OnPaintBackground 는 Window의 배경 (그리하여 모양)을 OnPaintBackground 빠른 속도를 보장합니다. 반대로 OnPaint 는 세부 사항을 칠하고 개별 페인트 요청 을 다시 그려야하는 모든 영역을 포함하는 하나의 Paint 이벤트 로 결합하므로 속도가 느려질 수 있습니다 . 예를 들어 컨트롤에 그라디언트 색상의 배경을 그리려 는 경우 OnPaintBackground 를 호출 할 수 있습니다 .

OnPaintBackground 에는 이벤트와 같은 명명법이 있고 OnPaint 메서드 와 동일한 인수가 사용되지만 OnPaintBackground 는 true 이벤트 메서드 가 아닙니다 . PaintBackground 이벤트 가없고 PaintBackground 가 이벤트 대리자를 호출하지 않습니다. OnPaintBackground 메서드를 재정의 할 때 파생 클래스는 기본 클래스 의 OnPaintBackground 메서드 를 호출 할 필요가 없습니다 .

게이지 다이얼 그리기

먼저 다이얼을 그려 보는 법을 봅시다. 다이얼에는 눈금, 임계 값 표시기, 일부 텍스트 및 현재 값이 표시되어야합니다.

눈금을 그리 려면 원주에서 그려지 는 규칙의 위치를 ​​계산해야합니다. 다이얼에서 90도에서 270도 사이의 각도에서 0부터 10까지의 크기로 그려야 한다고 가정 해 봅시다. 이 경우도 (270-90 = 180)의 차이는 10 부분으로 나누어야합니다. 그려야 할 각 파트의 위치를 ​​찾으려면 다음 수식이 필요합니다.

  x = centerX + radius * cos (180 / partNo)   y = 중심 Y + 반경 * sin (180 / partNo) 

참고 : Math.Cos 또는 Math.Sin 을 사용할 때 각도를 라디안 단위로 지정해야합니다.

서클 수식
[그림2]

위치를 찾은 후 원주에 모든 유형의 눈금 표시를 그릴 수 있습니다. 나는 눈금으로 선을 그리기 로했다. 다이얼 영역은 자주 변경되지OnPaintBackground 재정의 된 OnPaintBackground 메서드 에서 그릴 수 있습니다 .

포인터 그리기

포인터를 자주 다시 칠할 필요가 있습니다. 따라서 OnPaint 메서드 에서 그리는 것이 좋습니다 . 포인터 위치를 찾는 것은 척도 그리기 의 논리와 같습니다. 포인터는 graphicsObj.FillPolygon() 메서드를 사용하여 그릴 수 있으며 현재 값을 나타내는 모든 각도로 변환 할 수 있습니다. 그렇지 않으면 현재 값에 대한 모든 변경 사항에 대해 포인터를 다시 그릴 수 있습니다.

광택을 그리기

광택을 그리는 것은 매우 간단합니다. 모든 다이얼과 포인터를 페인팅 한 후에 그라디언트 색상으로 두 개의 타원을 채우면됩니다.LinearGradientBrush 클래스는 그라디언트 칠을 그릴 수있는 기능을 제공합니다. 다이얼 위로 그라디언트 레이어를 설정하면 아래 그림과 같이 광택이 생깁니다.

광택
[그림3]

Aqua Gauge 컨트롤 사용하기

이 Aqua Gauge 컨트롤 은 Windows에서 제공하는 다른 사용자 컨트롤로 사용할 수 있습니다. 다음은 요구 사항에 맞게이 게이지를 구성하는 데 사용할 수있는 컨트롤 관련 속성입니다.

속성 이름유형기술
DialColorColor게이지의 배경색을 가져 오거나 Set .
DialTextString게이지 다이얼에 표시된 텍스트를 가져 오거나 Set 합니다.
EnableTransparentBackgroundbool투명한 배경색을 사용하거나 사용하지 않도록 설정합니다. 참고 :이 옵션을 사용하면 성능이 저하되고 컨트롤이 깜박일 수 있습니다.
GlossinessfloatGlossiness의 강도를 Get 거나 Set .
MaxValuefloats 또는 Set 게이지 스케일에 표시된 최대 값으로 가져옵니다.
MinValuefloats 또는 Set 게이지 눈금에 표시된 최소값으로 가져옵니다.
NoOfDivisionsint게이지 눈금의 분할 수를 s 또는 Set 으로 지정합니다.
NoOfSubDivisionsints 나 Set 을 각 디비전에 대한 눈금에 표시되는 세분화 수로 가져옵니다.
RecommendedValuefloat눈금에 s 또는 Set 권장 값으로 가져옵니다. 이것은 임계 영역을 그리기위한 피벗 점으로 사용됩니다.
ThresholdPercentfloat눈금에서 임계 값 영역 비율을 가져 오거나 Set .
Valuefloat포인터가 가리킬 값을 가져 오거나 Set 합니다.

가볼만한 곳

우리가 많은 조작으로 이미지를 그릴 때마다 이미지 객체에 그려서 페인트하는 것이 좋습니다. 예를 들어 계기판을 그리려면 CPU를 많이 사용하는 작업이 필요합니다. 따라서 다이얼로그를 이미지 위에 그린 다음 graphicsObj.DrawImage() 사용하여 그릴 수 있습니다. 다이얼 속성을 변경할 때마다 이미지 개체를 다시 만들 수 있습니다. 성능이 향상됩니다.