Berapa peringkat AnTuTu? Dua kartu video kelas menengah, bukan satu kartu video kelas atas. ⇡ Performa, tes permainan

Saya tidak suka jika seseorang mencoba menggunakan contoh kode buatan tangan untuk mengevaluasi kemampuan penganalisis kode statis. Sekarang contoh spesifik Saya akan menunjukkan mengapa saya memiliki sikap negatif terhadap tes sintetis.

Belum lama ini, Bill Torpey menulis catatan di blognya “Even Mo “Static”, di mana dia menceritakan bagaimana, menurut pendapatnya, kinerja alat Cppcheck dan PVS-Studio saat menganalisis proyek itc-benchmarks tolok ukur analisis statis dari Toyota ITC.

Saya tidak suka bahwa setelah membaca artikel tersebut tampaknya alat analisa Cppcheck dan PVS-Studio memiliki kemampuan yang kurang lebih sama. Berdasarkan artikel tersebut, satu penganalisis berkinerja lebih baik di satu bidang, yang lain di bidang lain, tetapi secara umum kemampuan diagnostiknya serupa.

Saya kira tidak demikian. Pendapat saya adalah penganalisis PVS-Studio kami beberapa kali lebih kuat daripada Cppcheck. Dan secara umum, ini bukan “pendapat”, saya tahu itu!

Namun, karena dari luar tidak terlihat jelas bahwa PVS-Studio 10 kali lebih baik dari Cppcheck, maka kita harus mencoba memahami alasannya. Saya memutuskan untuk melihat tolok ukur itc yang sama dan mencari tahu mengapa PVS-Studio tidak bekerja dengan baik pada basis pengujian ini. dengan cara terbaik.

Semakin jauh aku memeriksanya, semakin aku merasa jengkel. Dan satu contoh benar-benar membuat saya kehilangan keseimbangan, dan saya akan menceritakannya kepada Anda sedikit lebih rendah. Kesimpulan saya begini: Saya tidak punya keluhan tentang Bill Torpey. Dia menulis artikel yang bagus dan jujur. Terima kasih Bill. Tapi saya punya keluhan tentang Toyota ITC. Pendapat pribadi saya: mereka basis tes- omong kosong. Ini, tentu saja, merupakan pernyataan besar, tetapi saya yakin saya memiliki kualifikasi dan pengalaman yang cukup untuk berbicara tentang penganalisis kode statis dan cara mengevaluasinya. Menurut pendapat saya, tolok ukur itc tidak dapat digunakan untuk menilai secara memadai kemampuan alat analisa tertentu.

Dan inilah ujian sebenarnya yang benar-benar membuat saya kehilangan keseimbangan.

Lalu apa yang terjadi, apakah PVS-Studio lebih lemah dari Cppcheck dalam contoh ini? Tidak, dia hanya lebih kuat!

Penganalisis PVS-Studio memahami bahwa kode ini ditulis dengan sengaja dan tidak ada kesalahan di sini.

Ada situasi ketika kode serupa ditulis khususnya untuk menyebabkan pengecualian dilempar saat melakukan dereferensi penunjuk nol. Ini dapat ditemukan dalam pengujian atau di area kode tertentu. Kami telah melihat kode serupa berkali-kali. Sebagai contoh, inilah tampilannya dalam proyek nyata:

