Gulir untuk membalik halaman
Computer Science Principles · AP Computer Science Principles
kolaborasi, desain, dan debugging
Program tidak ditulis dalam sekali jalan. Ia diselidiki, didesain, dibangun secara kasar, diuji, dan ditinjau ulang, putaran demi putaran, sampai melakukan apa yang dibutuhkan penggunanya.
Gambar menjalankan satu proses pengembangan yang umum: menyelidiki dan merefleksi, designing, prototyping and testing. Bola merah adalah pekerjaan yang sedang ditangani; di setiap stasiun ia dapat mengirim tim kembali ke fase sebelumnya. Setiap putaran membuat program (biru) lebih lengkap: versi 3 setelah 3 putaran.
Sebuah proses dapat teratur dan disengaja, mengikuti fase menurut rencana, atau bersifat eksploratif, mencoba gagasan dan mempertahankan yang berhasil. Ada banyak proses; keempat fase ini umum pada kebanyakan di antaranya.
Bab ini adalah Gagasan Besar 1 AP Computer Science Principles, Pengembangan Kreatif: 10–13% dari ujian pilihan ganda. Bab ini mencakup bekerja sama (1.1), apa yang dilakukan program serta masukan dan keluarannya (1.2), bagaimana program didesain, dibangun, dan didokumentasikan (1.3), dan bagaimana kesalahan ditemukan dan diperbaiki (1.4). Bab ini juga merupakan pekerjaan tugas kinerja Create, halaman terakhir bab ini.
dan sudut pandang yang memperbaikinya
Inovasi komputasi mencakup program sebagai bagian integral dari fungsinya.
Ia dapat fisik, seperti mobil swakemudi; perangkat lunak komputasi nonfisik, seperti perangkat lunak penyunting gambar; atau konsep komputasi nonfisik, seperti e-commerce.
Inovasi diperbaiki melalui kolaborasi. Kolaborasi yang efektif menghasilkan inovasi yang mencerminkan keberagaman bakat dan sudut pandang orang-orang yang mendesainnya, dan sudut pandang yang beragam membantu menghindari bias: tim yang semua anggotanya berbagi satu pengalaman cenderung membangun untuk pengalaman itu.
Gambar adalah tim hipotetis yang mendaftar kasus yang harus ditangani aplikasinya. Pengembang A sendirian memikirkan 5 dari 12. Tiga pengembang bersama-sama memikirkan 10. Sisanya datang dari meminta pendapat pengguna: 12 dari 12.
Itulah sebabnya konsultasi dan komunikasi dengan pengguna penting. Informasi yang dikumpulkan dari calon pengguna membantu pengembang memahami tujuan program dari berbagai sudut pandang, dan membangun program yang sepenuhnya memasukkannya.
pemrograman berpasangan, alat daring, keterampilan antarpribadi
Kelompok mengembangkan inovasi dengan model kolaborasi yang umum. Salah satunya adalah pemrograman berpasangan.
Dua programmer berbagi satu komputer. Driver (merah) mengetik kode; navigator (biru) meninjau setiap baris saat ditulis, menangkap kesalahan, dan berpikir ke depan. Di tengah gambar mereka bertukar: peran mengikuti papan ketik, bukan orangnya. Program yang mereka tulis adalah yang ada di halaman berikutnya.
Alat daring mendukung kolaborasi dengan memungkinkan programmer berbagi gagasan dan dokumen serta memberi umpan balik atasnya, entah mereka bekerja di ruangan yang sama atau tidak.
Tim yang efektif melatih keterampilan antarpribadi, termasuk tetapi tidak terbatas pada:
apa yang dilakukan program, dan bagaimana
Program adalah kumpulan pernyataan program yang melakukan tugas tertentu ketika dijalankan oleh komputer. Program sering disebut sebagai perangkat lunak.
total ← 0 REPEAT 3 TIMES { n ← INPUT() total ← total + n } DISPLAY(total / 3) Segmen kode adalah kumpulan pernyataan program yang menjadi bagian dari sebuah program: di sini, perulangan pada baris 2–6 (biru pada gambar).
Program dapat dijelaskan secara garis besar, menurut apa yang dilakukannya: “ia menampilkan rata-rata tiga bilangan yang diketik pengguna.” Atau lebih rinci, menurut apa yang dilakukannya dan bagaimana pernyataannya melakukannya: “ia mengatur total menjadi 0; tiga kali, ia membaca sebuah bilangan ke dalam n dan menambahkannya ke total; lalu ia menampilkan total / 3.”
Program perlu bekerja untuk berbagai masukan dan situasi. Gambar menjalankannya dua kali:
| masukan | total setelah perulangan | ditampilkan |
|---|---|---|
| 4, 8, 9 | 21 | 7 |
| −2, 0, 5 | 3 | 1 |
Perilaku-nya adalah bagaimana ia berfungsi selama eksekusi, sering dijelaskan dari bagaimana pengguna berinteraksi dengannya: pengguna mengetik tiga bilangan, dan satu bilangan muncul.
Setiap inovasi memiliki tujuan: menyelesaikan masalah, atau mengejar minat melalui ekspresi kreatif. Pengembang yang memahami tujuannya lebih mampu mengembangkan programnya.
data masuk, data keluar, dalam banyak bentuk
Masukan program adalah data yang dikirim ke komputer untuk diproses oleh program. Keluaran program adalah data apa pun yang dikirim dari program ke sebuah perangkat.
Keduanya hadir dalam berbagai bentuk: taktil (sentuhan, getaran), audio (kata yang diucapkan, suara), visual (gambar kamera, layar) atau teks. Gambar mengirim satu masukan dari setiap bentuk secara bergantian ke dalam program, dan satu keluaran dari setiap bentuk keluar darinya.
Masukan dapat datang dari pengguna atau dari program lain; keluaran teks di kanan bawah pergi ke program lain, yang baginya itu adalah masukan.
Masukan biasanya memengaruhi keluaran yang dihasilkan program. Dan keluaran biasanya berdasarkan masukan program atau keadaan sebelumnya: nilai yang telah disimpannya. Program ini menyimpan hitungan (biru) masukan yang telah diterimanya, sehingga sentuhan yang sama pada layar dapat menghasilkan keluaran berbeda pada kali kedua.
Dalam program rata-rata di halaman terakhir, tiga pemanggilan INPUT() adalah masukannya, dan DISPLAY mengirim keluarannya ke layar.
pernyataan dijalankan ketika dipicu
Peristiwa (event) terkait dengan sebuah aksi dan memberi data masukan ke program.
Peristiwa dihasilkan ketika sebuah tombol ditekan, mouse diklik, program dimulai, atau aksi terdefinisi lain yang memengaruhi alur eksekusi terjadi.
Dalam pemrograman berbasis peristiwa, pernyataan program dijalankan ketika dipicu, bukan melalui alur kendali sekuensial. Tidak ada yang berjalan baris demi baris dari atas: setiap peristiwa menjalankan prosedur yang menanganinya, dan program menunggu peristiwa berikutnya.
PROCEDURE onStart() { count ← 0 DISPLAY(count) } PROCEDURE onClick() { count ← count + 1 DISPLAY(count) } PROCEDURE onKeyPress() { count ← count - 1 DISPLAY(count) } Lembar referensi ujian tidak punya sintaks peristiwa, jadi di sini setiap penangan adalah sebuah prosedur dan lingkungan hipotetis memanggilnya ketika peristiwanya terjadi. Pada gambar program dimulai, tombol diklik tiga kali, sebuah tombol keyboard ditekan, dan tombol diklik sekali lagi. Nilai yang ditampilkan adalah 0, 1, 2, 3, 2, 3.
count milik seluruh program, sehingga keluaran setiap klik bergantung pada peristiwa sebelumnya.
iteratif dan inkremental
Proses pengembangan dapat teratur dan disengaja, atau bersifat eksploratif. Ada banyak; kebanyakan memakai fase menyelidiki dan merefleksi, mendesain, membuat prototipe dan menguji.
Proses yang iteratif memerlukan penyempurnaan dan revisi berdasarkan umpan balik, pengujian atau refleksi sepanjang proses. Ini mungkin mengharuskan kembali ke fase sebelumnya. Pada baris bawah seluruh program sudah ada sejak putaran pertama, secara kasar; setiap putaran umpan balik (merah) mengirimnya kembali, dan setiap bagian menjadi lebih lengkap.
Proses yang inkremental memecah masalah menjadi bagian-bagian lebih kecil dan memastikan setiap bagian berfungsi sebelum menambahkannya ke keseluruhan. Pada baris atas satu bagian dibangun dan diuji pada satu waktu, dan bergabung ke keseluruhan hanya ketika pengujiannya lolos.
Keduanya bukan lawan. Kebanyakan tim melakukan keduanya: mereka membangun bagian demi bagian, dan merevisi setiap bagian, serta keseluruhannya, seiring datangnya umpan balik.
kebutuhan, spesifikasi, storyboard, modul
Desain sebuah program dimulai dengan investigasi, untuk menentukan kebutuhan-nya.
Investigasi mengidentifikasi kendala program, serta kepedulian dan minat orang-orang yang akan memakainya. Ini dapat dilakukan dengan surveys, pengujian pengguna, interviews and pengamatan langsung.
Kebutuhan program menjelaskan bagaimana program berfungsi, dan dapat mencakup deskripsi interaksi pengguna yang harus disediakannya. Spesifikasi program mendefinisikan kebutuhannya. Untuk aplikasi hipotetis yang memesan ruang belajar perpustakaan: (1) pengguna memilih tanggal; (2) pengguna melihat ruangan yang kosong pada hari itu; (3) pengguna memesan satu dan mendapat kode.
Fase desain menguraikan bagaimana mencapai spesifikasi. Fase ini dapat mencakup:
Gambar menggambar dua di antaranya: sebuah storyboard antarmuka, satu layar per langkah, dengan ketukan pengguna membawa mereka dari layar ke layar; dan program yang diorganisasi menjadi modul, satu per kebutuhan.
dan mengakui kode dari orang lain
Dokumentasi program adalah deskripsi tertulis tentang fungsi sebuah segmen kode, peristiwa, prosedur atau program, dan tentang bagaimana ia dikembangkan.
Komentar adalah salah satu bentuk dokumentasi yang ditulis ke dalam program untuk dibaca manusia; komentar tidak memengaruhi cara program berjalan. Tidak semua lingkungan pemrograman mendukung komentar, dan lembar referensi ujian tidak memilikinya, jadi pada gambar dokumentasi setiap prosedur diletakkan di sampingnya.
PROCEDURE average(numList) { total ← 0 FOR EACH num IN numList { total ← total + num } RETURN(total / LENGTH(numList)) } PROCEDURE isEven(n) { RETURN(n MOD 2 = 0) } average([6, 9, 3, 10]) mengembalikan 7. Dokumentasi ditulis sepanjang pengembangan: kartu untuk average tumbuh bersama kodenya. Dokumentasi membantu mengembangkan dan memelihara program yang benar, sendirian atau dalam tim, karena pembaca berikutnya (sering kali penulisnya sendiri, nanti) dapat melihat untuk apa setiap bagian.
Penting untuk mengakui segmen kode apa pun yang dikembangkan secara kolaboratif atau oleh sumber lain. Pengakuan dapat berada dalam dokumentasi program, dan harus mencakup asal atau nama penulis aslinya. Pada gambar, isEven (biru) berasal dari sumber lain, dan kartunya menyatakan itu.
kapan masing-masing menampakkan diri
Tiga program, masing-masing dimaksudkan untuk menampilkan setiap nilai di [90, 75, 82]; masing-masing punya satu kesalahan.
Kesalahan sintaks adalah kesalahan dalam program di mana aturan bahasa pemrograman tidak dipatuhi. Pada program pertama, baris 5 kehilangan tanda kurung penutupnya. Program tidak berjalan sama sekali: tidak ada baris yang dijalankan, dan tidak ada yang ditampilkan.
Kesalahan run-time adalah kesalahan yang terjadi saat program dieksekusi; setiap bahasa pemrograman mendefinisikan kesalahan run-time-nya sendiri. Program kedua menambahkan 1 ke i sebelum menampilkan, sehingga yang tampil 75 and 82, lalu meminta scores[4]. Pada lembar referensi, indeks yang kurang dari 1 atau lebih besar dari panjang daftar adalah kesalahan, dan program berhenti.
Kesalahan logika adalah kesalahan dalam algoritma atau program yang membuatnya berperilaku salah atau tidak terduga. Program ketiga mengulang satu kali terlalu sedikit. Tidak ada yang menghentikannya: program berjalan sampai akhir, tetapi hanya menampilkan 2 dari 3 nilai. Hanya dengan membandingkan keluarannya dengan keluaran yang diharapkan, kesalahan itu terlihat.
scores ← [90, 75, 82] i ← 1 REPEAT LENGTH(scores) - 1 TIMES { DISPLAY(scores[i]) i ← i + 1 } Setelah diperbaiki, baris 3 menjadi REPEAT LENGTH(scores) TIMES.
bilangan di luar jangkauan
Kesalahan overflow terjadi ketika komputer mencoba menangani bilangan yang berada di luar rentang nilai yang ditentukan.
Banyak bahasa pemrograman menyimpan bilangan bulat dalam jumlah bit tetap, yang membatasi rentang nilai. Ambil bahasa hipotetis yang menyimpan bilangan cacah dalam 4 bit: yang terbesar yang dapat ditampungnya adalah 1111, yaitu 15.
Gambar menghitung naik dari 12. Setiap langkah membalik bit yang berubah. Pada 15, menambah 1 membutuhkan bit kelima (16 adalah 10000), dan penyimpanan hanya memiliki 4: sebuah overflow. Apa yang terjadi selanjutnya bergantung pada bahasanya: sebagian berhenti dengan kesalahan, yang lain menyimpan bit yang muat dan melanjutkan dengan nilai yang salah (di sini, 0).
Bahasa sebenarnya memakai lebih banyak bit, sehingga batasnya jauh lebih besar, tetapi tetap saja itu batas. Bahasa pada lembar referensi ujian berbeda: di sana, ukuran bilangan bulat hanya dibatasi oleh memori komputer.
masukan terdefinisi, keluaran yang diharapkan
Pengujian memakai masukan yang telah ditentukan untuk memastikan algoritma atau program menghasilkan keluaran yang diharapkan. Programmer memakai hasilnya untuk merevisinya.
Kebutuhan sebuah bioskop hipotetis: di bawah 13 tahun, atau 65 tahun ke atas, tiket berharga $8; semua orang lain membayar $12. Kebutuhan inilah yang memberi tahu penguji masukan mana yang dicoba dan apa yang diharapkan untuk tiap masukan.
PROCEDURE price(age) { IF(age < 13 OR age ≥ 64) { RETURN(8) } RETURN(12) } Masukan uji yang baik menunjukkan keluaran harapan yang berbeda-beda dan berada tepat di atau sedikit di luar nilai ekstrem (minimum dan maksimum) data masukan, tempat kesalahan banyak terjadi: di sini 12 dan 13 di kedua sisi satu batas, 64 dan 65 di kedua sisi batas lainnya, serta usia terkecil, 0.
| age (masukan) | diharapkan | aktual | |
|---|---|---|---|
| 0 | $8 | $8 | pass |
| 12 | $8 | $8 | pass |
| 13 | $12 | $12 | pass |
| 40 | $12 | $12 | pass |
| 64 | $12 | $8 | gagal |
| 65 | $8 | $8 | pass |
Uji pada 64 gagal: kode menulis age ≥ 64 padahal kebutuhan menghendaki age ≥ 65, sebuah kesalahan logika. Uji pada usia yang umum seperti 40 tidak akan pernah menemukannya.
menelusuri, memvisualisasikan, debugging, menampilkan
Cara-cara efektif untuk menemukan dan memperbaiki kesalahan: kasus uji, penelusuran manual, visualisasi, debugger, dan menambahkan pernyataan keluaran ekstra.
findMax seharusnya mengembalikan bilangan terbesar dalam sebuah daftar. Saat diuji pada [-3, -7, -2], hasilnya 0, bukan −2. Untuk mengetahui sebabnya, programmer menambahkan DISPLAY(max) di dalam perulangan (biru): sebuah pernyataan keluaran ekstra.
PROCEDURE findMax(numList) { max ← 0 FOR EACH num IN numList { IF(num > max) { max ← num } DISPLAY(max) } RETURN(max) } Penelusuran manual, satu baris untuk tiap elemen:
| num | num > max? | max sesudahnya | DISPLAY menampilkan |
|---|---|---|---|
| −3 | false | 0 | 0 |
| −7 | false | 0 | 0 |
| −2 | false | 0 | 0 |
max tidak pernah berubah: tidak ada elemen yang lebih besar dari 0. Debugger menunjukkan hal yang sama dengan menghentikan sementara program dan menampilkan variabelnya (sel-sel pada gambar, sebuah visualisasi keadaannya). Kesalahannya ada di baris 3: max dimulai dari 0, lebih besar daripada setiap elemen daftar yang semuanya negatif.
Perbaikannya adalah max ← numList[1]: mulai dari salah satu elemen daftar. Dijalankan lagi, keluaran ekstra menunjukkan −3, −3, −2, dan hasilnya −2. Setelah itu DISPLAY ekstra dihapus.
program buatanmu sendiri, dan pertanyaan tentangnya
Tugas kinerja Create adalah penerapan bab ini: sebuah program pilihanmu sendiri, dikembangkan dengan proses, dokumentasi, dan pengujian dari 1.1–1.4.
Kamu mengumpulkan tiga hal di AP Digital Portfolio: kode program, video program yang berjalan, dan Referensi Proyek Personal (PPR). Kamu mendapat setidaknya 9 jam pelajaran di kelas untuk mengerjakannya. Programmu harus memuat elemen tertentu, seperti daftar dan prosedur.
Pada hari ujian ada jawaban tertulis: 60 menit, 2 pertanyaan tentang kode di PPR-mu sendiri, yang bisa kamu lihat saat menjawab.
Tugas dan jawaban tertulis bersama-sama bernilai 30% dari skor AP; ujian pilihan ganda (70 soal dalam 120 menit) menyumbang 70% sisanya.
Jadi pertanyaan-pertanyaan bab ini kembali muncul tentang programmu sendiri: apa tujuan dan fungsinya, apa masukan dan keluarannya, apa yang kamu uji dan dengan masukan apa, serta kesalahan apa yang kamu temukan dan perbaiki.