Wizard писал(а): ↑2019.10.05, 12:36
Юнит-тесты если и навязывают приложению становиться компонентным, то качество компонентов все еще ничем не гарантированно. Мы убедились что все юниты лежать по полочкам, приложение ведет себя предсказуемо и ожидаемо. Очевидно какие то части приложения стали более независимыми, некоторые из них можно переиспользовать. Если от такого подхода выгода? Конечно! Но вернемся к качеству - чем оно гарантированно зная только о том что у нас есть юнит-тесты? По прежнему приложение можно назвать рабочим. Это хорошо... но про качество говорить рано.
Тогда сначала скажите, что именно является для вас "качеством" и как вы его измеряете без тестов.
Wizard писал(а): ↑2019.10.05, 13:11
Не слишком ли завышены ожидания на юнит-тесты в целях контроля качества если учесть что в той же литературе указаны относительно не высокие показатели обнаружение ошибок посредством тестирования в сравнение с той же инспекцией кода?
Мой сайт долго был на Yii 1.1.17. В октябре я его обновил на Yii 1.1.20 и переключил на PHP 7.1. Он остался рабочим? Вроде да, так как в логах ошибок не появилось. Но через неделю я случайно обнаружил, что при обновлении поста слетает подсветка PHP-кода в <pre></pre>.
После ковыряний в исходниках я нашёл, что в новом TextHighlighter
здесь поменялась регулярка:
Код: Выделить всё
- start="(\<\?(php|=)?)?"
+ start="\<\?(php|=)?" end="\?\>"
Теперь указание "<?php" в начале перестало быть необязательным, и в теге <pre> теперь подсвечивается только код, начинающийся c "<?php ".
Чтобы не проверять всё вручную я написал простейший тест проверки работы конвертера:
Код: Выделить всё
class TextProcessorTest extends TestCase
{
public function testText()
{
$source = <<<END
Lorem ipsum dolor sit amet.
~~~
[php]
interface A extends B
{}
~~~
END;
$expected = <<<END
<p>Lorem ipsum dolor sit amet.</p>
<div class="hl-code"><div class="php-hl-main"><pre><span class="php-hl-reserved">interface</span> <span class="php-hl-identifier">A</span> <span class="php-hl-reserved">extends</span> <span class="php-hl-identifier">B</span>
<span class="php-hl-brackets">{</span><span class="php-hl-brackets">}</span></pre></div></div>
END;
$processor = new TextProcessor();
$result = $processor->process($source);
$this->assertEquals($expected, $result);
}
}
и под него доработал код TextProcessor так, чтобы он специально подставлял "<?php" в начало листинга, вызывал CMarkdownParser и потом из начала обратно удалял. Тест показал, что теперь всё работает.
Если приложение написать один раз, проверить и забросить, то оно так и останется рабочим. Но в реальности постоянно обновляется фреймворк и библиотеки и постоянно вносятся правки в сам код.
У меня есть желание переписать сайт с Yii1 на Yii2 или Slim. И теперь имея этот тест мне будет спокойнее и быстрее переписывать. Теперь у меня есть реальная гарантия, что преобразование текста "можно назвать рабочим".
Инспекция кода найдёт только технические ошибки, но не найдёт логические, когда где-то в условии стоит ">" вместо ">=" или где-то в формуле неверно расставлены скобки. Вручную мало кто всё прокликивает, так что это удобнее и надёжнее проверить тестами.