Code Monkey home page Code Monkey logo

dicoding-android-intermediate's Introduction

Kriteria Submission

Fitur yang harus ada pada aplikasi.

  1. Mempertahankan Fitur dari Submission Sebelumnya
    Syarat yang harus dipenuhi sebagai berikut.

    • Pastikan berbagai fitur yang ada dalam submission sebelumnya berjalan dengan baik.

  2. Menampilkan Maps
    Syarat yang harus dipenuhi sebagai berikut.

    • Menampilkan satu halaman baru berisi peta yang menampilkan semua cerita yang memiliki lokasi dengan benar. Bisa berupa marker maupun icon berupa gambar. Data story yang memiliki lokasi latitude dan longitude dapat diambil melalui parameter location seperti berikut

  3. Paging List
    Syarat yang harus dipenuhi sebagai berikut.

    • Menampilkan list story dengan menggunakan Paging 3 dengan benar.

  4. Membuat Testing
    Syarat yang harus dipenuhi sebagai berikut.

    • Menerapkan unit test pada fungsi yang ada di setiap ViewModel.

    • Tuliskan skenario test pada berkas tersendiri dengan nama skenario-pengujian.txt di dalam root folder project. Untuk format penulisan skenario pengujian, Anda bisa melihat contoh di modul Latihan Unit Testing LiveData.
      dos:4250fd6958c66f7c86ba4ef749dab58b20220220214247.jpeg

Berikut kerangka tampilan yang bisa Anda gunakan sebagai referensi.

dos:2979e516a20f11ebf05f0d735a5b288120220221083443.jpeg


Saran Submission

Submission Anda akan dinilai oleh reviewer dengan skala 1-5 berdasarkan dari parameter yang ada.

Anda dapat menerapkan beberapa saran di bawah ini untuk mendapatkan nilai tinggi.

  • Menuliskan kode dengan bersih.
    • Bersihkan comment dan kode yang tidak digunakan.
    • Indentasi yang sesuai.
    • Menghapus import yang tidak digunakan.
  • Menambahkan informasi selama proses interaksi dengan API:
    • Loading ketika memuat data
    • Informasi error ketika gagal
    • Pesan informasi ketika tidak ada data
  • Menggunakan custom map style tersendiri pada Google Maps. 
  • Menggunakan Paging 3 dengan menggunakan RemoteMediator.
  • Menambahkan input lokasi saat ini dari GPS ketika tambah cerita.
  • Menerapkan Android Architecture Component (minimal ViewModel dan LiveData) dengan benar.
  • Menambahkan test case untuk skenario pengujian, seperti:
    • data kosong,
    • data gagal dimuat, atau
    • skenario sejenisnya.
  • Menerapkan integration test pada halaman list story/daftar cerita. (Tandai dengan menggunakan anotasi @MediumTest).

  • Menerapkan end-to-end test dan idling resources untuk memastikan fitur-fitur yang ada berjalan dengan semestinya. (Tandai dengan menggunakan anotasi @LargeTest).

Detail penilaian submission.

  • Bintang 1 : Semua ketentuan terpenuhi, namun penulisan kode masih perlu banyak diperbaiki atau terindikasi melakukan plagiat.
  • Bintang 2 : Semua ketentuan terpenuhi, tetapi penulisan kode masih perlu diperbaiki.
  • Bintang 3 : Semua ketentuan terpenuhi, tetapi hanya mengikuti seperti apa yang ada pada modul.
  • Bintang 4 : Semua ketentuan terpenuhi dan menerapkan minimal empat (4) saran yang ada di atas.
  • Bintang 5 : Semua ketentuan terpenuhi dan menerapkan semua saran yang ada di atas.

Catatan:
Jika submission Anda ditolak, maka tidak ada penilaian. Kriteria penilaian bintang di atas hanya berlaku jika submission Anda lulus.

 

Submission yang Tidak Sesuai Kriteria

