Knowledge Sharing — Agile, Software Environment

Nur Intan Alatas
println-mic
Published in
4 min readApr 3, 2018

Agile Development

Agile Software Development Life Cycle adalah kombinasi antara metodologi software development yang incremental dan iterative. Metode ini berfokus pada menghasilkan software yang dapat memenuhi kepuasan user. Sehingga dalam pengembangannya metode agile ini tidak hanya berfokus pada selesainya produk sehingga setiap tasknya dapat berubah sesuai dengan masalah yang ada.

Metode Agile Development ini kami implementasikan dalam mengembangkan product Println MIC. Kami membagi pengembangan software menjadi 3 sprint, yang setiap sprintnya dikerjakan selama 4 minggu (1 bulan) . Dalam menjalankan sprint kami melewati beberapa fase diantaranya

  1. Fase inisiasi

Fase ini merupakan fase terpenting dan merupakan fase paling awal dari agile development. Pada fase ini kami membuat 3 hal penting yaitu project vision menggunakan tools lean canvas. Pada project vision dijelaskan mengenai product apa yang akan kami buat, siapa target pasar kami, dan bagaimana strength dan weakness dari product kami. Setelah project vision dibuat kami pun membuat Epic dan User Stories. Berikut ini salah satu contoh dari User Stories yang kami buat :

  • Sebagai pengguna saya ingin dapat menyimpan file pada sistem agar memudahkan saya dalam melakukan proses pencetakan.

2. Sprint Planning

Selanjutnya kami melakukan sprint planning yaitu memecah-mecah backlog menjadi task-task kecil untuk kami implementasikan selama sprint berjalan. Task-task yang kami buat didesain sedemikian sehingga dapat di kerjakan dalam 1 kali scrum meeting.

3. Implementasi

Pada tahap ini kami mengimplementasikan kode-kode sesuai dengan task yang kami ambil

4. Review and Retrospective

Pada tahap ini kami melakukan penilaian terhadap sprint yang kami lakukan, apakah pekerjaan yang kami lakkukan sudah baik ataukah ada hambatan. Pada tahap ini juga kami menyelesaikan masalah yang ada pada sprint 1 agar dapat melakukan hal yang lebih baik pada sprint 2. Tahap ini merupakan tahap terakhir dari sprint, jadi apabila tahap ini telah selesai maka artinya sprint yang baru akan segera dimulai dan kami harus mengulangi tahap 1 hingga tahap 4 lagi untuk sprint selanjutnya.

Contoh Scrum Board ketika Sprint Planning yang kami laksanakan

Software Environment

Dalam development ini kami membuat sebuah git flow sistem untuk memudahkan developer dalam mengerjakan tasknya. Kami membuat beberapa branch diantaranya CobaCoba, SIT_UAT, UserStory dan Production.

  • Coba-coba merupakan branch yang kami gunakan untuk memeriksa apakah sebuah kode dapat berfungsi apabila di push. Kami menggunakan branch coba-coba hanya untuk setup enviroment di awal sistem pengembangan.
  • SIT_UAT_BACKEND, merupakan branch development yang digunakan oleh team backend, semua user stories yang telah selesai dikerjakan oleh team backend dapat di merge ke dalam branch ini
  • SIT_UAT merupakan branch development yang digunakan oleh team frontend, semua user stories yang telah dikerjakan oleh team frontend dapat dimerge ke branch ini. Branch ini juga merupakan branch utama SIT_UAT sehingga semua pekerjaan yang telah diselesaikan oleh team backend di branch SIT_UAT_BACKEND dapat di merge ke SIT_UAT ini.
  • User-Story merupakan branch development dari setiap task, branch ini dibuat agar menghindari terjadinya merge conflict dalam proses pengembangan
  • Master merupakan branch yang ready untuk production

Pada tahap setup enviroment ini juga kami melakukan setting gitlab-ci.yml yang digunakan untuk Continues Integration, sehingga apabila pekerjaan telah di push maka CI akan secara otomatis melakukan testing dan deployment ke heroku

berikut ini merupakan script dari gitlab-ci.yml :

stages:- test- deploytest_frontend:image: "node:8.9.3"stage: testbefore_script:- "cd frontend"- "npm cache clean --force"- "rm -rf node_modules"- "npm install"script:- "npm test"coverage: /All files[^|]*\\|[^|]*\\s+([\\d\\.]+)/test_backend:stage: testbefore_script:- apt-get install -f- apt-get update -qy- apt-get install -y python3-pip sudo python-dev libpq-dev postgresql postgresql-contrib pep8- apt-get update- service postgresql start- sudo -u postgres psql -c "CREATE USER ppl WITH PASSWORD 'ppl' CREATEDB"- sudo -u postgres psql -c "CREATE DATABASE ppl OWNER ppl;"- sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE ppl TO ppl;"- export DATABASE_NAME=ppl- export DATABASE_USER=ppl- export DATABASE_PASSWORD=ppl- export DATABASE_HOST=localhostscript:- cd backend- pip3 install -r requirements.txt- python3 manage.py migrate- coverage run --source='.' --omit='*/env*',manage.py manage.py test- pycodestyle .- coverage report- cd ..coverage: '/TOTAL.+ ([0-9]{1,3}%)/'artifacts:paths:- publicdeploy_situat:image: ruby:latesttype: deploystage: deployonly:- sit_uatscript:- apt-get update -qy- apt-get install -y ruby-dev- gem install dpl- cd frontend && dpl --provider=heroku --app=$HEROKU_APP_SITUAT_NEW --api-key=$HEROKU_API_KEY_NEW- cd ../backend && dpl --provider=heroku --app=$HEROKU_APP_SITUAT_2_NEW --api-key=$HEROKU_API_KEY_NEWenvironment:name: SITUATurl: $HEROKU_APP_HOST_SITUATdeploy_staging:image: ruby:latesttype: deploystage: deployexcept:- sit_uat- master- productionscript:- apt-get update -qy- apt-get install -y ruby-dev- gem install dpl- cd frontend && dpl --provider=heroku --app=$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY- cd ../backend && dpl --provider=heroku --app=$HEROKU_APP_STAGING_2 --api-key=$HEROKU_API_KEY_2environment:name: productionurl: $HEROKU_APP_HOST_STAGINGdeploy_production:stage: deployimage: gitlab/dind:latestonly:- master- productionbefore_script:- apt-get update -qy && apt-get install sshpassscript:- mkdir ~/.ssh- echo -e "Host 159.65.136.5\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config- git remote add server $VPS_SERVER_GIT- sshpass -p $VPS_SERVER_PASSWORD git push server master -fenvironment:name: productionurl: $VPS_SERVER_URL

Dari script diatas CI dibagi menjadi 2 yaitu test dan deploy, test dan deploy juga dibagi menjadi test dan deploy untuk frontend dan test dan deploy untuk back end. tahap test dari masing masing sisi (front-end ataupun backend) hanya menjalani command yang dilakukan sampai menjalankan server masing-masing.

Contohnya untuk melakukan testing di frontend dilakukan npm run test, tapi sebelum itu dilakukan dengan masuk ke folder frontend, npm install baru kemudian melakukan testing. Hal yang sama dilakukan pada backend.

Terimakasih, Have a nice day !

--

--