2017년 4월 3일 월요일

Software Test?


흠.. 소프트웨어 테스팅! 들어보신 적 있으신가요?
저는 다행이도 학과 수업을 통해 처음 접했습니다.
교수님이 테스팅에 관심이 많으시거든요!
덕분에 그런게 있고, 또한 중요하다는 걸 인식할 수 있었습니다.
그 외에도 학교에서도 최근 "테스팅"에 관심이 많더군요.

아무래도.. 차츰 들어가는 비용이 전체 예산의 많은 부분을 차지하면서 그렇게 된 것 같다는 생각이 듭니다. 공학은 경제적, 효율적이여야하니!















































동의대학교 IT융합부품연구소에서 강의가 진행이 되었는데,
이번 강의를 진행하신 강사분은 Ph.D Stuart Reid이신데 간단히 조선신문의 말을 빌리자면,
"국제 SW 테스팅 자격시험 단체인 ISTQB(International Software Testing Qualifications Board) 초대 회장과 ISO/IEC/IEEE 29119 표준 위원으로 활동하기도 했다. ISO/IEC/IEEE 29119는 SW 테스팅 관련 국제 표준의 하나로, 리드 CTO가 제정을 주도한 바 있다."
라는 분입니다. SW 테스팅 컨설트 전문가입니다.

먼저 크게는 4차 혁명시대의 SW Engineering / Testing without Testing(테스팅 없이 테스팅하는 방법) 으로 나뉘어서 진행되었으며 전체 강의는 영어로 진행되었고 3-40분 간격으로 영어를 알아듣기 힘드신 분들을 위해서 한국분께서 진행된 내용에 대해 간략히 요약하여 다시 설명해주고 다시 강의하는 형식으로 진행되었습니다.
대부분이 회사에서 근무하시는 분들이 참석을 많이하셨고 16:30까지 강의가 진행되어 Q&A시간은 생략되어버렸어요..

<4차 혁명시대>
4Generation technology
IoT, 3D print, AI, Bigdata.. 多

Robot :
china? Biggest market in a world, the main company is "Foxconn"
korea? Not bad, Except Car. automatic part is valuable in Korea.
-----------------------------------------------------------------------------------------------------------------------
As times go by, the maintained jobs will be disappeared. but instead, the new jobs will come.
: In 20 years, In England, 800,000 jobs gonna disappear and















The most dangerous in the jobs is the middle part of the graph above.
중간층에 위치하는 직업은 주로 반복적인 작업이여서 이부분의 직업군이 대거 로봇으로 대체되게 될 것으로 보인다.

꽤 인상깊었던 것은, ppt로 미래에 사라질 직업군을 간단히 보여주는데
 우리나라에서 하는 조사와 어른들이 하는 말은 교사가 제일 먼저 사라질 직업이라는 말을 듣고 자랐기 때문에 computer programmer 48%가 대체되는 것에 비해 HighSchool Teacher의 대체 비율은 1%정도인 것이 놀라웠다. 덧붙인 설명으로는 우리들의 아이들을 로봇에게 가르치게 하고 싶지않을거다. 아이들을 인간적으로 키우고 싶다면 사람인 선생님에게 맡길거라는 말이 인상깊었다.

직업군을 살펴보았을 때 creative한 직군일 수록 사라지기 힘들다는 사실을 알 수 있다.

-----------------------------------------------------------------------------------------------------------------------

최근의 %로 볼 때, 전체 비용의 35%정도가 Testing비용으로 쓰인다. 이 35%는 앞으로 더 늘어날 가능성이 농후하다.
따라서, 충분하지 x 테스팅& 많은 비용을 이용해 테스팅을 진행하고 있다는 것이다.

전체적인 테스팅을 볼 때,

Test 
Automation
(45%)
Manual 
Test
(55%)

여기서 Manual은 Manual대로 해야하지만, Automation은 대안을 찾아볼 수 있다. 그렇다면 대안에는 어떤 것들이 있을까?

