Чим відрізняється статичний аналіз коду від огляду коду?


9

Мені просто хотілося знати, в чому різниця між статичним аналізом коду та оглядом коду. Як робиться кожен з цих двох? Більш конкретно, які інструменти доступні сьогодні для огляду коду / статичного аналізу PHP? Я також хотів би знати про хороші інструменти для перегляду коду для будь-якої мови.


Перегляд коду, як правило, є ручним процесом, коли інший програміст переглядає ваш код. Це спосіб виявити невеликі помилки або відхилення від умов кодування тощо, і хороший спосіб поліпшити загальну якість коду. Аналіз статичного коду - це те, для чого можна скористатися інструментом, хоча я цього ніколи не робив. Зацікавлені подивитися, які відповіді мають інші

9
У двох словах? "Мозок".
MSalters

Відповіді:


19

Перегляд коду - це те, що люди роблять, статичний аналіз - це те, що роблять машини. Існують (іноді хороші) інструменти статичного аналізу. Перегляд коду - це коли колега / наставник / професор / друг перебирає ваш код і піддає вам конструктивну критику.

Статичний аналіз - це, з іншого боку, автоматизований процес, в якому машина, інформована тим, що вона знає про мову, яку вона аналізує (як правило, із системи типів), аналізує програму і намагається вибрати речі, які можуть бути неправильними, неефективний, поганий стиль або іншим чином неоптимальний.


2
У мене завжди було враження, що огляд коду - це свого роду статичний аналіз, оскільки це спосіб вимірювання стану здоров'я програмного забезпечення без його виконання.
Бух

4
@ Buhb: це суттєво додає знання про контекст. Рецензент коду повинен розуміти, чи працює код, що очікується. Статичний інструмент (у кращому випадку, якщо мова дозволяє це за допомогою декору / твердження / контракту) перевірить, що формально все в порядку ... Отже, можна сказати інакше: статичний аналіз - це свого роду огляд коду, який виконується алгоритмічно.
Франческо

Просто додати, Лінт (статичний аналітик): Чувак, який не потрібен !! Колега (рецензент): Ви можете зробити це і так !!
Кушаль

11