Batal GpuChildThread::OnCrash() ( LOG(INFO)<< "GPU: Simulating GPU crash"; // Good bye, cruel world. volatile int* it_s_the_end_of_the_world_as_we_know_it = NULL; *it_s_the_end_of_the_world_as_we_know_it = 0xdead; }
Oleh karena itu, dalam penganalisis PVS-Studio, beberapa pengecualian diterapkan dalam diagnostik V522, agar tidak bersumpah pada kode tersebut. Penganalisa melihatnya null_pointer_001 bukanlah fungsi sebenarnya. Dalam kode sebenarnya, tidak ada kesalahan dalam fungsi ketika angka nol ditulis ke pointer dan segera direferensikan. Dan nama fungsinya memberi tahu penganalisis bahwa “null pointer” ada karena suatu alasan.

Untuk kasus seperti itu, pengecualian A6 diimplementasikan dalam diagnostik V522. Fungsi sintetis juga termasuk dalam hal ini null_pointer_001. Inilah betapa berbahayanya pengecualian A6:

Dereferensi suatu variabel ada pada fungsi yang namanya mengandung salah satu kata:

  • kesalahan
  • bawaan
  • menabrak
  • batal
  • tes
  • pelanggaran
  • melemparkan
  • pengecualian
Dalam hal ini, variabel diberi nilai 0 pada baris di atas.

Uji sintetik sepenuhnya memenuhi pengecualian ini. Pertama, nama fungsi memiliki kata “null” di dalamnya. Kedua, penetapan nol ke suatu variabel terjadi tepat pada baris sebelumnya. Pengecualian mendeteksi kode yang tidak valid. Dan kode tersebut sebenarnya tidak nyata, ini adalah pengujian sintetis.

Karena nuansa seperti inilah saya tidak menyukai tes sintetis!

Saya memiliki keluhan lain tentang tolok ukur itc. Misalnya, semuanya ada di file yang sama, kita dapat melihat tes ini:

Void null_pointer_006 () ( int *p; p = (int *)(intptr_t)rand(); *p = 1; /*Alat harus mendeteksi baris ini sebagai error*/ /*ERROR:NULL pointer dereference*/ )
Fungsi acak dapat mengembalikan 0, yang kemudian berubah menjadi NULL. Penganalisis PVS-Studio belum mengetahui apa yang dapat dikembalikannya acak dan karena itu tidak melihat sesuatu yang mencurigakan dalam kode ini.

Saya meminta rekan-rekan saya untuk mengajari penganalisa agar lebih memahami apa itu fungsi acak. Tidak ada tujuan lain, Anda harus mempertajam penganalisis dengan file agar kinerjanya lebih baik pada basis pengujian yang dimaksud. Ini adalah tindakan yang perlu, karena serangkaian tes serupa digunakan untuk mengevaluasi penganalisis.

Tapi jangan takut. Saya menyatakan bahwa kami akan terus mengerjakan diagnostik yang benar-benar bagus, dan tidak menyesuaikan alat analisa untuk pengujian. Mungkin kami akan sedikit memperbaiki PVS-Studio untuk benchmarknya, tetapi di latar belakang dan hanya di tempat-tempat yang setidaknya masuk akal.

Saya ingin pengembang memahami contoh itu dengan acak tidak benar-benar mengevaluasi apa pun. Ini adalah tes sintetis yang diambil begitu saja. Itu bukan cara program ditulis. Tidak ada kesalahan seperti itu.

Omong-omong, jika fungsinya acak akan mengembalikan bukan 0, tetapi 1400 tidak akan lebih baik. Meski begitu, penunjuk seperti itu tidak dapat direferensikan. Jadi dereferensi pointer nol adalah kasus khusus yang aneh dari kode yang sepenuhnya salah yang hanya dibuat dan tidak terjadi dalam program nyata.

Saya tahu masalah sebenarnya dari pemrograman. Misalnya, ada ratusan kesalahan ketik yang kami deteksi, katakanlah, menggunakan diagnostik V501. Menariknya, saya tidak melihat satu pun pengujian di itc-benchmark yang memeriksa apakah penganalisis dapat mendeteksi kesalahan ketik seperti "if (a.x == a.x)". Tidak ada satu tes pun!

Dengan demikian, tolok ukur itc mengabaikan kemampuan penganalisis untuk menemukan kesalahan ketik. Dan pembaca artikel kami tahu betapa umum kesalahan ini. Tapi menurut pendapat saya, ini berisi kasus uji bodoh yang tidak ditemukan di program nyata. Saya tidak dapat membayangkan bahwa dalam proyek yang sangat serius Anda dapat menemukan kode seperti ini yang mengarah ke array di luar batas:

Void overrun_st_014 () ( int buf; int indeks; indeks = rand(); buf = 1; /*Alat harus mendeteksi baris ini sebagai error*/ /*ERROR: buffer overrun */ sink = buf; )
Mungkin hal ini hanya dapat ditemukan pada pekerjaan laboratorium siswa.

Pada saat yang sama, saya tahu bahwa dalam proyek yang serius, mudah untuk menemukan kesalahan ketik seperti:

Return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1) && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
Kesalahan ini terdeteksi oleh penganalisa PVS-Studio