테스팅 종류들은 다음과 같다.
그리고 괄호안의 수는 표준적으로 이루어지면되는 %를 표현해 놓은것이다.
대부분이 표준과 비슷하게 실행되고 있지만, 유난히 테스팅에 있어서 많이 놓치는 부분이 BVA이다. 이것은 Boundary Value Advanced로 0.75수준으로 굉장히 많은 비용과 노력이 쏟아지고 있지만 표준정도의 비용과 노력으로 잡을 수 있다는 사실이다.
  • Statement (0.12) : Complex Testing↑
  • Branch(0.15)
  • BranchCondition(0.14)
  • MCDC(0.16)
  • BranchConditionCombination(0.16)
  • EP(0.16)
  • BVA(0.20) : Boundary Value Advanced (0.75)
-----------------------------------------------------------------------------------------------------------------------
그렇다면, 테스팅(팀)없이 테스트를 할 수 있는 방법은 없을까?(Testing without Test design)
  • Random Test : 1) Fuzz testing 2)Monkey testing
  • Crowd Test | A/B Test
  • Artificial Test
갑자기 테스팅없이 테스트를 소개하는 이유는 BVA부분을 제외한 나머지 부분은 Random Testing을 통해서 대부분의 테스팅결과를 잡을 수 있기 때문에 소개한다.
따라서, Random Testing이 가치가 있는 것이다.

-----------------------------------------------------------------------------------------------------------------------
테스팅을 하기 위해선 여러가지 방법이 쓰일 수 있지만, 그에 앞서 정보를 수집할 때 일어나는 위험성에 대해 알아보자.

위와 같이 간단히 나타낼수 있다. 
Raw Data는 무작위로 얻을 수 있다. 예시로는 Airliner, CCTV, Drone, Mobile등이 있다.

그리고 Data Collector가 위에서 가장 중요하다. 바로 사람들의 Privacy 문제와 직결되기 때문이다.(Valuable info)

따라서 위와 같은 과정이 필요하다. Random Data에서도 valid/invalid로 나뉘어서 한 번 거르고 Data Collector를 거친 이후에도 Verify Checking을 통해서 개인의 정보가 포함될 만한 것을 거른다음 접근권한과 전문가에 의해 한 번 더 걸러진 이후의 데이터를 Big Data에서 활용할 수 있게 하는것이다. 전문가가 들어가는 이유는 빅데이터라도 어디에 쓸 빅데이터인지에 따라 필요한 정보다 다르기 때문에 그에 맞는 전문가가 "필요한정보를" 걸러내는 일이다. 불필요한 정보까지 포함하면서 Privacy문제를 높일 필요가 없는 것이다.

-----------------------------------------------------------------------------------------------------------------------

자, 먼저 Crowd Testing을 살펴보자.
이 테스팅의 특징은 세가지가 있다.

  • X need Sketch personality of users
  • Diff environ, Diff device / Diff setting-up : expensive expense
  • Keep Secret
전 세계적으로 핸드폰의 기종은 24,000여 종. 그리고 가장 많이 쓰이는 기종은 전 세계적으로 30기종. 하지만 시장은 빠르게 바뀌고, 그 30기종을 모두 테스팅하는 것도 실질적으로 말이 안된다. 시간이 시장이 바뀌는거와 비교했을 때 따라가기 힘들다. 비용또한.
따라서, 클라우드 테스팅을 통해서 테스팅이 진행될 수 있다.
  1. 사용자의 특성을 생각하지 않아도 된다. : 사람마다 이렇게 쓸 수도 저렇게 쓸 수도 있다는 가정을하고 테스팅을 하지 않아도 된다. 직접 많은 다양한 사람들이 써 볼 것이기 때문에.
  2. 다른 환경, 다른 기종, 다른 환경세팅을 갖추고 테스팅을 진행하는 것은 회사에서 단독 진행시 많은 비용이 든다. 이 부담을 다양한 실제 사용자들이 사용하면서 테스팅을 한다면 훨씬 줄어들게 된다. 여기에서는 다른 나라에서의 테스팅은 특히 어려운데 이것을 Crowd Testing을 통해 해결한다면 보다 적은 비용으로 테스팅이 가능해진다.
  3. 계약을 통한 관계로, 비밀을 발설할 시 불이익을 당할 것이기 때문에 사용자들이 발설하지 않을 것이다.

