0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan15 halaman

Panduan Lengkap Git dan Rekayasa Keandalan

Dokumen ini membahas konsep dan praktik dalam rekayasa perangkat lunak, termasuk sistem kontrol versi, manajemen ketergantungan, rekayasa keandalan, pengujian perangkat lunak, dan DevOps. Berbagai teknik dan pola untuk meningkatkan keandalan dan efisiensi dalam pengembangan perangkat lunak juga dijelaskan, seperti pengujian otomatis, arsitektur berbasis peristiwa, dan praktik DevOps. Selain itu, dokumen ini menyoroti pentingnya kolaborasi tim dan penggunaan alat yang tepat untuk mencapai pengiriman perangkat lunak yang lebih cepat dan berkualitas tinggi.

Diunggah oleh

William Santoso
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan15 halaman

Panduan Lengkap Git dan Rekayasa Keandalan

Dokumen ini membahas konsep dan praktik dalam rekayasa perangkat lunak, termasuk sistem kontrol versi, manajemen ketergantungan, rekayasa keandalan, pengujian perangkat lunak, dan DevOps. Berbagai teknik dan pola untuk meningkatkan keandalan dan efisiensi dalam pengembangan perangkat lunak juga dijelaskan, seperti pengujian otomatis, arsitektur berbasis peristiwa, dan praktik DevOps. Selain itu, dokumen ini menyoroti pentingnya kolaborasi tim dan penggunaan alat yang tepat untuk mencapai pengiriman perangkat lunak yang lebih cepat dan berkualitas tinggi.

Diunggah oleh

William Santoso
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

Software engineer

Version Control System


Digunakan untuk mecatat perubahan/manage changes pada source code, track history of
changes, facilitates collaboration, enables rollback, supports branching and merging.

Centralized version control system terdapat single centar repository tiap user synchronize.
Distributed version control system memiliki local copy of repository

Aspect Centralized Distributed


Repository Single central Multiple local
server copies
Offline access Limited Full, can do without
connection
Collaboration Sequential Parallel
commits, update development,
dari main update from copy
then push to main
Performance Slower on Faster due local
operation
Use case Small terms, Larger projects,
simple projects open source
Git fundamentals
Repository, penyimpanan yang berisi file project beserta history perubahan
● Local repository, local device
● Remote repository, (server like github)
Commit, snapshot/perubahan yang terjadi di repository (imagine checkpoint).
Komponennya ada dua, commit message dan commit Hash.
Branch, cabang dari kode utama, memungkinkan pengembangan terpisah secara paralel,
ada main dan features branches. (Pohon banyak cabang dan dimerge ke batang)
Merge, branch dengan development beda beda digabung menjadi satu
● Fast forward merge, no diverging changes only one way
● Three way merge, terdapat penyimpangan pada saat branch digabung 2 into 1

Collaborative workflow in git


● Forking workflow, fork repository, change, submit pull request to first repo
● Feature branch workflow, make branch, merge back to main
● Gitflow workflow, existed branch from the beginning: master/main, develop, features,
release and hotfix

Advanced git features


● Rebasing, menguban base dari feature branch me titik awal berbeda
● Stashing, temporarily save changes yang belom commit (draft)
● Cherry picking, ngambil commit tertentu dari branch satu buat branch lainnya

Dependency management
Dependency artinya external code/libraries yang dibutuhkan dalam projek. Untuk mencegah
version conflicts.
● Transitive dependency, package yang bergantung sama package lain
● Diamond dependency, gabungan beberapa transitive dependencies (mungkin
menyebabkan conflict antar version)
Misal library A butuh Lib-X v1.0, library B butuh Lib-X v2.0, dan kita pake dua library tersebut
→ bakal konflik karena perbedaan version

One version rule


Hanya satu versi dari sebuah dependency yang boleh dipakai dalam project. Tujuannya
mencegah conflicts & incompatibilities, simplifies builds, dan maintenance & update.
Penerapannya bisa lewat 3 cara:
● Monorepo approach, disimpsan di satu repo
● Sutomated dependency update, tools buat update versi otomatis
● Consistent versioning, memastikan versi yang dipake semua tim sama

Reliability engineering
Kemampuan perangkat lunak untuk beroperasi tanpa kegagalan dalam kondisi tertentu. Hal
ini penting karena untuk kepercayaan pengguna, biays operasional, keamanan.