Berkat dimulainya penjualan prosesor AMDRyzen 5 lebih cepat dari jadwal (11 April), review pertama dari prosesor ini sudah muncul. Kami telah membicarakan secara singkat tentang kinerja prosesor 4-core Ryzen 5 1400 dalam pengujian sintetis dan game modern. Sekarang rekan Spanyol kami dari El Chapuzas Informatico telah menerbitkan ulasan tentang 6-core prosesor AMD ryzen 5 1600.

Prosesor ini memiliki enam inti fisik, yang masing-masing memiliki dua thread komputasi, sehingga menghasilkan total dua belas thread. Frekuensi dasar Kecepatan prosesornya adalah 3,2 GHz, dan dapat meningkat secara dinamis hingga 3,6 GHz. Total cache tingkat ketiga dari AMD Ryzen 5 1600 adalah 16 MB (8+8 MB), dan setiap inti memiliki masing-masing 512 kB cache tingkat kedua dan 64 dan 32 kB instruksi tingkat pertama dan cache data. Seperti prosesor Ryzen lainnya, chip ini ditempatkan dalam paket Socket AM4 dan memiliki TDP sebesar 64 W. Harga yang direkomendasikan untuk produk baru untuk pasar AS adalah $219.

Konfigurasi bangku tes, yang digunakan oleh kolega kami, diwakili oleh komponen berikut:

  • Papan Utama: MSI X370 XPower Gaming Titanium;
  • RAM: G.Skill TridentZ DDR4 3600 MHz, beroperasi pada 2400 MHz;
  • Kartu video: MSI GeForce GTX 1070 Permainan Z;
  • Catu Daya: Diam! Kekuatan Gelap Pro11 1200 V;
  • Solid state drive: Kingston SSDNow KC400 128 GB dan Corsair LX 512 GB;
  • Sistem pendingin: Wraith Spire;
  • Sistem operasi: Windows 10 64bit.

Performa single core pada prosesor Ryzen 5 1600 diharapkan tidak jauh berbeda dengan performa single core pada prosesor Ryzen 7 1700X, karena dibangun di atas kristal silikon yang sama, hanya saja prosesor enam core tersebut memiliki dua core yang dinonaktifkan. .

Dalam pengujian multi-threaded CPU-Z dan wPrime 2.1 (32M), produk baru ini menunjukkan hasil yang cukup diharapkan, menunjukkan tingkat kinerja yang sangat baik.

Di Cinebench 15, produk baru ini unggul tidak hanya dalam hal overclocking hingga 4,9 GHz dan masih banyak lagi. memori cepat(3600 MHz) quad-core lebih mahal Intel Inti i7-7700K, tetapi juga Intel Core i7-5930K enam inti. Namun dalam pengkodean video, yang terakhir ternyata lebih cepat.

Dari segi memori, prosesor Ryzen 5 1600 memang tidak memiliki performa terbaik, meski sedikit lebih baik dibandingkan Ryzen 7 1700X.

Dalam beberapa pengujian sintetis, produk baru AMD menunjukkan hasil terbaik, dibandingkan dengan Ryzen 7 1700X, dan dalam beberapa kasus sedikit lebih rendah darinya. Dalam sebagian besar tes sintetis Prosesor Intel Core i7-6700K ternyata lebih cepat dari kedua perwakilan AMD tersebut.

Untuk performa gamingnya cukup mengesankan. Dalam sebagian besar tes di Resolusi penuh HD (1920 x 1080 piksel), produk baru ini tidak jauh tertinggal dari Intel Core i7-6700K yang lebih mahal, dan dalam beberapa kasus bahkan lebih unggul. Menarik untuk dicatat bahwa dalam game Doom (dengan menggunakan OpenGL) dan Rise of Tomb Raider (menggunakan DirectX 11), prosesor Ryzen 5 1600 jauh mengungguli Ryzen 7 1700X.