Submission akan ditolak jika tidak sesuai kriteria. Berikut poin-poin yang harus diperhatikan.

  • Tidak mempertahankan fitur-fitur dari submission sebelumnya.
  • Tidak ada tampilan daftar cerita dalam bentuk peta.
  • List story tidak dapat mengakses halaman berikutnya secara otomatis.
  • Tidak menerapkan Paging 3.
  • Paging 3 memuat data terus menerus.
  • Maps tampil tapi tidak ada marker.
  • Ada marker namun tidak ada data yang ditampilkan.
  • Tidak menuliskan skenario Testing.
  • Tidak menerapkan Unit Test dengan baik.
  • Seluruh fungsi yang ada pada kelas ViewModel belum dites.
  • Kelas yang akan diuji menggunakan mock object, seharusnya real object.
  • Penamaan test case tidak deskriptif sesuai skenario.
  • Project tidak bisa di-build.
  • Aplikasi force closed.
  • Mengirimkan file selain proyek Android Studio.
  • Mengirimkan proyek yang bukan karya sendiri.


Forum Diskusi

Jika mengalami kesulitan, Anda bisa menanyakan langsung ke forum diskusi. https://www.dicoding.com/academies/352/discussions.


Resources

  • Story API. API untuk berbagi story seputar Dicoding, mirip seperti post Instagram namun spesial untuk Dicoding. Dokumentasi dapat dilihat di https://story-api.dicoding.dev/v1
  • Simpan token yang didapatkan ketika login karena dibutuhkan untuk request lainnya.
  • Supaya tetap bersih, data yang dikirimkan akan otomatis hilang setelah satu jam.


Tips dan Trik

Ketika mengerjakan submission, mungkin Anda mengalami kendala. Oleh karena itu, kami mengumpulkan beberapa kendala yang sering ditemui siswa-siswa lain. Agar kendala tersebut tidak terulang kepada Anda, kami telah mengumpulkan tips untuk menanggulanginya.

Berikut adalah beberapa tips yang dapat Anda gunakan dalam pembuatan submission.

  1. Kesalahan pemanggilan fungsi (invocation) yang dites.
    Sebagai contoh, apabila Anda menguji kelas Repository atau bisa dikatakan Repository sebagai SUT(System Under Test), pastikan actual data yang diperiksa berasal dari pemanggilan fungsi di dalam Repository, bukan kelas lain seperti ApiService atau DAO. Ingat bahwa yang ingin kita uji adalah logika di dalam kelas Repository, bukan?
    1. Contoh salah
      // Di dalam kelas Repository 
      val actualStory = apiService.getStory()
    2. Contoh benar
      // Di dalam kelas Repository 
      val actualStory = storyRepository.getStory()

  2. Jangan mock kelas yang sedang diuji (SUT).
    Sebagai contoh, apabila Anda menguji kelas ViewModel, jangan mock kelas tersebut, gunakan object aslinya. Apabila kelas tersebut di-mock, pasti akan berhasil karena fungsi yang di-mock dan fungsi yang diperiksa sama, tidak ada pengujian logika sama sekali di sana. Ingat bahwa Mock hanya digunakan untuk dependency.
    1. Contoh salah
      // Di dalam kelas ViewModel
      @Mock
      private lateinit var viewModel: StoryViewModel 
      ...
      `when`(viewModel.getStory()).thenReturn(expectedStory)
      val actualStory = storyViewModel.getStory().getOrAwaitValue()
    2. Contoh benar
      // Di dalam kelas ViewModel
      private lateinit var storyViewModel: StoryViewModel
      @Mock private lateinit var storyRepository: StoryRepository
      ...
      storyViewModel = StoryViewModel(storyRepository) // di @Before
      ...
      `when`(storyRepository.getStory()).thenReturn(expectedStory)
      val actualStory = storyViewModel.getStory().getOrAwaitValue()


dicoding-android-intermediate's People

Contributors

im-o avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.