Pengalaman pengembangan yang terakumulasi pada proyek-proyek besar dan kompleks diwujudkan dalam alat-alat yang bermanfaat dan praktik-praktik rekayasa, yang perlu memperkaya proses pengembangan, memikirkan kembali semuanya lagi. Itu adalah pengakuan atas nilai pengalaman yang diperoleh sebagai artefak, keinginan untuk berkembang, yang membuat kami memahami kebutuhan untuk mengimplementasikan alat dan praktik dalam proses saat ini. Dan kami meluncurkan tinjauan radikal dari pendekatan untuk merancang solusi dan proses pengembangan secara keseluruhan. Tidak masuk akal untuk menggambarkan keterbatasan dan kekurangan khas dari pendekatan "klasik" untuk pengembangan tim di dunia 1C. Banyak yang telah dikatakan tentang topik ini. Saya hanya akan menjelaskan pola-pola yang memungkinkan kita untuk membuat kekurangan ini kecil dan hampir tidak menakutkan.
Jadi berkenalan,
stand pengembangan terintegrasi!Prinsip umum arsitektur
Merancang arsitektur stan, kami mencoba untuk mencakup seluruh siklus hidup dari solusi yang diterapkan pada proyek, menerapkan pengalaman yang diperoleh, menstandarisasi proses, dan mengotomatisasi rutinitas. Pada saat yang sama, perlu untuk meletakkan potensi pengembangan, untuk mempertahankan kemampuan untuk skala dan kesederhanaan maksimum, dalam hal layanan, pengembangan dan pengalaman pengguna. Alat dan teknik yang telah terbukti efektif dalam praktik harus ditambahkan ke proses. Dan semua sia-sia, mengganggu pekerjaan harus dihilangkan.
Prosesnya
Siklus hidup dari solusi apa pun tetap tidak berubah tergantung pada skala dan kompleksitas proyek. Ini termasuk: analisis, desain, pengembangan, pengujian, implementasi, pemeliharaan, dekomisioning. Untuk mendapatkan efisiensi maksimum, setiap proses ini harus diverifikasi dan dikoordinasikan dengan proses sebelumnya dan selanjutnya, digabungkan menjadi semacam conveyor otomatis, yang dapat direplikasi untuk jumlah proyek yang tidak terbatas. Tugas itu diselesaikan dengan implementasi sistem dalam bentuk layanan-layanan microser yang terhubung melalui API yang diekspor dalam wadah yang terisolasi, yang dapat digunakan baik dalam layanan cloud maupun dalam jaringan lokal perusahaan.
Seperti inilah tumpukan kami yang mengimplementasikan proses ini:

Kami mencoba meminimalkan penggunaan layanan berbayar dengan kode sumber tertutup, yang secara positif memengaruhi biaya kepemilikan. Hampir semua layanan bersifat open source dan dijalankan di Linux.
Proses ini dirancang agar kami mendapatkan hasil maksimal dari setiap anggota tim pengembangan, dan standardisasi dan otomasi menghilangkan kompleksitas dan rutinitas yang tidak perlu.
Desain (Layanan Desain Aplikasi)
Salah satu tahap paling penting pada awal proyek adalah desain solusi masa depan berdasarkan analisis persyaratan. Tugas utama adalah untuk mendeskripsikan arsitektur solusi masa depan sejelas mungkin, jelas dan cepat, dalam hal dimengerti oleh pengembang / insinyur dan konsultan. Jelaskan metadata, algoritme proses bisnis yang diterapkan. Pada saat yang sama, saya ingin memaksimalkan penggunaan template yang siap pakai dan cepat disesuaikan untuk kondisi tertentu yang dapat disesuaikan dengan data input dan mendapatkan dokumentasi proyek pada output.
Kami telah mengimplementasikan konfigurasi "1C: DSS" sebagai antarmuka tunggal untuk desain solusi yang diterapkan, secara signifikan mengolah kembali konsep yang menggambarkan proses dan fungsi bisnis, serta merancang TP (FDR). Mereka juga mengotomatiskan proses pembuatan dokumentasi melalui integrasi dengan fungsi 1C: DO dan layanan microser untuk menghasilkan dokumen dalam format docx.
"1C: DPR". Mengedit informasi proyek:

"1C: DPR". Laporan proses:

"1C: DPR". Mengedit metadata objek:

"1C: DPR". Mengedit diagram proses bisnis:

Omong-omong, kita dapat memvisualisasikan hubungan antara proses bisnis dan objek dalam sistem, membuat daftar perbaikan berdasarkan persyaratan terdaftar dan mendapatkan dokumentasi proyek secara otomatis, yang menyederhanakan proses manajemen perubahan. Jadi, untuk merencanakan proses pengembangan secara rinci, untuk melihat kompleksitas, keterhubungan tugas, untuk lebih akurat menentukan waktu dan prosedur untuk pelaksanaannya.
Tentu saja, tidak dapat dikatakan bahwa proses desain telah berubah secara dramatis, tetapi penyatuan pendekatan organisasi dan otomatisasi banyak fungsi sudah berkontribusi pada kualitas proyek.
Pengembangan (Layanan Integrasi, Inspeksi dan Pengujian Berkesinambungan)
Kami mencoba untuk fokus pada kemungkinan kontrol kualitas yang komprehensif, berkelanjutan, otomatis dari kode yang dikembangkan untuk menjamin kepatuhan dengan standar yang ditetapkan dalam CROC. Selain itu, bahkan jika kami melibatkan tim pengembangan pihak ketiga, metode, alat, dan standar pengembangan yang mungkin berbeda secara signifikan dari yang diadopsi oleh kami.
Di stand, setiap pengembang berkomitmen secara otomatis memulai prosedur untuk mem-parsing konfigurasi ke dalam direktori dan struktur file melalui layanan Gitsync. Perubahan yang dihasilkan diindeks dan dimasukkan ke dalam repositori Git. Dalam kasus kami, ini adalah layanan Gitlab. Pesan komit secara otomatis dihasilkan dari teks komentar yang dimasukkan ketika perubahan diposting ke repositori konfigurasi, dan penulis komit dalam sistem kontrol versi dipetakan ke pengguna repositori konfigurasi. Selama parsing dari teks komentar, kita bisa mendapatkan informasi tentang tugas pengembangan dan biaya tenaga kerja, meneruskannya ke sistem pelacakan tugas, misalnya, Jira. Ini memberikan gambaran komprehensif tentang sejarah pembangunan. Sebagai contoh, kami dapat menemukan penulis dengan sebaris kode, dan komentar cerdas tentang komit memungkinkan Anda untuk secara otomatis mengontrol status tugas dan mengevaluasi kode terkait dengan tugas-tugas langsung dalam tugas itu sendiri.
Gitlab Sekarang dimungkinkan untuk mengomentari setiap baris kode yang ditempatkan oleh komit:

Gitlab Lakukan "Tinjauan Kode" dengan penyorotan sintaks:

Gitlab Dapatkan gambaran yang jelas tentang perubahan kode di komit baru:

Setelah setiap komit, prosedur untuk inspeksi kode statis oleh layanan SonarQube secara otomatis dimulai di repositori. Kode komit BSL diperiksa untuk kepatuhan dengan seperangkat aturan (profil kualitas) yang menggambarkan standar pengembangan kode. Prosedur ini dilakukan baik untuk kode konfigurasi yang sedang dikembangkan, dan untuk mekanisme eksternal: ekstensi, laporan dan proses eksternal, dan, pada prinsipnya, kode proyek lainnya, bahkan dalam bahasa lain.
SonarQube:

Setiap cek memperbarui informasi metrik kualitas basis kode yang dilacak, seperti:
- hutang teknis - total tenaga kerja yang diperlukan untuk memperbaiki kesalahan yang diidentifikasi;
- ambang batas kualitas - indikator maksimum kesalahan, kerentanan dan kekurangan kode lainnya yang diizinkan, setelah mencapai yang mana, pelepasan rilis dianggap tidak mungkin;
- duplikasi kode - jumlah baris kode yang diulang berkali-kali dalam kerangka konfigurasi yang dikembangkan;
- kompleksitas siklomatik dan kognitif - algoritma dengan sejumlah besar cabang yang menyulitkan dukungan dan penyempurnaan kode.
Metrik yang dikumpulkan sebagai hasil dari verifikasi memberikan representasi visual dari keadaan saat ini dari basis kode proyek, memungkinkan menilai kualitas, mengidentifikasi risiko, dan dengan cepat memperbaiki kesalahan.
Profil kualitas dapat diperluas dengan set aturannya sendiri melalui XPath, dan juga karena dirilisnya aturan baru sebagai bagian dari implementasi sendiri dari plugin 1C. Ini memungkinkan Anda untuk secara fleksibel mengelola persyaratan kualitas, berdasarkan realitas solusi tertentu.
Mulai otomatis proses parsing konfigurasi, inspeksi kode, pengujian otomatis, dll. Meluncurkan Layanan Integrasi Berkelanjutan (Layanan Jenkins). Jumlah dan sifat jalur perakitan tersebut dapat diubah sesuai dengan spesifikasi proyek.
Meskipun kompleksitas relatif dari proses yang dijelaskan, semua mekanisme konveyor yang melakukan rutinitas disembunyikan di layanan cloud. Dan pengembang berurusan dengan antarmuka konfigurator yang sudah dikenal, dan juga dapat mengembangkan keterampilannya menggunakan alat yang lebih canggih. Misalnya, git, repositori untuk mekanisme eksternal bersama dengan editor kode pihak ketiga dan SonarLint, SourceTree, dll.

Dalam kasus umum, pengembang menghubungkan basis informasi ke layanan penyimpanan konfigurasi 1C, menulis kode dan menempatkannya dalam layanan ini, sehingga meluncurkan proses yang disembunyikan darinya di stand. Jika, sebagai akibat dari pengecekan komit, kekurangan diidentifikasi dalam kode, pengembang menerima pemberitahuan email (atau pesan chatbot) dengan tautan ke deskripsi kesalahan dan rekomendasi untuk koreksi dan penilaian sementara biaya tenaga kerja di antarmuka layanan SonarQube. Setelah memperbaiki kesalahan, komit baru terjadi dan proses berulang, tugas yang diedit secara otomatis menutup ... utang teknis berkurang. Dengan logika yang sama, proses pengujian otomatis dibangun, di mana setiap komit memulai peluncuran penyebaran lingkungan pengujian, menghubungkan tes yang diperlukan dari perpustakaan pengujian. Dan setelah dijalankan, informasi tentang kesalahan selama pengujian, serta tentang cakupan kode dengan pengujian, dikumpulkan.
Sulit untuk melebih-lebihkan efek verifikasi kode yang berkelanjutan dan komprehensif, diikuti dengan pengujian otomatis atas fungsionalitas yang dikembangkan. Hal ini memungkinkan Anda untuk menyingkirkan konsekuensi jangka panjang, membuat tahapan pengembangan transparan, dan ditambah dengan proses yang dibangun dengan benar, secara obyektif mengevaluasi kualifikasi pengembang, yang menghilangkan risiko ketergantungan pada kontraktor. Memperkirakan parameter basis kode saat ini, kami dapat dengan cepat mengidentifikasi dan mengurangi risiko yang muncul, memperbaiki kekurangan desain, dan menanggapi perubahan persyaratan secara tepat waktu.
Organisasi modular arsitektur dudukan memungkinkan Anda untuk menanamkan modul baru dalam proses, mereplikasi solusi untuk sejumlah proyek yang diperlukan. Secara skematis, tampilannya seperti ini:

Pengujian (layanan pengujian berkelanjutan)
Saya sudah berbicara tentang layanan pengujian berkelanjutan, yang terintegrasi ke dalam pipa proses pengembangan. Saat ini, uji coba uji asap dan uji unit telah dilaksanakan di stand. Fungsi autotests diimplementasikan menggunakan kerangka kerja xUnitFor1C.
Peluncuran proses pengujian, serta inspeksi kode, terkait dengan acara komit dalam repositori proyek. Untuk tes unit, itu berarti mengembangkan tes secara paralel dengan mengembangkan fungsionalitas. Segera sebelum implementasinya, konfigurasi terbaru secara otomatis digunakan untuk basis informasi pengujian yang disiapkan. Kemudian klien diluncurkan, yang menjalankan skrip uji untuk fungsi yang sudah diterapkan. Integrasi yang ketat dari layanan pengujian otomatis dengan plugin BSL SonarQube memungkinkan Anda untuk menghitung parameter seperti cakupan kode dengan tes. Hasil uji coba adalah laporan yang diunggah ke sistem analisis dan visualisasi uji ReportPortal. Layanan ini adalah portal laporan di mana data tentang uji berjalan (statistik dan hasil) dikumpulkan, pelatihan dasar sistem tentang kategorisasi jatuh dilakukan, dan penentuan otomatis lebih lanjut dari penyebabnya. Semua parameter uji coba tersedia dalam antarmuka web yang nyaman dengan berbagai papan untuk grafik, bagan (widget). Untuk memperluas fungsi portal, Anda dapat menggunakan ekstensi Anda sendiri.
Layanan pengujian otomatis adalah langkah lain yang mengurangi risiko masuk ke kode rilis yang merusak fungsi yang sebelumnya diterapkan atau berfungsi dengan kesalahan.
LaporanPortal. Dasbor:


LaporanPortal. Uji coba gagal:

LaporanPortal. Jenis cacat:

LaporanPortal. Jenis cacat pengeditan:

Pengembangan
Menilai hasil dari pekerjaan yang dilakukan, kita melihat bahwa dari rencana yang sudah dilaksanakan, ide mana yang sudah berhasil, yang belum diimplementasikan.
Dari rencana untuk waktu dekat, pengembangan stan adalah penciptaan portal manajemen layanan stan. Antarmuka web portal akan memungkinkan Anda untuk bekerja dengan aplikasi untuk menghubungkan proyek ke stand, dengan kalkulator biaya layanan, dengan penyebaran otomatisnya atas permintaan proyek. Akibatnya, manajer dapat segera mendapatkan perhitungan biaya layanan yang dipilih dan memperkirakan biaya, menentukan pengembang untuk proyek tersebut.
Kami berencana untuk mengintegrasikan portal dengan solusi cloud untuk mengoperasikan sistem 1C. Ini akan membantu untuk menyebarkan solusi standar yang direplikasi dengan cepat bersamaan dengan layanan pengembangan yang diterapkan di stand untuk migrasi sistem pelanggan yang lebih efisien ke cloud CROC.
Kami juga berencana untuk mengintegrasikan portal manajemen dengan layanan manajemen konfigurasi otomatis (penyebaran, konfigurasi, penghapusan). Ini akan mengurangi waktu penyebaran, menyederhanakan pengaturan dan pemeliharaan sistem. Dan untuk meningkatkan tingkat keamanan, kami akan memperkenalkan layanan otentikasi pass-through untuk semua layanan stand untuk menggunakan akun yang sama di semua layanan tersebut.
Jika kami mempertimbangkan seluruh proses dari sudut pandang sejarah siklus penuh pengembangan solusi, maka pipa yang dibuat akan memungkinkan kami untuk mengumpulkan dan mengumpulkan sejumlah besar berbagai metrik baik oleh artefak proyek dan oleh spesialis yang mengambil bagian di dalamnya. Retrospektif yang terperinci semacam itu akan berkontribusi pada akumulasi dan penggunaan kembali pengalaman dalam memecahkan masalah yang kompleks, untuk membentuk tim pengembang yang sukses untuk pekerjaan yang lebih efisien dan terkoordinasi.UPD Atas permintaan komentar tambahkan daftar produk sumber terbuka yang kami gunakan, dengan tautan.