Dalam resolusi 4K UHD (3840 x 2160 piksel) situasinya kurang lebih sama, dan pada sebagian besar game, semuanya bergantung pada kinerja kartu video.

Bersama sistem standar pendinginan, frekuensi prosesor dinaikkan menjadi 3,9 GHz, sedangkan tegangan inti menjadi 1,36 V. Akan menarik untuk melihat seberapa besar kemungkinan untuk melakukan overclock pada produk baru ini dengan didinginkan dengan cairan, dan frekuensi apa yang akan ditaklukkannya dalam overclocking ekstrem.

Suhu prosesor AMD Ryzen 5 1600 saat idle adalah 39 derajat Celcius, dan saat load 62 – 65 derajat Celcius. Konsumsi sistem berdasarkan produk baru dalam game adalah 245 W, yang kira-kira sama dengan konsumsi sistem pada berbasis Intel Core i7-6700K, yang setara dengan 250 W.

Saya mungkin pernah mendengar tentang hal tertentu " Peringkat AnTuTu" Berita yang menjadi rekor lain peringkat ini dikalahkan oleh produk baru yang baru dirilis - produk tersebut cukup sering diterbitkan. Hampir setiap review menentukan performa suatu perangkat, selain gaming dan pengujian perangkat lunak, AnTuTu yang sama digunakan.

Sayangnya, tidak semua pengguna mengetahui apa itu rating AnTuTu, mengapa diperlukan, dan apa arti data dalam tabelnya. Sedangkan informasi ini sangat berguna dan dapat membantu anda bantuan nyata saat memilih perangkat baru. Berapa peringkat AnTuTu, cara menggunakannya, dan apa hasil tesnya - TAHU BAGAIMANA para ahli akan memberi tahu Anda, ayo!

Pertama, mari kita lihat apa itu “tes sintetik” dan apa kegunaannya. Aplikasi serupa mewakili program pengujian. Anda dapat mengunduhnya secara gratis di toko aplikasi bermerek untuk sistem operasi seluler paling populer - Android dan iOS.

Selama pengujian, "sintetis" memberi beban maksimum pada perangkat keras perangkat, menyimulasikan skenario pengoperasian perangkat yang paling parah. Beban serupa jarang dicapai bahkan ketika menjalankan beberapa aplikasi dan permainan yang rumit secara grafis secara bersamaan. Oleh karena itu, selama pengujian tersebut, perangkat beroperasi pada batas kemampuannya dan menunjukkan tingkat kinerja sebenarnya.

Hasil tes ditampilkan dalam poin; semakin banyak poin, semakin banyak kinerja yang lebih baik perangkat tertentu dan, karenanya, semakin tinggi posisinya dalam peringkat perangkat secara keseluruhan.

Poinnya bagus, tetapi muncul cukup banyak pertanyaan logis– bagaimana Anda dapat menentukan perkiraan kinerja suatu perangkat berdasarkan jumlahnya?

Faktanya, semuanya sangat sederhana - lihat saja baris teratas peringkat. Perangkat andalan, pemimpin kinerja yang tak terbantahkan, dengan kuat menempati posisinya di sana. Ya, peringkatnya diperbarui secara berkala, hasilnya meningkat, tetapi hal ini tidak menghalangi Anda untuk fokus pada angka-angka yang ditunjukkan.

Tentu saja, semakin baik kinerja suatu perangkat, semakin tinggi biayanya; bukan tanpa alasan bahwa solusi andalan menempati peringkat TOP 10. Namun ada kategori perangkat lain, termasuk perangkat anggaran, yang memberikan kinerja optimal untuk hampir semua tugas.

Secara konvensional, kita dapat membedakan beberapa kategori berdasarkan hasil tes, yang dinyatakan dalam rentang skor AnTuTu, yang ditunjukkan pada tabel di bawah ini.

