Ubuntu에 react Test 자동화를 해보자!

환경

VirtualBox

ubuntu-18.04.1-desktop-amd64.iso

karam & jasmin


Ubuntu 설치

Kernel driver not installed (rc=-1908)

Make sure the kernel module has been loaded successfully.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.


VM 실행 시에 다음과 같은 Error가 발생할 수 있다. 그럴 땐 시스템 환경설정 >  보안 및 개인정보 보호에 진입해서 Oracle 앱 허용을 해줘야 한다.


karam.conf.js

// Karma configuration
// Generated on Fri Nov 23 2018 12:15:54 GMT+0900 (KST)
var path = require('path')

module.exports = function(config) {
  config.set({
    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',


    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['browserify','jasmine'],


    // list of files / patterns to load in the browser
    files: [
      '*.js'
    ],


    // list of files / patterns to exclude
    exclude: [
    ],


    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
            '*.js': ['browserify']
    },


    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],


    // web server port
    port: 9876,


    // enable / disable colors in the output (reporters and logs)
    colors: true,


    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,


    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['PhantomJS'],


    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity
  })
}
                                                               

package.json

{ "name": "react", "version": "0.1.4", "description": "Mobile Web", "main": "index.js", "engines": { "node": ">=5.0.0", "npm": "^3.0.0" }, "scripts": { "clean": "rimraf dist", "compile": "node webpack/scripts/compile", "build": "npm run clean && cross-env NODE_ENV=production npm run compile", "start": "cross-env NODE_ENV=development node webpack/scripts/start", "test": "cross-env NODE_ENV=test jest --config=./jest-config.json --no-cache", "test:watch": "npm test -- --watch", "lint": "eslint .", "lint:fix": "npm run lint -- --fix", "precommit": "lint-staged", "prepush": "npm test" }, "lint-staged": { "*.js": "eslint" }, "repository": { "type": "git", "url": "git+https://github.com/project.git" }, "author": "joe", "license": "UNLICENSED", "private": true, "dependencies": { "airbnb-js-shims": "^1.3.0", "animated-scroll-to": "^1.1.6", "bowser": "^1.7.1", "briz-react-swipe": "^5.0.12", "browserify": "^16.2.3", "classnames": "^2.2.5", "compression": "^1.6.2", "copy-to-clipboard": "^3.0.7", "express": "^4.14.0", "js-cookie": "^2.1.4", "lodash.isempty": "^4.4.0", "moment": "^2.18.1", "normalize.css": "^7.0.0", "object-assign": "^4.1.1", "promise": "^7.1.1", "prop-types": "^15.6.0", "qs": "^6.4.0", "raf": "^3.3.2", "react": "^16.0.0", "react-addons-shallow-compare": ">=0.14", "react-async-script-loader": "^0.3.0", "react-dates": "^12.6.0", "react-dom": "^16.0.0", "react-ga": "^2.2.0", "react-google-maps": "next", "react-infinite-scroller": "^1.0.12", "react-lazyload": "^2.2.7", "react-number-format": "^1.2.1", "react-redux": "^5.0.4", "react-router": "^3.2.0", "react-transition-group": "^1.1.3", "redbox-react": "^1.3.6", "redux": "^3.7.2", "redux-thunk": "^2.2.0", "spin.js": "^2.3.2", "sweetalert2": "^6.6.5", "whatwg-fetch": "^2.0.3" }, "devDependencies": { "babel-core": "^6.24.1", "babel-eslint": "^7.2.3", "babel-jest": "^20.0.3", "babel-loader": "^7.0.0", "babel-plugin-dynamic-import-node": "^1.0.2", "babel-plugin-syntax-dynamic-import": "^6.18.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-object-rest-spread": "^6.23.0", "babel-plugin-transform-runtime": "^6.15.0", "babel-preset-env": "^1.4.0", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "babel-preset-stage-2": "^6.24.1", "babel-runtime": "^6.20.0", "browserify": "^16.2.3", "chalk": "^1.1.3", "codecov": "^2.2.0", "connect-history-api-fallback": "^1.3.0", "cross-env": "^5.0.0", "css-loader": "^0.28.1", "enzyme": "^2.8.2", "eslint": "^4.1.1", "eslint-config-standard": "^10.2.1", "eslint-config-standard-react": "^5.0.0", "eslint-plugin-babel": "^4.1.1", "eslint-plugin-import": "^2.2.0", "eslint-plugin-jest": "^20.0.3", "eslint-plugin-node": "^4.2.2", "eslint-plugin-promise": "^3.5.0", "eslint-plugin-react": "^7.1.0", "eslint-plugin-standard": "^3.0.1", "extract-text-webpack-plugin": "^2.1.0", "figures": "^2.0.0", "file-loader": "^0.11.1", "fs-extra": "^3.0.1", "html-webpack-plugin": "^2.24.1", "husky": "^0.13.3", "jasmine-core": "~2.4.1", "jest": "^20.0.4", "karma": "^3.1.1", "karma-browserify": "^5.3.0", "karma-chrome-launcher": "1.x || ~0.2.2", "karma-firefox-launcher": "1.x || ~0.1.7", "karma-jasmine": "1.x || ~0.3.7", "karma-junit-reporter": "~0.0.2", "karma-phantomjs-launcher": "^1.0.4", "lint-staged": "^3.4.2", "load-grunt-tasks": "^3.4.1", "node-sass": "^4.5.3", "react": "^16.6.3", "react-test-renderer": "^16.0.0", "regenerator-runtime": "^0.10.5", "rimraf": "^2.6.1", "sass-loader": "^6.0.5", "style-loader": "^0.17.0", "url-loader": "^0.5.8", "watchify": "^3.11.0", "webpack": "^2.5.1", "webpack-dev-middleware": "^1.8.4", "webpack-hot-middleware": "^2.13.2", "yargs": "^8.0.1" }, "jest": { "modulePaths": [ "<rootDir>/src" ], "moduleDirectories": [ "node_modules", "src" ], "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js", "\\.(css|less|scss)$": "<rootDir>/__mocks__/styleMock.js" }, "moduleFileExtensions": [ "js", "jsx" ], "testRegex": "(/tests/.*|(\\.|/)(test|spec))\\.jsx?$", "globals": { "__DEV__": false, "__TEST__": true, "__PROD__": false }, "coverageDirectory": "./coverage/", "collectCoverage": true }, "resolutions": { "react-native/metro-bundler": "0.19.0" }, "node": { "global": "window", "process": true, "crypto": "empty", "module": false, "clearImmediate": false, "setImmediate": false } }

