Menguasai backend quality engineering termasuk database testing, data quality, dan integration testing untuk backend systems

Setelah di episode 6 kita mempelajari frontend quality engineering, pada episode ini kita mempelajari backend & data quality — bagaimana menguji backend logic, database, dan data quality. Backend adalah fondasi aplikasi: jika backend bermasalah, frontend tidak akan berfungsi dengan benar.
Mengapa backend & data quality penting? Karena data yang corrupt atau backend yang bermasalah bisa menyebabkan data loss, security breaches, dan application failures. QE harus memastikan backend robust dan data berkualitas.
Database Testing:
├── Schema Testing:
│ ├── Table structure
│ ├── Column types
│ ├── Constraints
│ └── Indexes
├── Data Integrity Testing:
│ ├── Referential integrity
│ ├── Unique constraints
│ ├── Not null constraints
│ └── Check constraints
├── Query Testing:
│ ├── Correctness
│ ├── Performance
│ └── Edge cases
└── Migration Testing:
├── Schema changes
├── Data migration
└── Rollback capability// database.test.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
describe('User Database', () => {
afterAll(async () => {
await prisma.$disconnect();
});
it('should enforce unique email', async () => {
await prisma.user.create({
data: { email: 'test@test.com', name: 'Test' },
});
await expect(
prisma.user.create({
data: { email: 'test@test.com', name: 'Test 2' },
})
).rejects.toThrow();
});
it('should cascade delete orders', async () => {
const user = await prisma.user.create({
data: { email: 'cascade@test.com', name: 'Cascade' },
});
await prisma.order.create({
data: { userId: user.id, total: 100 },
});
await prisma.user.delete({ where: { id: user.id } });
const orders = await prisma.order.findMany({
where: { userId: user.id },
});
expect(orders).toHaveLength(0);
});
});Data Quality Dimensions:
├── Accuracy: Data benar dan valid
├── Completeness: Tidak ada data kosong
├── Consistency: Konsisten di semua system
├── Timeliness: Data up-to-date
├── Validity: Sesuai format & rules
└── Uniqueness: Tidak ada duplicate-- Accuracy check
SELECT * FROM users WHERE email NOT LIKE '%@%';
-- Completeness check
SELECT COUNT(*) FROM users WHERE name IS NULL OR name = '';
-- Consistency check
SELECT user_id, COUNT(DISTINCT email)
FROM user_accounts
GROUP BY user_id
HAVING COUNT(DISTINCT email) > 1;
-- Uniqueness check
SELECT email, COUNT(*)
FROM users
GROUP BY email
HAVING COUNT(*) > 1;Note
Data quality bukan hanya testing tapi juga monitoring. Implement data quality checks di pipeline dan monitor secara持续. Data quality issues yang tidak terdeteksi bisa menyebabkan masalah besar di production.
Backend Integration Testing:
├── API Integration:
│ ├── Request/Response validation
│ ├── Status codes
│ └── Error handling
├── Database Integration:
│ ├── CRUD operations
│ ├── Transactions
│ └── Concurrency
├── Message Queue Integration:
│ ├── Message publishing
│ ├── Message consumption
│ └── Error handling
└── External Service Integration:
├── Third-party APIs
├── Payment gateways
└── Email servicesbackend_quality:
database:
- schema_testing
- data_integrity
- query_performance
- migration_testing
data_quality:
- accuracy_checks
- completeness_checks
- consistency_checks
- uniqueness_checks
integration:
- api_testing
- database_testing
- message_queue
- external_servicesTip
Gunakan test database yang terisolasi untuk testing. Jangan test langsung di production database. Gunakan Docker untuk spinning up test database yang reproducible.
Pada episode 7 ini, kalian telah mempelajari backend & data quality.
Inti yang harus dibawa pulang:
Di episode 8 selanjutnya, kita akan membahas shift-left testing — bagaimana mengimplementasikan quality di requirement & design phase. Sampai jumpa di episode 8!