Tabel ringkasan skor dan kinerja AnTuTu

Kesimpulannya

Tes sintetis dan pemeringkatan perangkat AnTuTu sederhana dan sangat baik alat yang nyaman, yang memungkinkan Anda menentukan kinerja dan kemampuan sebenarnya perangkat tertentu. Data ini akan sangat berguna dalam proses pemilihan smartphone atau tablet baru.

Katakanlah Anda memilih di antara dua opsi - satu ponsel cerdas lebih mahal, yang lain lebih murah, tetapi performanya model tertentu datang lebih dulu untukmu. DI DALAM dalam hal ini lihat saja peringkatnya untuk memahami perangkat mana yang memiliki lebih banyak kinerja tinggi dan memenuhi kebutuhan Anda.

Selain AnTuTu, ada tes sintetis lainnya untuk mengecek kemampuan gadget. Tapi AnTuTu adalah pilihan paling populer di kalangan program serupa, karena kesederhanaan, keserbagunaan, aksesibilitas dan basis data yang sangat besar data pengguna, yang menjadi dasar tabel peringkat disesuaikan secara berkala. Oleh karena itu, jika Anda perlu mengetahui kinerja sebenarnya dari perangkat - sintetis Tes AnTuTu akan menjadi pilihan terbaik untuk memeriksa kemampuan perangkat.

Apakah kamu menyukainya?
Beritahu temanmu!

Perdebatan “Pro dan kontra” dari apa yang disebut tes sintetik sudah ada sejak lama. Atau, menurut setidaknya, seperti pengujian sintetik itu sendiri. Ide utama yang mendasarinya adalah untuk mengevaluasi kinerja secara keseluruhan sistem komputer, dan secara teori itu adalah ide yang sangat bagus.

Di dunia yang ideal, hasil tes semacam itu dapat memberi Anda gambaran yang jelas dan, yang lebih penting, realistis tentang apa yang dapat Anda harapkan dari komputer, baik desktop atau seluler, dalam berbagai skenario praktis - mulai dari pekerjaan dan browsing internet hingga hiburan multimedia dan bermain game.

Sayangnya, hal-hal yang sempurna tidak ada dan karena alasan inilah pengujian sintetik, seperti hal lainnya, tidaklah sempurna. Secara khusus, dua yang paling populer dan banyak digunakan program pengujian dari kelas serupa - 3DMark dan PCMark dari Futuremark - telah menjadi pusat serangkaian skandal. Tentu saja, ini bukan kesalahan para pengembang Futuremark sendiri - alasannya, pertama-tama, terletak pada pendekatan berbeda dari produsen untuk "mengoptimalkan" peralatan mereka, yang dengannya mereka dengan cerdik mengeksploitasi beberapa kekurangan dalam prosedur pengujian dan menerapkan peningkatan buatan. hasilnya, namun kemudian tidak dikonfirmasi dalam praktiknya.

Dan meskipun itu menciptakannya untuk mereka reputasi buruk, tes sintetis masih populer. Namun, keduanya sangat jarang digunakan sebagai satu-satunya indikator kinerja komputer. Sebaliknya, mereka sering kali disertai dengan alternatif yang lebih realistis untuk mengukur kecepatan, yang biasanya merupakan game terkini dengan pengukur bawaan untuk salah satu indikator terpenting bagi setiap gamer - jumlah frame per detik.

Namun, dalam beberapa kasus, jenis tes ini tidak dapat diterapkan dari sudut pandang pragmatis murni - misalnya, kapan yang sedang kita bicarakan tentang sistem kelas bisnis yang kinerja gamenya tidak terlalu penting. Alasannya adalah game memberikan kesan yang salah jika menyangkut mesin yang cukup bertenaga seperti, katakanlah, Lenovo ThinkPad X1 Carbon atau HP EliteBook 1040. Perangkat tersebut ditujukan untuk kalangan pengguna yang sangat berbeda - orang yang tidak peduli apakah Battlefield 4 dapat berjalan pada 60+ frame per detik di laptop mereka. Sebaliknya, mereka peduli pada hal-hal seperti kekuatan struktural, keamanan informasi yang andal, dan waktu maksimum masa pakai baterai.