위와 같이 클라이언트의 App에 대한 테스팅 필요성이 필요할 시 요청되고, 지불되는 비요의 4/5를 클라우드 테스터들에게 쓰이게 되고, 1/5정도를 클라우드 테스터들이 테스트를 할 수 있는 환경, 서비스를 제공하는데에 쓰이게 된다. 
그리고 많은 기종과 다양한 환경의 테스팅을 완료하고 중간 서비스 제공회사측에서 그에 알맞는 테스팅 결과 레포트를 작성하여 전달하게 된다.
-----------------------------------------------------------------------------------------------------------------------
다음으로, A/B Testing은 주로 활용도, 선호도 판단시에 많이 이용이 된다.
현재, 네이버(naver)의 홈페이지가 모양새가 바뀌게 되었는데 그에 따라서 사용자들의 편의나 이용정도가 늘어났는지를 테스트 하는 느낌정도로 생각할 수 있다.
따라서 테스터들이 본인들이 테스팅을 하고 있는지 인지 못하는 경우가 많다고 한다.

-----------------------------------------------------------------------------------------------------------------------

마지막으로, Artificial Test. 인공지능을 이용한 테스팅인데 Directly Test가 가능하다.
주로 사람이 어떻게 문제를 해결할까?를 바탕으로 두고 만들어내는 알고리즘으로 작동하게 되는데 사람은 문제들을 풀기위해 여러 방법을 사용한다고 한다. 따라서 다양하게 이용하면 좀 더 사람에 가까운 해결능력을 가진 로봇을 찾아낼 수 있지 않을까 싶다.

AI toolkits를 알아보자.
  1. Google TensorFlow
  2. Torch
  3. Caffe
  4. IBM Watson : solve tiny problems. x free for company.
  5. CNTK
등이 있다. 각자의 사용법과 장단점은 직접 이용하면서 찾아보자.

기계의 장점은 사람이 놓치고 넘어갈 수 있는 부분까지 잡아줄 수 있다는 것이다. 이런 기계가 사람이 "$$%^^&&*(*%#$@%^But$%%&(*((*&^%$%&("를 알아 들을 수 있게 된다면? But을 기준으로 앞문장과 뒷문장이 다르다는 것을 알고 저런 문장이 많고 미사여구가 더 길어진다면 사람으로써는 놓칠 수 있는 부분이 생기게 된다.


다음 그래프를 보면, 우리가 고려해야 할 두 가지 조건이 있다. Module Size, Revision.
위와 같은 경우는 선을 그어 어떻게 테스팅해야하고, 어디에서 많이 버그가 나올지 대충 예상을 할 수 있다. 하지만 우리가 고려해야 할 조건이 한 두가지가 아닐 것이다. 속성이 다양할 수록 분석을 더 많이, 더 어려워진다.

[Static Analysis, 정적 분석] :
간단하게 이야기하고 넘어간다. 대표적인 예로는 Facebook의 Infer가 있다.
A tool to detect bugs in JAVA, C, C++, Obj-C, Android etc.

(참조 : http://fbinfer.com/)

위와 같이, 작성하고 infer -- javac javafile을 실행하면 분석을 시작하고 issue가 발생하면 알려주는 방식으로 진행된다.

[Regression Testing, 회귀 테스팅]
간단히 말하면 갈 수록 커지는 테스팅이다. A, A-B, A-B-C, ..이런식으로 진행되기 때문!
범위(Coverage): Branch/ Risk/ Defect-O => Optimize, Order the steps

tip, 만약 잘 모르겠다 싶으면 full regression을 추천하신다고 하심.

그냥 테스팅 결과가 실제결론에 들어가는 것으로는 테스팅이 충분하지 않음으로 위와 같이 바뀐 정보를 피드백으로 다시 넣어주어 새로운 결과를 뽑아내는 형식으로 진행된다.

위에서 Why Artificial Testing?에 대해 알아보았다면, Why they are not use?
  • Tester rely on the tool : little or no black box testing.
즉, 소스코드를 감춘상태에서 테스팅을 진행할 수 없게된다. 테스팅을 위해 반드시 소스를 기계에게 공개하게 되는 상황이 발생하고 이는, 정보의 위험에 이르게 되므로 무조건 좋다고 볼수도 없다.

-----------------------------------------------------------------------------------------------------------------------
마지막으로 Android Stress Testing Tools를 간단히 보고 마치도록하자.
  • Google : Cool Monkey BUT 많은 단계를 거침. (many steps)
  • Sapienz : Unique Crashes High Coverage.
  • Dynodroid
(강의에서 분석 그래프를 살펴보았을 때,) find bugs 가 가능하다.

댓글 없음:

댓글 쓰기