깔끔하게 library 설치 방법

rm -rf node_modules/
npm cache clean
npm install

실행

karma start karma.conf.js --browsers PhantomJS --single-run --log-level debug

Output

26 11 2018 14:48:48.212:DEBUG [config]: Loading config /home/joe/karma/mobile-web-react/karma.conf.js
26 11 2018 14:48:48.216:DEBUG [config]: autoWatch set to false, because of singleRun
26 11 2018 14:48:48.217:DEBUG [karma-server]: Final config {
  "LOG_DISABLE": "OFF",
  "LOG_ERROR": "ERROR",
  "LOG_WARN": "WARN",
  "LOG_INFO": "INFO",
  "LOG_DEBUG": "DEBUG",
  "frameworks": [
    "browserify",
    "jasmine"
  ],
  "protocol": "http:",
  "port": 9876,
  "listenAddress": "0.0.0.0",
  "hostname": "localhost",
  "httpsServerConfig": {},
  "basePath": "/home/joe/karma/mobile-web-react",
  "files": [
    {
      "pattern": "/home/joe/karma/mobile-web-react/*.js",
      "served": true,
      "included": true,
      "watched": true,
      "nocache": false,
      "weight": [
        1,
        0,
        1,
        0,
        0,
        0
      ]
    }
  ],
  "browserConsoleLogOptions": {
    "level": "debug",
    "format": "%b %T: %m",
    "terminal": true
  },
  "customContextFile": null,
  "customDebugFile": null,
  "customClientContextFile": null,
  "exclude": [
    "/home/joe/karma/mobile-web-react/karma.conf.js"
  ],
  "logLevel": "DEBUG",
  "colors": true,
  "autoWatch": false,
  "autoWatchBatchDelay": 250,
  "restartOnFileChange": false,
  "usePolling": true,
  "reporters": [
    "progress"
  ],
  "singleRun": true,
  "browsers": [
    "PhantomJS"
  ],
  "captureTimeout": 60000,
  "proxies": {},
  "proxyValidateSSL": true,
  "preprocessors": {
    "/home/joe/karma/mobile-web-react/*.js": [
      "browserify"
    ]
  },
  "urlRoot": "/",
  "reportSlowerThan": 0,
  "loggers": [
    {
      "type": "console",
      "layout": {
        "type": "pattern",
        "pattern": "%[%d{DATE}:%p [%c]: %]%m"
      }
    }
  ],
  "transports": [
    "polling",
    "websocket"
  ],
  "forceJSONP": false,
  "plugins": [
    "karma-*"
  ],
  "client": {
    "args": [],
    "useIframe": true,
    "runInParent": false,
    "captureConsole": true,
    "clearContext": true
  },
  "defaultClient": {
    "args": [],
    "useIframe": true,
    "runInParent": false,
    "captureConsole": true,
    "clearContext": true
  },
  "browserDisconnectTimeout": 2000,
  "browserDisconnectTolerance": 0,
  "browserNoActivityTimeout": 30000,
  "processKillTimeout": 2000,
  "concurrency": null,
  "failOnEmptyTestSuite": true,
  "retryLimit": 2,
  "detached": false,
  "crossOriginAttribute": true,
  "browserSocketTimeout": 20000,
  "cmd": "start",
  "configFile": "/home/joe/karma/mobile-web-react/karma.conf.js"
}
26 11 2018 14:48:48.220:DEBUG [plugin]: Loading karma-* from /usr/local/lib/node_modules
26 11 2018 14:48:48.220:DEBUG [plugin]: Loading plugin /usr/local/lib/node_modules/karma-browserify.
26 11 2018 14:48:48.431:DEBUG [plugin]: Loading plugin /usr/local/lib/node_modules/karma-coverage.
26 11 2018 14:48:48.693:DEBUG [plugin]: Loading plugin /usr/local/lib/node_modules/karma-jasmine.
26 11 2018 14:48:48.696:DEBUG [plugin]: Loading plugin /usr/local/lib/node_modules/karma-phantomjs-launcher.
26 11 2018 14:48:48.764:DEBUG [framework.browserify]: created browserify bundle: /tmp/1830825872ce6d6f085118f36ddf651b.browserify
26 11 2018 14:48:48.784:DEBUG [framework.browserify]: add bundle to config.files at position 0
26 11 2018 14:48:48.791:DEBUG [web-server]: Instantiating middleware
26 11 2018 14:48:48.853:DEBUG [watcher]: Excluded file "/home/joe/karma/mobile-web-react/karma.conf.js"
26 11 2018 14:48:48.862:DEBUG [framework.browserify]: building bundle
26 11 2018 14:48:48.865:DEBUG [framework.browserify]: updating project.config.js in bundle
26 11 2018 14:48:48.865:DEBUG [framework.browserify]: updating test.js in bundle
26 11 2018 14:48:49.570:DEBUG [framework.browserify]: bundling
26 11 2018 14:48:49.661:INFO [framework.browserify]: bundle built
26 11 2018 14:48:49.663:INFO [karma-server]: Karma v3.1.1 server started at http://0.0.0.0:9876/
26 11 2018 14:48:49.667:INFO [launcher]: Launching browsers PhantomJS with concurrency unlimited
26 11 2018 14:48:49.680:INFO [launcher]: Starting browser PhantomJS
26 11 2018 14:48:49.681:DEBUG [temp-dir]: Creating temp dir at /tmp/karma-86591091
26 11 2018 14:48:49.683:DEBUG [launcher]: /usr/local/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs /tmp/karma-86591091/capture.js
26 11 2018 14:48:49.834:DEBUG [web-server]: serving: /usr/local/lib/node_modules/karma/static/client.html
26 11 2018 14:48:49.863:DEBUG [web-server]: serving: /usr/local/lib/node_modules/karma/static/karma.js
26 11 2018 14:48:49.923:DEBUG [karma-server]: A browser has connected on socket bYWR4pruFDshDCE9AAAA
26 11 2018 14:48:49.978:DEBUG [web-server]: upgrade /socket.io/?EIO=3&transport=websocket&sid=bYWR4pruFDshDCE9AAAA
26 11 2018 14:48:50.022:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket bYWR4pruFDshDCE9AAAA with id 86591091
26 11 2018 14:48:50.031:DEBUG [launcher]: PhantomJS (id 86591091) captured in 0.364 secs
26 11 2018 14:48:50.047:DEBUG [phantomjs.launcher]: 