Dalam kasus seperti itulah "sintetis" datang untuk menyelamatkan - seperti PCMark, yang mengukur kinerja keseluruhan seluruh konfigurasi. Namun, hal ini menimbulkan beberapa keberatan mengenai interpretasi hasil yang tepat, yaitu: berbagai sistem ditunjukkan dalam tes.

Studi Kasus: Perbandingan Langsung laptop permainan Ultrabook bisnis Lenovo Y50 dan HP EliteBook 1040 mungkin akan membuat penasaran. Pasalnya, hasil dari kedua sistem ini serupa, namun salah satunya berbasis cukup bertenaga kartu video diskrit (NVIDIA GeForce 860M), dan yang lainnya terintegrasi solusi grafis(Intel HD Grafis 4400). Namun, jika kita membandingkan performa gamingnya, dengan cepat menjadi jelas bahwa tidak seperti Lenovo Y50, EliteBook 1040 tidak dapat memberikan pengalaman bermain game yang optimal... Dan seharusnya tidak, karena dalam hal ini kita berbicara tentang mobil keliling dengan tujuan yang sama sekali berbeda.

Namun karena PCMark memperhitungkan kinerja keseluruhan, skor kedua mesin sama. Intinya, tes terdiri dari sejumlah tugas berbeda, yang tujuan keseluruhannya adalah menilai kemampuan secara akurat (sejauh mungkin). komputer tertentu mengatasi skenario beban kerja normal sehari-hari. Misalnya, PCMark memiliki tugas yang dirancang untuk mengukur kinerja komputer dalam skenario seperti menjelajah Internet, editor teks, mengedit gambar digital, obrolan video, dan permainan kasual.

Masing-masing pengujian ini memuat komponen sistem dengan caranya sendiri, sedangkan kinerja total sistem yang diuji dihitung menggunakan rumus khusus dan hasil akhirnya dihasilkan.

Namun, jika Anda ingin mendapatkan gambaran yang lebih jelas tentang kemampuan komputer Anda, ada dua hal yang perlu Anda lakukan: Pertama, lihat rincian hasil per bagian. Kedua, kunjungi situs web Futuremark; di sana Anda akan menemukan ratusan ribu konfigurasi berbeda dan dapat membandingkan kinerja sistem Anda dengan mesin dengan parameter serupa, lebih rendah atau lebih tinggi.

Dan izinkan saya mengulangi kesimpulannya: hasil pengujian sintetis, baik itu 3DMark atau PCMark, tidak boleh dipahami secara harfiah. Itu hanyalah panduan yang bagus, salah satu dari banyak alat untuk menilai kinerja komputer, jadi Anda tidak boleh terlalu menekankannya. sangat penting. Jika Anda memerlukan informasi terperinci dan komprehensif untuk membantu Anda memilih konfigurasi tertentu, bersabarlah dan baca keseluruhan ulasannya (atau lebih baik lagi, beberapa ulasan dari sumber berbeda), daripada menggulir ke akhir teks hanya untuk melihat hasil sintetis tes.

Semoga harimu menyenangkan!


Saya tidak suka jika seseorang mencoba menggunakan contoh kode buatan tangan untuk mengevaluasi kemampuan penganalisis kode statis. Sekarang, dengan menggunakan contoh spesifik, saya akan menunjukkan mengapa saya memiliki sikap negatif terhadap pengujian sintetik.

Belum lama ini, Bill Torpey menulis catatan di blognya “Even Mo “Static”, di mana dia menceritakan bagaimana, menurut pendapatnya, kinerja alat Cppcheck dan PVS-Studio saat menganalisis proyek itc-benchmarks tolok ukur analisis statis dari Toyota ITC.

Saya tidak suka bahwa setelah membaca artikel tersebut tampaknya alat analisa Cppcheck dan PVS-Studio memiliki kemampuan yang kurang lebih sama. Berdasarkan artikel tersebut, satu penganalisis berkinerja lebih baik di satu bidang, yang lain di bidang lain, tetapi secara umum kemampuan diagnostiknya serupa.