Metrik reliability
● MTTF (Mean Time To Failure): rata rata waktu sebelum gagal pertama kali
● MTTR (Mean Time To Repair): rata rata waktu untuk memperbaiki setelah kegagalan
● MTBF (Mean Time Between Failure): rata rata waktu antara kegagalan dengan
berikutnya. Semakin tinggi nilainya, semakin baik perangkat:
MTBF = MTTF + MTTR
● Availability: presentase waktu beroperasi dan diakses:
Availability = (MTTF/MTTF+MTTR) x 100%
Merancang arsitektur untuk reliability
Prinsip dasar
● Modularitas: memecah sistem besar menjadi komponen komponen kecil independent
● Redundansi dan replikasi: duplikat dari komponen kritis yang akan membantu jika
komponen utama gagal
● Deteksi dan koreksi error: mendeteksi suatu fungsi tidak berjalan dan
memperbaikinya secara otomatis
● Arsitektur failover: proses otomatis mengalihkan beban ke komponan cadangan saat
kegagalan di utama

Reliability patterns
. Circuit breaker pattern

Ketika ada beban berlebih akan putus untuk melindungi seluruh sistem dari
kerusakan. Keuntungan: mencegah kegagalan berantai, waktu recovery, UX
terjaga dengan fallback system. Contoh:
E-commerce Website → Payment Service
Normal: Order berhasil diproses
Payment Service Down: Circuit breaker OPEN
- User tetap bisa browse dan add to cart
- Checkout menampilkan "Payment temporarily
unavailable, try again later"
- Sistem tidak terus mencoba koneksi yang gagal
- Sistem tidak terus mencoba koneksi yang gagal

. Bulkhead pattern

Imagine titanic, jika satu ruangan bocor sekat akan mencegah air masuk
sehingga kapal tidak tenggelam. Keuntungan: fault isolation, resource
guarantee, better performance monitoring. Contoh:
Streaming Service:
- Stream Video: Dedicated resources
- User Profile: Separate resources
- Recommendation Engine: Isolated resources
- Search Function: Own resource pool
Jika recommendation engine bermasalah, user tetap
bisa streaming dan search.
. Event driven architecture

Imagine radio station, tidak tahu siapa yang mendengarkan, tapi bagi yang
frequency sama akan mendapat informasi sama. Keuntungan: loose coupling
(tidak butuh kenalan), scalability, resilience, flexibility
Contoh:
Online Shopping
Traditional Method:
User places order →
├─ Update inventory (wait...)
├─ Process payment (wait...)
├─ Send confirmation email (wait...)
├─ Update analytics (wait...)
└─ Create shipping label (wait...)
Total time: 5-10 seconds

Event Driven:
User places order → Publish "OrderCreated" event →
Response immediately
Background processing (parallel):
├─ Inventory Service: Update stock
├─ Payment Service: Process payment
├─ Email Service: Send confirmation
├─ Analytics Service: Update metrics
└─ Shipping Service: Create label
Total response time: <1 second

Measuring and improving software reliability


Measurement techniques:
● Failure tracking: mencatat setiap insiden
● User feedback: mengumpulkan laporan dari pengguna

Improving techniques:
● Refactoring: memperbaiki dan menyederhanakan struktur kode tanpa mengubah
fungsional eksternal
● Automated testing: pengujian secara otomatis setiap perubahan kode

Reliability engineering tools


● Chaos engineering: metode eksperimen untuk meningkatkan ketahanan dengan
menggagalkan secara sengaja. Contoh: chaos monkey dari netflix
● Monitoring tools: visibility real time ke dalam kinerja sistem. Contoh: prometheus
● Testing and automation tools: proses otomatis pengujian untuk mengurangi
kesalahan manusia. Contoh: jenkins
● Incident management: mengelola respon tehadap insiden yang ber eskalasi contoh:
pagerduty

Reliability practices
● Blameless postmortem: setelah setiap kegagalan, mengadakan pertemuan untuk
menganalisis
● Continuous improvement: proses iteratif untuk terus mengukur, belajar dari
kegagalan untuk membuat sistem lebih baik waktu ke waktu

Fault tolerance
Kemampuan sistem untuk tetap beroperasi meskipun ada kegagalan