26 11 2018 14:48:50.051:DEBUG [middleware:karma]: custom files null null null
26 11 2018 14:48:50.051:DEBUG [middleware:karma]: Serving static request /context.html
26 11 2018 14:48:50.051:DEBUG [web-server]: serving: /usr/local/lib/node_modules/karma/static/context.html
26 11 2018 14:48:50.054:WARN [middleware:karma]: Invalid file type, defaulting to js. browserify
26 11 2018 14:48:50.064:DEBUG [middleware:source-files]: Requesting /absolute/usr/local/lib/node_modules/karma-jasmine/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?1f336da4025323945fc818c69bdc564a85081e4e
26 11 2018 14:48:50.064:DEBUG [middleware:source-files]: Fetching /usr/local/lib/node_modules/karma-jasmine/node_modules/jasmine-core/lib/jasmine-core/jasmine.js
26 11 2018 14:48:50.065:DEBUG [web-server]: serving (cached): /usr/local/lib/node_modules/karma-jasmine/node_modules/jasmine-core/lib/jasmine-core/jasmine.js
26 11 2018 14:48:50.088:DEBUG [middleware:source-files]: Requesting /base/test.js?f1e8afc0445d448008af53b945365a082c4f2f4d
26 11 2018 14:48:50.088:DEBUG [middleware:source-files]: Fetching /home/joe/karma/mobile-web-react/test.js
26 11 2018 14:48:50.089:DEBUG [middleware:source-files]: Requesting /base/project.config.js?5ec2aa573f32095500773291513ae6910e25a090
26 11 2018 14:48:50.089:DEBUG [middleware:source-files]: Fetching /home/joe/karma/mobile-web-react/project.config.js
26 11 2018 14:48:50.089:DEBUG [middleware:source-files]: Requesting /absolute/tmp/1830825872ce6d6f085118f36ddf651b.browserify?0d315cdf3617983b1178913f6058fe7a63276fd1
26 11 2018 14:48:50.089:DEBUG [middleware:source-files]: Fetching /tmp/1830825872ce6d6f085118f36ddf651b.browserify
26 11 2018 14:48:50.089:DEBUG [middleware:source-files]: Requesting /absolute/usr/local/lib/node_modules/karma-jasmine/lib/boot.js?945a38bf4e45ad2770eb94868231905a04a0bd3e
26 11 2018 14:48:50.089:DEBUG [middleware:source-files]: Fetching /usr/local/lib/node_modules/karma-jasmine/lib/boot.js
26 11 2018 14:48:50.090:DEBUG [middleware:source-files]: Requesting /absolute/usr/local/lib/node_modules/karma-jasmine/lib/adapter.js?3098011cfe00faa2a869a8cffce13f3befc1a035
26 11 2018 14:48:50.090:DEBUG [middleware:source-files]: Fetching /usr/local/lib/node_modules/karma-jasmine/lib/adapter.js
26 11 2018 14:48:50.090:DEBUG [web-server]: serving (cached): /home/joe/karma/mobile-web-react/test.js
26 11 2018 14:48:50.091:DEBUG [web-server]: serving (cached): /home/joe/karma/mobile-web-react/project.config.js
26 11 2018 14:48:50.091:DEBUG [web-server]: serving (cached): /tmp/1830825872ce6d6f085118f36ddf651b.browserify
26 11 2018 14:48:50.093:DEBUG [web-server]: serving (cached): /usr/local/lib/node_modules/karma-jasmine/lib/boot.js
26 11 2018 14:48:50.094:DEBUG [web-server]: serving (cached): /usr/local/lib/node_modules/karma-jasmine/lib/adapter.js
26 11 2018 14:48:50.096:DEBUG [web-server]: serving: /usr/local/lib/node_modules/karma/static/context.js
PhantomJS 2.1.1 (Linux 0.0.0): Executed 1 of 1 SUCCESS (0.013 secs / 0.001 secs)
TOTAL: 1 SUCCESS
26 11 2018 14:48:50.144:DEBUG [karma-server]: Run complete, exiting.
26 11 2018 14:48:50.145:DEBUG [launcher]: Disconnecting all browsers
26 11 2018 14:48:50.146:DEBUG [framework.browserify]: cleaning up
26 11 2018 14:48:50.156:DEBUG [launcher]: Process PhantomJS exited with code null
26 11 2018 14:48:50.156:DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-86591091
26 11 2018 14:48:50.162:DEBUG [launcher]: Finished all browsers

