Поможем человеку сравнить картинки, или о Тестировании Локализации приложения

в 10:05, , рубрики: imagemagick, ruby, локализация, обработка изображений, тестирование, метки: , , , ,

Добрый день дамы и господа!

Речь пойдет о тестировании, точнее даже о тестировании локализации.
Хотя в общем случае можно применить и к задаче облегчения поиска разницы на двух изображениях.

Поможем человеку сравнить картинки, или о Тестировании Локализации приложения

Решился наконец показать людям одну свою идею, есть шанс что может кому пригодиться.

Условие задачи:
есть приложение, его десктопное интерфейс переведен на много языков, надо проверить что все переведено, на всех языках.
уже настораживает, как можно проверить правильность локализации не зная языка?
(по условиям реальности — мы не можем вытягивать тексты из контролов, т.е. нельзя проверить что нужный текст в нужном контроле стоит, да и не правильно это, а вдруг там с фонтами грабли, или он не влазит на экран)

для упрощения жизни делаем скрипт который получает скриншоты приложения со всеми возможными текстами, на всех языках (в нашем случае под 200 скриншотов на приложение).

на его выходе имеем папку с именем языка и кучей скриншотов.
теперь нам надо из проанализировать.
в теории ожидается что человек просмотрит всю эту кучу, и глядя на странные надписи на чужом языке, оценит все ли в порядке…
это реальность, но попытаемся облегчить жизнь такого человека.

идея

в наборе языков есть один достаточно известный человеку язык, обычно это english, и обычно человек достаточно неплохо знает приложение на этом языке.
а давайте будем “сравнивать” известный язык с “неизвестным”, тогда легче понять что ожидается на картинке.

т.е. в простейшем случае — домешиваем в “неизвестный” язык — известный
например
были скриншоты
001-danish.png
002-danish.png
etc

домешиваем english
получаем нечто вида
001-danish.png
001-english.png
002-danish.png
002-english.png

теперь человек может последовательно сравнивая картинки, и при необходимости переключаясь между ними, “сравнить” при этом зная контекст — легче понять что что-то не так.

в общем уже легче.

пойдем дальше,
есть еще мелочь, неплохо бы увидеть что что-то забыли перевести, т.е. текст остался дефлотным, обычно это english.
просто клацая между языками можно и пропустить.

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

как это выглядит.
Поможем человеку сравнить картинки, или о Тестировании Локализации приложения

Поможем человеку сравнить картинки, или о Тестировании Локализации приложения

а тут видно что нет перевода у Album Artist, Composer и Discnumber
Поможем человеку сравнить картинки, или о Тестировании Локализации приложения

делается эта “красота” с помощь imagemagic
только с применением функций типа composite.

вот скрипт функции на ruby+rmagic

def CompareImage_v2(file1,file2,outname1,outname2)
	f1 = Magick::Image.read(file1).first
	f2 = Magick::Image.read(file2).first

	difference = f1.composite(f2, Magick::CenterGravity, Magick::DifferenceCompositeOp)

	# Make a blurry copy.
	blurry = difference.blur_image(0.0,4.5)

	mask = blurry.threshold(Magick::QuantumRange*0.02)
	mask2 = mask.edge(1)
	mask2 = mask2.level_colors("black", "red", true) # change blob color

	result=f1.composite(mask, Magick::CenterGravity, Magick::DifferenceCompositeOp)
	result=result.composite(mask2, Magick::CenterGravity, Magick::DifferenceCompositeOp)
	result.write(outname1) { self.quality = $image_quality }

	result=f2.composite(mask, Magick::CenterGravity, Magick::DifferenceCompositeOp)
	result=result.composite(mask2, Magick::CenterGravity, Magick::DifferenceCompositeOp)
	result.write(outname2) { self.quality = $image_quality }
	
	GC.start #memory leak fix
end

в теории его можно сделать на чистом console imagemagic — имхо ruby версия меня устраивает более чем ;)

метод далеко не идеален
он решает КОНКРЕТНУЮ задачу
существенное ограничение — окна должны быть одинаковы во всех языках, позиции всего в окне должны сохраняться, и отличаться только текст.

полный скрипт можно посмотреть
в $in_folde лежат в папках вида eng,fre,ger скриншоты, на выходе в $out_folder результат.

проверять обрезку концов строк — тоже на совести человека, но обычно в конце строки всегда есть “.”, и в крайнем случае можно ввести “fakelanguage” для поиска таких вещей.

жду ваших моментов.
и Ваших способов решения этой задачи.
p.s. Если надо, можно написать пост как ставить rmagic под винду…

с уважением Сергей Ерохин, Харьков.

Автор: esl

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js