Статичний аналіз - це процес аналізу програмного забезпечення без його виконання. Це дуже добре і рекомендується, але ви повинні це пам’ятати

  1. різні інструменти статичного аналізу по-різному розуміють код, який вони вивчають, отже, вони можуть сигналізувати (або не сигналізувати) про різні проблеми. Один інструмент може дати чистий звіт, а другий може скаржитися на мільйон речей.
  2. динамічний інструмент (щоб назвати приклад, подумайте про valgrind) може знайти багато інших питань за ціною серйозного навантаження на споживання ресурсів (часу, використання пам'яті). Це так, тому що ви зазвичай використовуєте інструментальну версію програмного забезпечення. Зауважте, що, будучи інструментом якимось чином (замініть свій malloc на mallock-налагоджувальний пристрій), він не точно ідентичний вашому програмному забезпеченню (як видно з часу виконання)

Обидва ці підходи страждають від відсутності контексту: вони не знають, чого слід досягти.

Перегляд коду робиться іншим кодером, який нібито це знає і може перевірити

  1. якщо код правильний
  2. якщо програмне забезпечення семантично правильне.

Це набагато дорожче і має різну ступінь повторюваності, але є чудовою допомогою.

Як завжди, немає жодної срібної кулі, яка виправить усі помилки та уникне всіх проблем. Застосування - рекомендується якомога більше, враховуючи місце, код, час, три форми перевірки (статична, динамічна, більше очей (і мізків), які насправді дивляться на код).

ps: Я мушу зазначити, що зазвичай набагато краще застосовувати інструменти з нуля. Перетворення застарілої системи є набагато менш приємним досвідом, зумовленим помилковими позитивами. Якщо ви починаєте з нуля і завжди прагнете підтримувати інструмент аналізу чистим, ви, ймовірно, уникнете безлічі проблем.

pps: що стосується інструментів, це залежить від мови. У світі C та C ++ ви можете почати, переглянувши саму Visual Studio, яка містить вбудований інструмент статичного аналізу. Порівняно повний список можна знайти у Вікіпедії.

ppps: Статичний аналіз більше підходить для статичних мов, таких як C або C ++. Для Python важко сказати, якщо ім'я, яке посилається на список у певній точці, буде посилатися на список для решти програми, завдяки її динамічним властивостям. Це не означає, що нічого не можна зробити, як показує зусилля JIT, як PyPy .


2

Перегляд коду - це коли старший чи спеціалізований орган перевіряє ваш код, ваш спосіб кодування, стандарти, які дотримуються в коді, а саме логічний рівень коду

Що стосується статичного аналізу, то це аналіз комп'ютерного програмного забезпечення, який виконується без фактичного виконання програм, побудованих із цього програмного забезпечення (аналіз, виконаний на виконаних програмах, відомий як динамічний аналіз)

Перелік інструментів за технологією наведено нижче за посиланням

Список інструментів для статичного аналізу

Отже, огляд коду та статичний аналіз - це абсолютно різні терміни.


7
Відповідь ОМ по суті є правильною, за винятком того, що я посперечався зі словом "Старший або Виділений орган перевіряє ваш код ...". Це правда, що деякі нефункціональні магазини проводять перевірку коду таким чином для батьків / дітей, у багатьох (і кращих) магазинах існує система перегляду коду, що не відповідає певній оцінці вчителя для домашнього завдання. Там, де я працюю, молодший так само звичайно переглядає роботу старшого. Завдання полягає в тому, щоб друга пара очей переглянула весь код, перш ніж він перевіряється.
Jim In Texas

2
@JimInTexas, те саме в нашому магазині. Я б сказав, що найважливішим (довгостроковим) результатом огляду коду є поширення знань, об'єднання практик та архітектурне / дизайнерське бачення в команді. У цьому відношенні молодший, який переглядає код старшого, є, в гіршому випадку, чудовим способом вивчення кращих практик місцевого життя - але хто каже, що старший ніколи не помиляється, а молодший ніколи не може їх помітити?
Péter Török

1

Огляд коду - це більш якісна оцінка, статичний аналіз коду - більш кількісна оцінка.

Гей, хлопче, цей спосіб можна записати краще

vs, fe

Зниження продуктивності. Ідентифікувати порожній рядок неефективно, використовуючи конструкцію 'wcslen (str)> 0'. Більш ефективним способом є перевірка: str [0]! = '\ 0'.

Зниження продуктивності. Вираз strlen (MyStr.c_str ()) роду можна переписати як MyStr.length ()

Зниження продуктивності. У випадку, якщо "Порядок" є ітератором, то більш ефективно використовувати форму префікса приросту. Замініть ітератор ++ на ++ ітератор.

Хоча реальні помилки можуть (очевидно) існувати і виявлятися SCA

Неправильний формат. Розглянемо перевірку N фактичного аргументу функції 'Foo'

Вираз було укладено дужками двічі: ((вираз)). Одна пара в дужках непотрібна або є помилка друку

Виклик функції 'memset' призведе до переливу буфера 'dest.lfFaceName'


вибачте, що ображаю вас. Що стосується того, що мій (зниклий?) Коментар мав на меті сказати - чи знаєте ви з якоїсь причини, чому людина не може запропонувати ті самі коментарі, які ви надаєте, як приклади результатів аналізу статичного коду?
sq33G

@ sq33G: Ні. Будь-яка людина з канцелярським приладдям (практично нескінченна кількість паперу) може імітувати довільну машину Тюрінга. Однак це нудно і забирає багато часу. (Можливо, не той, що заданий, але скажімо не визначене поведінку в С).
Maciej Piechotka

Ага. Тож справжня відповідь на питання ОП полягає в тому, що машини Тьюрінга не є повноцінними для людини.
sq33G

0

Статичний аналіз - це коли артефакт аналізується без виконання. Хоча він може бути застосований до будь-якого артефакту, він часто застосовується до вихідного коду чи об'єктного коду і стосується використання конкретних інструментів для аналізу та отримання інформації про ці робочі продукти. Ці інструменти складають звіти, які інтерпретуються інженером для використання при визначенні якості системи, що будується, і як керівництво до планування розробки та обслуговування. У Вікіпедії є перелік інструментів для статичного аналізу , організований за мовою та з коротким описом їх можливостей.

Відгуки - це людська оцінка деякого робочого продукту, який може бути кодом. Огляди також можуть проводитись і на конструкціях чи інших документах. Ідея полягає в тому, що люди, знайомі з робочим продуктом, відмінним від розробника, дивляться на нього, щоб знайти помилки, починаючи від проблем із безпекою і закінчуючи порушеннями стандарту кодування.

Технічно огляд коду можна вважати формою статичного аналізу, оскільки код фактично не виконується під час огляду. Однак у загальній термінології "статичний аналіз" зазвичай стосується машинного розбору вихідних або об'єктних файлів, тоді як "огляд" вказує на те, що люди займаються аналізом.


-2

Перегляд коду - корисна техніка для усунення проблем у вихідному коді на дуже ранній стадії. У рамках цієї вправи багато питань, таких як продуктивність, масштабованість та стандарти кодування, визначені та виправлені. Це поліпшить якість коду.

Статичний аналіз застосовується для аналізу показників якості коду, таких як циклометрична складність, індекс ремонтопридатності, глибина успадкування та з’єднання класів. На ринку доступні різні інструменти для аналізу якостей коду. C # розробник використовує візуальну студію Microsoft для створення звітів про метрики.


-3

статичний аналіз коду виконується автоматизованим інструментом, огляд коду проводиться з людьми до того, як код буде здійснений.

Інструменти для перегляду коду:

1.більше порівняння

2. різниця програмного забезпечення для управління версіями

Ці інструменти завжди використовуються для створення різниці між старою та новою версією.


2
1) Це не повинно бути перед введенням коду - перегляд коду робиться людьми, і 2) Я опису інструментів різності як інструментів перегляду коду є цікавим, звичайно, це інструменти, які використовуються для ідентифікації коду для огляду, але якщо Мене запитали про інструменти перегляду коду, я, мабуть, вказую на ті, які допомагають керувати процесом (наприклад, я використовував Kiln і Crucible).
Мерф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.