Sample Test Code(test.js)

describe('ChromeLauncher', function () {
       it('works', function () {
         expect(2).toBe(2);
       })
})


Trouble Shooting

ReferenceError: Can't find variable: process

ReferenceError: Can't find variable: process

karam.conf.js
    frameworks: ['browserify','jasmine'],
    preprocessors: {
            '*.js': ['browserify']
    },

browserify cannot find npm module

npm install -g browserify


항상 팀을 만든 후 첫번째 사람을 뽑는건 어려운 일이다.

예를 들어서 QA팀을 만들고, 처음 QA를 뽑을 경우엔 보통 개발자들이 면접을 진행한다.


그러나 개발자의 인식에서 QA는 자신들이 구현한 기능의 버그가 없는지 검증하는 역활의 사람을 뽑는데 포커싱을 한다.

QA로서 제일 의미없는 경력사항이 프로젝트 참여이다.

어찌보면 모든 QA는 테스트를 한다. 주업무이기 때문이다.

그러면 테스트를 잘하는건 면접에서 어떻게 파악할 수 있을까?

솔직히 말하면 쉽지 않다.

사람마다 도메인이 다른데 짧은 면접 시간동안 이를 캐치하기엔 쉽지 않다.

그러면 어떻게 뽑아야할까?

경험상으로 QA로서 필요한 스킬이 어떤게 있을까?