Techniques:
● Redundancy: menyediakan komponen cadangan, contoh: server mati akan dialihkan
ke server cadangan
● Graceful degradation: jika kegagalan sistem tidak akan mati, tetapi tetap fungsional
dengan berkurang, contoh: tidak dapat menampilkan rokemendasi, tetapi masih bisa
mencari produk
● Recovery mechanism:
. Check pointing and rollback (checkpoint)
. Fallover system (cadangan mengambil alih)
. Self healing mechanism (memperbaiki secara otomatis)

Software testing
Proses mengevaluasi kualitas perangkat dengan mendeteksi bug, memverifikasi
spesifikasi, memvalidasi kebutuhan pengguna, menjamin kualitas, mengurangi resiko

Prinsip
. Testing menunjukkan leberadaan bug
. Exhaustive testing tidak mungkin dilakukan
. Testing dari awal (early testing)
. Defect clustering (error kumpul di area tertentu)
. Pesticide paradox (tes berulang tidak ada bug baru)
. Testing bergantung konteks
. Verifikasi tidak sama dengan validasi

Level testing
● Unit testing: menguji unit terkecil secara individual, contoh: menguji login secara
mandiri
● Integration testing: menguji unit2 yg telah diuji berinteraksi dengan satu sama lain.
Misalnya apakah fungsi login berkomunikasi dengan database secara benar
● System testing: menguji keseluruhan system end to end untuk semua komponen
berfungsi bersama dengan requirements, contoh: pengujian e commerce dari login,
browsing produk hingga checkout
● Acceptance testing: dilakukan dengan perspektif pengguna akhir/user untuk
memverifikasi kebutuhan user

Jenis pengujian
● Functional testing: software berfungsi sesuai dengan spesifikasi contoh: submit
button to page
● Non functional testing: menguji kualitas atribut seperti performa, keamanan dan
usability contoh: page load time
● Regression testing: perubahan atau perbaikan tidak menyebabkan bug baru
● Performa testing: mengukur performance, contoh: seberapa cepat sistem respon jika
100 user mengakses secara bersamaan
● Usability testing: mudah digunakan oleh user sesuai expectation

Teknik pengujian
– Blackbox testing
○ Fokus pada spesifikasi eksternal tanpa lihat struktur, cocok untuk requirement
fungsional
○ Tekniknya:
◆ Equivalence partitioning (membagi input ke kelas)
◆ Boundary value analysis (nilai min, max)
◆ Pairwise testing (dua parameter)
◆ Decision table testing
◆ State transition testing
◆ Use case testing
– Whitebox testing
○ Menggunakan pengetahuan kode internal untuk tes, cocok untuk menguji
logika program
○ Tekniknya:
◆ Statement coverage (setiap statement dijalankan)
◆ Branch coverage (true/false berjalan)
◆ Condition coverage (kondisi dievaluasi ke true or false)
◆ Basis path testing (cyclomatic complexity)
– Greybox testing
○ Gabungan box
○ Tester tahu sebagian logika internal like API

Test planning dan design


● Test plan (dokumen)
● Test case development
● Test execution
● Defect identification and tracking (identification ke perbaikan ke validasi ke close) with
github issue atau jira

Test driven development


Teknik membangun software melalui test untuk memastikan code memenuhi requirements
dan testable dari awal.

Core principles:
● Write a test
● Write a code
● Refactor

Red green refactor cycle


● Red (writing a fail) mendefinikasikan persyaratan sebelum implementasi
● Green (write the minimum code) bikin minimum amount code
● Refactor (improve the code)

DevOps
Pembuatan software ada dua, development team dan operative team, dimana mereka kerja
separately. Development team fokus bikin kode dan operation team fokus pada stabilitas
produk
DevOps adalah pendekatan dalam pembuatan software di mana dua team collaborate.
Tujuan:
● Faster delivery
● Improved quality
● Efficiency and reduced bottleneck
● Customer satisfaction

DevOps principles
● Automation: dilakukan secara otomatis
● Continuous integration: perubahan kode terintegrasi di satu repository
● Continuous delivery: memastikan deployment readiness
● Continuous deployment: automatically di deploy

Benefit DevOps
● Increased deployment frequency
● Reduced failure rate
● Faster time to market
● Improved team morale

DevOps toolchain
● Planning tools
● Version control tools
● Build CI/CD tools: jenkins and travis ci, spinnaker and go cd
● Monitoring and logging tools: prometheus

Anda mungkin juga menyukai