Sobes.tech
Middle

Kaip palaikai kokybę savo projektuose?

sobes.tech AI

Atsakymas iš AI

  • Naudojimas statiniams analizatoriams: Naudoju įrankius kaip Detekt ir ktlint, siekiant automatiškai surasti galimas klaidas, stiliaus pažeidimus ir code smells.
  • Kodo peržiūros: Dalyvauju tarpusavio kodo peržiūros procese su kolegomis. Tai padeda ankstyvoje stadijoje aptikti klaidas, pasidalinti žiniomis ir užtikrinti nuoseklumą.
  • Vienetų ir integracijos testai: Rašau testus pagrindiniams komponentams ir verslo logikai, kad įsitikinčiau jų teisingu veikimu ir išvengčiau regresijų keitimų metu.
  • DI (Dependency Injection): Naudoju DI (pvz., Dagger/Hilt, Koin), siekiant pagerinti testavimą, moduliškumą ir priklausomybių valdymą.
  • SOLID principai: Stengiuosi laikytis SOLID principų, kurdami lankstesnę, lengvai prižiūrimą ir plėtojimąsi leidžiančią architektūrą.
  • Nuolatinė integracija / nuolatinis diegimas (CI/CD): Nustatau CI/CD pipelines (Jenkins, GitLab CI, GitHub Actions), kad automatiškai vykdyti testus, statinę analizę ir surinkimą po kiekvieno įsipareigojimo.
  • Nuoseklus kodo stilius: Laikausi vienodo kodo stiliaus projekte, naudodamas formatavimo įrankius ir stiliaus vadovus (Kotlin Style Guide, Android Style Guide).
  • Aiškūs ir glausti pavadinimai: Naudoju suprantamus ir informatyvius pavadinimus kintamiesiems, funkcijoms ir klasėms.
  • Tinkama dokumentacija: Pridedu komentarus ten, kur tai būtina sudėtingai logikai ar neaiškiems sprendimams paaiškinti. KDoc viešajam API.
  • Architektūros modeliai: Taikau tinkamus architektūros šablonus (MVVM, MVI), kad struktūrizuočiau projektą ir pasidalinčiau atsakomybe.
  • Nepertraukiamos duomenų struktūros: Jei įmanoma, naudoju nepertraukiamas duomenų struktūras, siekiant sumažinti klaidų, susijusių su būsenos keitimu, tikimybę.
// Pavyzdys vieneto testo su Mockito ir JUnit 4
@Test
fun testDataLoadingSuccess() {
    // Paruošimas
    val expectedData = listOf("item1", "item2")
    `when`(mockRepository.getData()).thenReturn(Single.just(expectedData))

    // Veiksmas
    viewModel.loadData()

    // Patikrinimas
    verify(mockRepository).getData()
    assertEquals(expectedData, viewModel.data.value)
    assertEquals(false, viewModel.isLoading.value)
}