API 검증 능력, SQL 작성 능력, 테스트 자동화, 프로세스 개선 , CI 경험,  코드 작성 및 해석 능력 .....

수많은 능력이 있는데 이를 다 갖춘 사람을 뽑는 건 쉽지 않다. 그렇다고 무한정 기간을 늘려서 기다린다고해도 그런 사람이 지원한다는 보장도 없다.

처음에 눈높이를 엄청 올려서 보다가 면접을 보면서 눈높이를 낮춘 경험이 있다.


그나마 빠른 시간 내에 괜찮은 사람을 뽑기 위해선 회사에서 필요한 스킬이 무엇인지 빨리 파악하는 것이 중요하다.

현재 회사에서는 Client 없이 API 테스트이 간혹 필요했으며, 서비스 QA 경험이 갖춘 사람이 필요했다.

그 외에 SQL 조회, CI 관리, 테스트 자동화 등을 진행하지만 이 부분은 들어와서 가르치면서 진행해도 되는 부분 이었다.

이렇게 필요한 스킬을 리스트업하고 그 우선순위를 정한 후 위에서부터 해당 역량을 갖춘 사람을 뽑는 방법으로 접근하는 것이 그나마 빠르게 사람을 뽑을 수 있었던 것 같다.


PS. 그렇다고 아주 빨리 사람을 뽑을 수 있는건 아니다. 뛰어난 능력을 갖춘 인재는 모든 회사에서 필요로 하기 때문에....^^; 

'일상에서' 카테고리의 다른 글

남은 1달 동안 시도해볼 것  (0) 2018.11.28
첫 리더라는 직책을 던져버리며  (0) 2018.11.22
팀의 첫 인원을 뽑을때  (0) 2018.11.22
QA는 왜 필요한가?  (0) 2018.11.21
이직 후 2주 차!  (0) 2016.04.28
이게 언제적 동영상이야~  (0) 2014.07.21


'Daily' 카테고리의 다른 글

Jenkins Client & QA Jobs  (0) 2018.11.16
Client Release Process Before & After  (0) 2018.11.15
사내 Agile Process  (0) 2018.11.15
Server Release Process  (0) 2018.11.15
Client QA Process  (0) 2018.11.15
SOAPUI를 이용한 API Test Automation  (0) 2018.11.14


Session


Session 1 : Agile Testing Options : 전문가가 추천하는 애자일 프로젝트에서의 테스트 방안

발표자 - PhD.Stuart Reid(영국), ISO/IEC/IEEE 29119 의장

내용

  •  Agile 방법론을 사용해야되는 이유에 대해서 설명
    • 비지니스 요구사항이 계속 같을 순 없다.!  - 수정할 여지가 있다. 그렇기 때문에 주기를 짧게 가져가서 고객에게 진행상황을 보여주고 피드백을 받는 프로세스를 가져가려면 Waterful 방식보다 Agile 방식이 낫다.
  • Agile Manifesto
    1. 과정이나 도구에 의존하기 보다는 개인과 상호작용을 해라
    2. 문서를 알기 쉽게 쓰려고 하기 보다는 소프트웨어를 개발해라
    3. 계약 협상보다는 고객과 협력을 해라
    4. 계획을 따르기 보다는 변화에 대응하라
  • 다양한 Agile Option 설명
    • 고정된 프로세스가 아닌 상황에 맞게 프로세스를 변경할 수 있다! - 1개의 Sprint : 디자인, 개발, 테스트를 모두 가져갈 수도 있고, 1개의 Sprint : 개발 & 1개의 Sprint : 테스트를 가져갈 수도 있다.
  • Agile & CI
    • 개발자가 커밋을 할 때마다 빌드가 되고 테스트를 하면, 차후 Regression Testing을 할 때, 부담을 줄 수 있다.
  • 테스트 방법 : TDD, BDD
    • 개발 후 테스트 방법론
  • 탐색적 테스팅
    • 타임라인 기반의 경험기반 테스트


Session 2 : 성공적인 애자일 도입과 전파를 위한 실전 노하우

발표자 - 송홍진, (주)STA테스팅컨설팅

내용

  • 프로세스를 도입하려면 리드하는 사람, 경영층의 전폭적인 지지가 필요하다.
  • 한번에 하려고 하지말고, 조금씩 적용하라.
  • 유능한 코치가 필요하다.


Session 3 : Better Safe Than Sorry : Testing Challenges Using SAFe (Scaled Agile Framework)

발표자 - Mette, Bruhn-Pedersen(덴마트), Bruhn-Pedersen Consulting 대표

내용

  • 규모가 커지면 Agile도 확장된 Agile 을 적용할 필요가 있다.
  • 50명 이하의 조직에서 SAFe를 사용할 경우 비용만 든다.
  • 1개의 방법론만 고집하지말고, 본인 회사에 맞는 방법론들을 조합해서 쓰는것도 좋다.
  • SAFe에서 PI(Program Increment)가 중요하다.
    • Sprint 시작 전 PI를 이틀 정도 Planning을 하는 것이 좋다. 
    • 보통 PI로 정해진 것들은  8-12 weeks의 plan을 논의한다.
    • 정해진 PI는 변경될 수 있다. 항상 염두해두자.


Session 4 : 경량화 소프트웨어 개발 방법론과 테스팅

발표자 : 권영일, (주)STA테스팅컨설팅 대표

내용

  • Waterful 모델에서 Agile로 많이 넘어가고 있지만 아직도 우리나라엔 수직적 구조의 회사들이 많음
  • Agile의 수평적 구조 모델인 경량 개발방법론(리드미) 적용해보는 것도 좋을 것 같다.
  • Scrum master가 아닌 PO(Product Owner)가 백로그에 티켓을 생성하고, 병목이 있으면 팀의 리더가 정리해준다가 방법론의 핵심인듯


Session 5 : SAFe : 대규모 프로젝트에서의 애자일 방법론 설명회

발표자 - Mette, Bruhn-Pedersen(덴마트), Bruhn-Pedersen Consulting 대표

내용

  • 질의 응답 받는 시간. 특별한 내용은 없었음




일시 : 2015/04/30 13:30~16:30

주제 : 공개SW, 테스팅을 만나다! (공개SW 테스팅 자동화 도구)

참석 : Kwangmyung KimHyunmin ChoiSungHwan ChoJiSun Yoo

Link : http://www.sten.or.kr/bbs/board.php?bo_table=news&wr_id=3085

시간주제참석자
13:00~13:30 등록
13:30~14:00공개SW를 이용한 자동화 테스트의 시작최현민, 조성환, 유지선
14:00~14:45테스트 관리 도구: OTestManager최현민, 조성환
14:45~15:30지속적인 통합 환경에서의 SW품질 시각화를 통한 효과적인 코드 리뷰 수행 방안최현민, 조성환, 유지선
15:50~16:35모바일 테스팅도구: URQA김광명, 최현민, 조성환, 유지선
16:35~17:20JMeter 정확히 알고 제대로 활용하자-

Session 1 : 공개 SW를 이용한 자동화 테스트의 시작

개발 프로세스에 따른 자동화 테스트 ex) 요구사항 관리, 성능테스트, 테스트관리, 메시지 자동화, API 자동화, 화면 자동화

간단한 자신의 경험과 함께 Summary 수준의 강의

Session 2 : 테스트 관리 도구 : OTestManager

sten에서 개발한 Open source tool.

Test Link & 자체 Simple 결함 관리 시스템

Test Link의 개선 버전 or 한글 버전?

특징 : Testcase에서 Fail을 경우 해당 TC에 결함 등록이 가능. 결함 리스트와 Testcase에서 각각 링크로 접근 가능. Daily Test result 통계 및 Visualization.

Startup 등에서 좋아 보이지만 개인적인 견해로는 Excel + Mantis를 사용하겠음

Session 3 : 지속적인 통합 환경에서의 SW품질 시각화를 통한 효과적인 코드 리뷰 수행 방안

SonarQube : http://www.sonarqube.org/

Code Analytics tool

여러가지 언어 및 IDE 지원

한번 적용해볼 필요 있을 듯

Session 4 :  모바일 테스팅도구 : URQA

URQA : http://urqa.io/urqa/

사후 QA, 여러 SDK 지원(Android, IOS, UNITY, TIZEN, Backend Architecture, Front-end Architecture)

경쟁사 : Bugbase : 버그 수에 기반, Acra : 최근 10개만 노출

특징 : 사용자 경로로 Visualization

Session 5 : JMeter 정확히 알고 제대로 활용하자.

Absent

'QA > Conference' 카테고리의 다른 글

Team Up to create what's next - Atlassian 2016 하반기 세미나  (0) 2016.11.21
migration from redmine to confluence  (0) 2016.07.26
21st SW Quality Insight Conference  (0) 2016.07.07
Atlassian 세미나 & User Group  (0) 2016.06.30
Open Technet  (0) 2016.03.30
QA Day  (0) 2016.02.03

Date : 2015.12.18 (13:00~17:00)

Place : SK Planet 판교 1사옥 1층 SUPEX Hall

전체적인 느낌은 아~ 우리는 이런 테스트를 하는데, 이런 상용 툴을 이용한다라는 느낌. 시연 부스에선 해당 상용 툴 업체의 영업 직원이 데모 시연.

특별한 것은 없고 Android M에서 해당 기능에서 우리 앱이 잘 동작하는지는 확인할 필요가 있어 보임

Greeting

발표자 : 전윤호 CTO

  • 차기 T-map 버전 릴리즈 출시 예정
  • UX와 QA 경계는 어떻게 정할 것인가?
  • 머신 러닝을 활용했다면, QA가 확인해야 할 부분은 어디까지인가?

Session 1. 조직 내 QA의 미션 및 가치 실현 방법

발표자 : 박은영 팀장

  • QA Trand
    • OS => PC Utility => Client/Server => Web => 모바일 => ???
    • 시대가 변함에 따라 QA 핵심이 달라진다.
  • QA Mission - ACE : 빠르고 정확한 QA를 통해 서비스 품질 경쟁력 확보
    • Activity(속도)
    • Contents(정확성)
    • End Users(통합적 품질)
  • QA Value - IPOP : 제품 Life Cycle에[ 걸쳐 조직과 제품에 존재하는 문제를 찾고 개선한다.
    • Infra
    • Process
    • Organization
    • Product

Session 2. 고객 VOC 접근 방법

발표자 : 박상수 매니저

  • Voice Of Customer : 시장 품질
  1. 누락된 검증 시나리오 개선
  2. 변경 기능 뿐만 아니라 Side Effect 확대 검증
  3. 게임/이벤트/연동 시스템에서 발생하는 이슈 지원
  4. 공통 콤포넌트 검증
  5. 소모 전류 & 저사양 이슈 단말 검증
  6. Data Log 분석을 통한 시나리오 보안

Session 3. 모바일 앱 트래킹 분석 방법

발표자 : 김장미 매니저

  • Fiddler, ADB 등을 이용해서 모바일 디버깅
    • 특정 API가 무한 호출되는지를 체크

Session 4. Android M의 주요 Feature 및 앱 검증 사례

발표자 : 최성욱 매니저

  • Changes
    • Run time Permission
      • 특정 권한 개별 설정 가능
      • 9가지 Permission최대 절전 모드
      • Doze mode
      • App Stand by mode
        • App 설치되지 않은 상태와 동일

Session 5. 모바일 앱 비기능 테스트 방법 및 사례

발표자 : 김식 매니저

  • 소모 전류 체크
  • 메모리 Leak
  • E2E 측정 대상 체크
    • OS, 해상도..

Session 6. 검증 효율화를 위한 TC 관리 및 사례

발표자 : 정원식 매니저

  • Q.Win 소개

Session 7. 프로젝트 효율적 관리를 위한 시스템 소개

발표자 : 김경진 매니저

  • QAMS 소개

 

'QA > Conference' 카테고리의 다른 글

Team Up to create what's next - Atlassian 2016 하반기 세미나  (0) 2016.11.21
migration from redmine to confluence  (0) 2016.07.26
21st SW Quality Insight Conference  (0) 2016.07.07
Atlassian 세미나 & User Group  (0) 2016.06.30
Open Technet  (0) 2016.03.30
QA Day  (0) 2016.02.03

+ Recent posts