Saya kira tidak demikian. Pendapat saya adalah penganalisis PVS-Studio kami beberapa kali lebih kuat daripada Cppcheck. Dan secara umum, ini bukan “pendapat”, saya tahu itu!

Namun, karena dari luar tidak terlihat jelas bahwa PVS-Studio 10 kali lebih baik dari Cppcheck, maka kita harus mencoba memahami alasannya. Saya memutuskan untuk melihat tolok ukur itc yang sama dan mencari tahu mengapa PVS-Studio tidak memberikan kinerja terbaik pada basis pengujian ini.

Semakin jauh aku memeriksanya, semakin aku merasa jengkel. Dan satu contoh benar-benar membuat saya kehilangan keseimbangan, dan saya akan menceritakannya kepada Anda sedikit lebih rendah. Kesimpulan saya begini: Saya tidak punya keluhan tentang Bill Torpey. Dia menulis artikel yang bagus dan jujur. Terima kasih Bill. Tapi saya punya keluhan tentang Toyota ITC. Pendapat pribadi saya: basis tes mereka jelek. Ini, tentu saja, merupakan pernyataan besar, tetapi saya yakin saya memiliki kualifikasi dan pengalaman yang cukup untuk berbicara tentang penganalisis kode statis dan cara mengevaluasinya. Menurut pendapat saya, tolok ukur itc tidak dapat digunakan untuk menilai secara memadai kemampuan alat analisa tertentu.

Dan inilah ujian sebenarnya yang benar-benar membuat saya kehilangan keseimbangan.

Lalu apa yang terjadi, apakah PVS-Studio lebih lemah dari Cppcheck dalam contoh ini? Tidak, dia hanya lebih kuat!

Penganalisis PVS-Studio memahami bahwa kode ini ditulis dengan sengaja dan tidak ada kesalahan di sini.

Ada situasi ketika kode serupa ditulis secara khusus untuk menyebabkan pengecualian terjadi ketika penunjuk nol direferensikan. Ini dapat ditemukan dalam pengujian atau di area kode tertentu. Kami telah melihat kode serupa berkali-kali. Sebagai contoh, inilah tampilannya dalam proyek nyata:

Batal GpuChildThread::OnCrash() ( LOG(INFO)<< "GPU: Simulating GPU crash"; // Good bye, cruel world. volatile int* it_s_the_end_of_the_world_as_we_know_it = NULL; *it_s_the_end_of_the_world_as_we_know_it = 0xdead; }

Oleh karena itu, dalam penganalisis PVS-Studio, beberapa pengecualian diterapkan dalam diagnostik V522, agar tidak bersumpah pada kode tersebut. Penganalisis melihat bahwa null_pointer_001 bukanlah fungsi nyata. Dalam kode sebenarnya, tidak ada kesalahan dalam fungsi ketika angka nol ditulis ke pointer dan segera direferensikan. Dan nama fungsinya memberi tahu penganalisis bahwa ada alasan untuk "penunjuk nol".

Untuk kasus seperti itu, pengecualian A6 diimplementasikan dalam diagnostik V522. Fungsi sintetis null_pointer_001 juga termasuk dalam kategori ini. Inilah betapa berbahayanya pengecualian A6:

Dereferensi suatu variabel ada pada fungsi yang namanya mengandung salah satu kata:

  • kesalahan
  • bawaan
  • menabrak
  • batal
  • tes
  • pelanggaran
  • melemparkan
  • pengecualian

Dalam hal ini, variabel diberi nilai 0 pada baris di atas.

Uji sintetik sepenuhnya memenuhi pengecualian ini. Pertama, nama fungsi memiliki kata "null" di dalamnya. Kedua, penetapan nol ke suatu variabel terjadi tepat pada baris sebelumnya. Pengecualian mendeteksi kode yang tidak valid. Dan kode tersebut sebenarnya tidak nyata, ini adalah pengujian sintetis.

Karena nuansa seperti inilah saya tidak menyukai tes sintetis!

Saya memiliki keluhan lain tentang tolok ukur itc. Misalnya, semuanya ada di file yang sama, kita dapat melihat tes ini:

Void null_pointer_006 () ( int *p; p = (int *)(intptr_t)rand(); *p = 1; /*Alat harus mendeteksi baris ini sebagai error*/ /*ERROR:NULL pointer dereference*/ )

Fungsi Rand dapat mengembalikan 0, yang kemudian menjadi NULL. Penganalisis PVS-Studio belum mengetahui apa yang dapat dikembalikan oleh Rand dan oleh karena itu tidak melihat sesuatu yang mencurigakan dalam kode ini.

Saya meminta rekan-rekan saya untuk mengajari penganalisa agar lebih memahami apa fungsi rand. Tidak ada tujuan lain, Anda harus mempertajam penganalisis dengan file agar kinerjanya lebih baik pada basis pengujian yang dimaksud. Ini adalah tindakan yang perlu, karena serangkaian tes serupa digunakan untuk mengevaluasi penganalisis.

Tapi jangan takut. Saya menyatakan bahwa kami akan terus mengerjakan diagnostik yang benar-benar bagus, dan tidak menyesuaikan alat analisa untuk pengujian. Mungkin kami akan sedikit memperbaiki PVS-Studio untuk benchmarknya, tetapi di latar belakang dan hanya di tempat-tempat yang setidaknya masuk akal.

Saya ingin pengembang memahami bahwa contoh rand sebenarnya tidak mengevaluasi apa pun. Ini adalah tes sintetis yang diambil begitu saja. Itu bukan cara program ditulis. Tidak ada kesalahan seperti itu.

Omong-omong, jika fungsi Rand tidak mengembalikan 0, tetapi 1400, itu tidak akan lebih baik. Meski begitu, penunjuk seperti itu tidak dapat direferensikan. Jadi dereferensi pointer nol adalah kasus khusus yang aneh dari kode yang sepenuhnya salah yang hanya dibuat dan tidak terjadi dalam program nyata.

Saya tahu masalah sebenarnya dari pemrograman. Misalnya, ada ratusan kesalahan ketik yang kami deteksi, katakanlah, menggunakan diagnostik V501. Menariknya, saya tidak melihat satu pun pengujian di itc-benchmark yang memeriksa apakah penganalisis dapat mendeteksi kesalahan ketik seperti "if (a.x == a.x)". Tidak ada satu tes pun!

Dengan demikian, tolok ukur itc mengabaikan kemampuan penganalisis untuk menemukan kesalahan ketik. Dan pembaca artikel kami tahu betapa umum kesalahan ini. Tapi menurut pendapat saya, ini berisi kasus uji bodoh yang tidak ditemukan di program nyata. Saya tidak dapat membayangkan bahwa dalam proyek yang sangat serius Anda dapat menemukan kode seperti ini yang mengarah ke array di luar batas:

Void overrun_st_014 () ( int buf; int indeks; indeks = rand(); buf = 1; /*Alat harus mendeteksi baris ini sebagai error*/ /*ERROR: buffer overrun */ sink = buf; )

Mungkin hal ini hanya dapat ditemukan pada pekerjaan laboratorium siswa.

Pada saat yang sama, saya tahu bahwa dalam proyek yang serius, mudah untuk menemukan kesalahan ketik seperti:

Return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1) && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));

Penganalisis PVS-Studio menemukan kesalahan ini dalam kode kompiler GCC. String yang sama dibandingkan dua kali.

Ternyata ada tes untuk menemukan kode eksotik dengan rand, tetapi tidak untuk kesalahan ketik klasik.

Saya menyarankan semua orang menginstal dan mencoba penganalisis kode paling kuat PVS-Studio.

  • Basis data kesalahan nyata ditemukan menggunakan PVS-Studio dalam proyek sumber terbuka.
  • Mitos tentang analisis statis. Mitos nomor lima: Anda dapat menulis program kecil untuk mengevaluasi suatu alat.
  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat