Dampak Desain Program
Diperkenalkan| English | Makna |
|---|---|
| modular/ˈmɒdjʊlə/ | modular |
Dua desain rapi dapat melaporkan rata-rata berbeda
- Catatan fiktif berisi skor 80, absen dan 100. Memperlakukan ketiadaan sebagai nol menghasilkan
(80 + 0 + 100) / 3 = 60; mengabaikan hasil yang absen menghasilkan(80 + 100) / 2 = 90. - Metode terpisah dapat menghitung kedua hasil dengan benar. Organisasi tidak memilih kebijakan pelaporan: tetapkan apa artinya ketiadaan, siapa yang memutuskan, dan penyebut mana yang harus ditampilkan laporan sebelum menggunakan hasilnya.
Skor adalah 80, tidak ada, dan 100. Di bawah kebijakan skor yang tersedia, berapa rata-ratanya?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Jumlah skor yang hadir adalah 180 dan jumlah yang hadir adalah 2, sehingga 180/2 = 90.
Ubah persyaratan menjadi kontrak
- Tentukan apakah ketiadaan berarti tugas penilaian yang belum dilakukan, tugas yang belum ditugaskan, atau data yang belum dimasukkan. Kasus-kasus ini tidak perlu berbagi aturan; contoh fiktif menunjukkan konsekuensi dan tidak menetapkan kebijakan nilai sekolah.
- Nyatakan input yang diterima, perlakuan terhadap nilai yang hilang, dan hasilnya. Jika aturannya "rata-rata skor yang tersedia", catatan yang sepenuhnya hilang tidak memiliki rata-rata; laporkan kasus tersebut secara eksplisit alih-alih menciptakan nol atau membagi dengan nol.
Pemisahan tanggung jawab untuk pengecekan
- Desain modular memisahkan
readScores,averageAvailabledanprintReport. Metode rata-rata dapat dicek dengan nilai yang diketahui tanpa membaca file atau menangkap output yang diformat. - Pemisahan membantu ketika antarmuka tetap jelas. Perubahan terhadap arti ketiadaan masih mungkin memerlukan perubahan dalam perhitungan, pelaporan, dan pengecekan; metode kecil dan nama yang baik saja tidak mencegah ketergantungan tersebut.
Periksa kasus biasa dan batas
- Untuk kebijakan skor yang tersedia, periksa [80, tidak hadir, 100] menghasilkan 90, satu skor 80 menghasilkan 80, dan [tidak hadir, tidak hadir] menghasilkan hasil "tidak ada hasil" yang disepakati. Jangan hanya memeriksa apakah program berjalan.
- Perhitungan di bawah ini menggunakan
nulluntuk nilai yang hilang. Ini mengembalikan rata-rata double dan menolak kasus semua-missing. Ini mengasumsikan array skor biasa yang bukan null; validasi input dan pelaporan adalah tanggung jawab terpisah.
public class AverageAvailable {
public static double averageAvailable(Integer[] scores) {
double total = 0;
int present = 0;
for (Integer score : scores) {
if (score != null) {
total += score;
present++;
}
}
if (present == 0) {
throw new IllegalArgumentException("No available scores");
}
return total / present;
}
}
Desain modular (potongan independen, bernama dengan baik) terutama lebih mudah untuk...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Modularitas membuat perubahan lebih aman dan potongan dapat digunakan kembali.
Ketika beberapa pemanggil menggunakan satu method yang sama, memperbaiki method tersebut dapat menguntungkan semua pemanggil tanpa mengedit salinan duplikat.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Benar: pemanggil menggunakan kembali implementasi. Kontraknya dan efek perubahan tersebut tetap perlu ditinjau.
Bias dalam data atau logika program dapat menghasilkan hasil yang tidak adil pada skala besar.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Pilihan desain memengaruhi orang sungguhan — pertimbangkan siapa yang akan terdampak.
Untuk memeriksa perhitungan rata-rata secara independen dari input dan output yang dicetak, desain mana yang paling mengisolasi tanggung jawab itu?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Memisahkan perhitungan dari input dan output memungkinkan pengecekan skor yang diketahui tanpa operasi lainnya. Memiliki metode-metode kecil saja tidak menjamin kebenaran.
Desain program hanyalah kosmetik semata dan tidak memengaruhi seberapa aman kode dapat berubah.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Desain menentukan seberapa aman program dapat dimodifikasi.
Metode averageAvailable yang ditampilkan mengembalikan nol untuk array yang seluruhnya kosong.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Salah: hal ini menolak kasus tersebut dengan IllegalArgumentException karena tidak ada skor yang tersedia yang mendefinisikan rata-rata.
Konsekuensi Pelaporan kepada pengguna yang terdampak
- Laporan 90 harus menyatakan bahwa nilainya rata-rata dari dua skor yang tersedia dari tiga rekaman, dengan satu hasil yang tidak ada diabaikan. Melaporkan hanya 90 menyembunyikan informasi yang dibutuhkan pembaca untuk membandingkan hasil.
- Tinjau siapa saja yang mungkin terdampak oleh data dan kebijakan. Perhitungan yang konsisten masih bisa memperlakukan berbagai jenis ketidakhadiran secara tidak tepat; uji persyaratan yang disepakati dan buat hasilnya dapat dipahami oleh pengguna.
Modularitas membuat kebijakan lebih mudah diperiksa dan diuji; hal itu tidak membuat kebijakan tersebut adil atau sesuai. Rata-rata 60 dan 90 menggunakan penyebut yang berbeda. Pilih dan ungkapkan aturannya daripada diam-diam memilih mana pun hasil yang terlihat lebih baik.
Desain yang baik atau buruk?
Pilihan desain memiliki konsekuensi nyata. Urutkan setiap hasil.
Membawa perubahan kebijakan ke dalam desain
- Jika persyaratan resmi berubah untuk menghitung tugas yang belum dilakukan sebagai nol, perbarui penyebut, contoh relevan, pemeriksaan, dan wording laporan. Menggunakan kembali metode hanya berguna jika kontraknya sesuai dengan tugas baru.
- Tinjau keterujian, kebenaran, dan pemahaman pengguna secara terpisah. Batas yang jelas mengurangi beberapa risiko perubahan, tetapi pemanggil dan asumsi bersama harus tetap diperiksa ketika kontrak metode berubah.
Desain program mempengaruhi pemeliharaan dan manusia. Pisahkan tanggung jawab agar perilaku dapat diperiksa, tentukan kebijakan data yang hilang, uji kasus batasnya dan ungkapkan penyebutnya. Aritmatika yang benar dan struktur yang rapi tidak sendiri establishes kebijakan yang sesuai.
Match the change to the issue it addresses.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
A modular structure enables checking but cannot choose the right policy by itself.