<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; ТЕТРИС</title>
	<atom:link href="http://web.snauka.ru/issues/tag/tetris/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Sat, 18 Apr 2026 09:41:14 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Исследование программного продукта по критериям надёжности</title>
		<link>https://web.snauka.ru/issues/2022/11/98945</link>
		<comments>https://web.snauka.ru/issues/2022/11/98945#comments</comments>
		<pubDate>Tue, 01 Nov 2022 12:54:09 +0000</pubDate>
		<dc:creator>Алтынпара Артём Вячеславович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[восстановление]]></category>
		<category><![CDATA[зрелость]]></category>
		<category><![CDATA[критерий]]></category>
		<category><![CDATA[МЕТРИКА]]></category>
		<category><![CDATA[надежность]]></category>
		<category><![CDATA[ОТКАЗОУСТОЙЧИВОСТЬ]]></category>
		<category><![CDATA[стандарты]]></category>
		<category><![CDATA[тестирование]]></category>
		<category><![CDATA[ТЕТРИС]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/?p=98945</guid>
		<description><![CDATA[Введение Актуальность разработки (цель исследования) обоснована тем, что в настоящий момент в связи с экономической политикой Российской Федерации по импортозамещению любой производящийся программно-аппаратный продукт в нашей стране может иметь какие-либо скрытые дефекты. Необходимо разработать комплекс критериев и метрик оценивания надёжности какого-либо программного продукта. В связи с этим попробуем выполнить эту задачу на примере игрушки «Тетрис». [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: left" align="center"><strong><span>Введение</span></strong></div>
<p><span>Актуальность разработки (цель исследования) обоснована тем, что в настоящий момент в связи с экономической политикой Российской Федерации по импортозамещению любой производящийся программно-аппаратный продукт в нашей стране может иметь какие-либо скрытые дефекты. Необходимо разработать комплекс критериев и метрик оценивания надёжности какого-либо программного продукта.</span><br />
<span>В связи с этим попробуем выполнить эту задачу на примере игрушки «Тетрис».</span><br />
<span>Основной функционал:</span><br />
<span>Случайные фигурки тетрамино падают сверху в прямоугольный стакан шириной 10 и высотой 20 клеток. В полёте игрок может поворачивать фигурку на 90° и двигать её по горизонтали. Также можно «сбрасывать» фигурку, то есть ускорять её падение, когда уже решено, куда фигурка должна упасть. Фигурка летит до тех пор, пока не наткнётся на другую фигурку либо на дно стакана. Если при этом заполнился горизонтальный ряд из 10 клеток, он пропадает и всё, что выше него, опускается на одну клетку. Дополнительно показывается фигурка, которая будет следовать после текущей — это подсказка, которая позволяет игроку планировать действия. Темп игры постепенно ускоряется. Игра заканчивается, когда новая фигурка не может поместиться в стакан. Игрок получает очки за каждый заполненный ряд, поэтому его задача — заполнять ряды, не заполняя сам стакан (по вертикали) как можно дольше, чтобы таким образом получить как можно больше очков.</span><br />
<span>Цель: развивать сообразительность, память, воображение ребёнка, знакомить с цветом, формой, величиной, а также способствовать развитию речи, развивать мелкие мышцы рук.</span><br />
<span>Требования к оборудованию:</span><br />
<span>В качестве аппаратной среды используется ПК типа IBM PC.</span><br />
<span>Системные требования:</span><br />
<span>1. Компьютер Pentium 200 МГц</span><br />
<span>2. Оперативная память 32 RAM</span><br />
<span>3. Видеокарта 800х600</span><br />
<span>4. Операционная система Microsoft Windows 98/ME/2000/XP/Vista/7</span><br />
<span>5. Клавиатура</span><br />
<span>6. Мышь</span><br />
<span>7. Размеры свободного дискового пространства 200 кб</span></p>
<div style="text-align: left" align="center"><strong><span>Материалы и методы</span></strong></div>
<p><span>Теперь оценим надёжность данного программного продукта по четырём критериям:</span><br />
<strong><span>Зрелость:</span></strong><br />
<span>Метрика &#8220;Объем модуля&#8221;. Как правило, наиболее весомые модули имеют больший объем кода. Если обозначить: А — объем модуля (например, число строк кода); В — объем кода аналогичного по функциональности модуля, взятый из статистических данных организации разработчика программного средства, то числовую оценку метрики можно найти по формуле</span><br />
<span>X =</span><img src="https://content.snauka.ru/web/98945_files/0.gif" alt="" width="124" height="53" /><br />
<span>При этом справедливо 0&lt;А; 0&lt;X&lt;=1.</span><br />
<span>В качестве модуля A возьмём весь код программы. Он содержит 10+68+4+119+12+128+18+11 = 370 строк кода из всех подмодулей.</span><br />
<span>В качестве модуля B возьмём весь код программы разработчика данного средства.</span><br />
<span>Он содержит 142 + 194 + 54 = 390 строк кода из всех подмодулей.</span><br />
<span>X = 370/1029 = 0,356.</span><br />
<span>Метрика &#8220;Время, затраченное на разработку модуля&#8221;. Как правило, на разработку наиболее весомого модуля затрачивается больше времени. Если обозначить: А — время, затраченное на разработку модуля; В — время, затраченное на разработку аналогичного по функциональности модуля, взятое из статистических данных организации-разработчика программного средства, то числовую оценку метрики можно найти по формуле</span></p>
<p><span>X =</span><img src="https://content.snauka.ru/web/98945_files/0(1).gif" alt="" width="124" height="53" /><br />
<span>При этом справедливо 0&lt;А; 0&lt;X&lt;=1.</span><br />
<span>Пускай время будет исчисляться в часах. У одного разработчика на создание общего, функционально простого модуля ушло 32 часа. У команды из пяти человек на создание общего модуля с клиентским уклоном ушло 70 часов.</span><br />
<span>Получаем что Х = А/B = 0,457</span><br />
<span>Метрика &#8220;Потребляемые ресурсы модулем&#8221;. Как правило, более весомый модуль потребляет и больше ресурсов. Если обозначить: А — объем потребляемых ресурсов модулем (объем оперативной памяти и т.п.); В — общий объем потребляемых программным средством ресурсов, то числовую оценку метрики можно найти по формуле X=A/B. При этом справедливо: 0&lt;А &lt; B; 0&lt; X &lt;1.</span><br />
<span>В качестве потребляемых ресурсов взята используемая оперативная память, а программным средством является студия разработки модуля InteliJ IDEA Community Edition.</span><br />
<span>Под модулем подразумевается наше ПО. Оно потребляет 0,036 Мб оперативной памяти компьютера.</span><br />
<span>Для нормальной работы InteliJ IDEA требуется 1200 Mб оперативной памяти.</span><br />
<span>Х = A/B = 0,036/1200 = 0,00003</span><br />
<strong><span>Способность к восстановлению:</span></strong><br />
<span>Метрика &#8220;Зависимость модулей&#8221;. Как правило, в программном средстве модули связаны в древовидную структуру, где неправильная работа одного модуля приводит к неправильной работе других модулей. Если обозначить: А — количество модулей, зависящих от данного модуля; В — общее количество всех модулей, то числовую оценку метрики можно найти по формуле X=A/B. При этом справедливо 0&lt;=А &lt; B; 0&lt; X &lt;1.</span><br />
<span>Пускай под модулями будем подразумевать классы (структуры) программы. Всего классов у программы восемь. Все они связаны между собой. Поэтому X=A/B = 1 / 8 = 0,125</span><br />
<span>Метрика &#8220;Частота использования модуля&#8221;. Вероятность появления ошибки возрастает с ростом количества вызовов модуля, поэтому часто вызываемые модули более весомы, нежели модули, вызываемые реже.</span><br />
<span>Если обозначить: А — количество вызовов модуля; В — общее количество всех вызовов модулей, то числовую оценку метрики можно найти по формуле X=A/B. При этом справедливо 1&lt;=А &lt; B; 1/B&lt; X &lt;1.</span><br />
<span>Пускай под вызовами моделей будем иметь ввиду событие нажатия кнопки интерфейса программы либо нажатие клавиши на клавиатуре.</span><br />
<span>Используя клавиши со стрелками влево, вправо и вверх мы заставляем падающую сверху фигуру менять своё местоположение в пространстве. Задействовано 3 модуля т.е. А=3. Четвёртым не всегда задействованным модулем будет являться клавиша со стрелкой вниз. Она отвечает за скорость падения фигуры.</span><br />
<span>Итак, X=A/B = 3 / 4= 0,75</span><br />
<span>Метрика &#8220;Время работы модуля&#8221;. Как правило, чем большее время находится модуль в работе, тем он более весом. Если обозначить: А — время работы модуля; В — общее время выполнения всей задачи, то числовую оценку метрики можно найти по формуле X=A/B. При этом справедливо 0&lt;А&lt;B; 0&lt;X&lt;1</span><br />
<span>Стандартное время выполнения модуля А – 90 секунд.</span><br />
<span>Время выполнения всей задачи – 120 секунд.</span><br />
<span>X =А/В=90/120 =0,75.</span><br />
<strong><span>Соответствие стандартам:</span></strong><br />
<span>Метрика &#8220;Команда разработки модуля&#8221;. Как правило, в разработке наиболее весомых модулей принимает участие большее количество разработчиков. Если обозначить: А — количество разработчиков, принимающих участие в разработке модуля; В — количество разработчиков, принимавших участие в создании аналогичного по функциональности модуля, взятое из статистических данных организации-разработчика программного средства, то числовую оценку метрики можно найти по формуле</span><br />
<span>X =</span><img src="https://content.snauka.ru/web/98945_files/0(2).gif" alt="" width="124" height="53" /><br />
<span>При этом справедливо 0&lt;А; 0&lt;X&lt;=1.</span><br />
<span>Под модулем A будем считать кол-во разработчиков данного программного продукта. Участие принимал один разработчик.</span><br />
<span>В — количество разработчиков, принимавших участие в создании аналогичного по функциональности модуля.</span><br />
<span>Предположим, это будут: Аналитик – человек отвечающий за анализ ТЗ и сбор информации, человек отвечающий за создание переменных и логику программы, человек отвечающий за интерфейс программы, человек отвечающий за компоновку всех подмодулей и работоспособность программы в целом, тестировщик. Всего пять человек.</span><br />
<span>X =1/5 = 0,2.</span><br />
<span>Метрика &#8220;Квалификация команды разработчиков&#8221;. Как правило, в разработке наиболее весомых модулей принимают участие более квалифицированные разработчики. Если обозначить: А — уровень квалификации команды разработчиков, принимающих участие в разработке модуля (А — может быть определенно экспертным путем, 0&lt;А&lt;=1); В — уровень квалификации команды разработчиков, принимавших участие в создании аналогичного по функциональности модуля, взятый из статистических данных организации-разработчика программного средства, то числовую оценку метрики можно найти по формуле</span><br />
<span>X =</span><img src="https://content.snauka.ru/web/98945_files/1.gif" alt="" width="124" height="53" /><br />
<span>При этом справедливо 0&lt;А&lt;=1; 0&lt;X&lt;=1.</span><br />
<span>В разработке данного модуля принимал участие один человек. Его уровень – юниор – оценивается единицей. Команда разработчиков предприятия имеет уровень – опытный – оценивается числом 2.</span><br />
<span>X =A/B = 1 / 2= 0,5</span><br />
<span>Метрика &#8220;Документирование модуля&#8221;. Как правило, более весомые модули должны иметь больший объем документации. Если обозначить: А — суммарный объем документов, описывающих анализируемый модуль; В — суммарный объем документов аналогичного по функциональности модуля, взятый из статистических данных организации-разработчика программного средства, то числовую оценку метрики можно найти по формуле</span><br />
<span>X =</span><img src="https://content.snauka.ru/web/98945_files/2.gif" alt="" width="124" height="53" /><br />
<span>При этом справедливо 0&lt;А;0&lt;X&lt;=1</span><br />
<span>Под документацией будем подразумевать всю информацию, касающуюся конкретно данного модуля.</span><br />
<span>Пусть А будет включать только список файлов, позволяющих использовать модуль на сторонних аппаратных средствах. Их будет 5.</span><br />
<span>B – будет включать тот же список необходимых документов. Но добавятся три новых: ТЗ, спецификации и доклад руководству.</span><br />
<span>X =A/B = 5/ 8= 0,625</span></p>
<p><strong><span>Отказоустойчивость:</span></strong><br />
<span>Метрика &#8220;Тестовые наборы модуля&#8221;. Как правило, более весомые модули имеют большее количество тестовых наборов данных. Если обозначить: А — количество тестовых наборов разрабатываемого модуля; В — количество тестовых наборов аналогичного по функциональности модуля, взятое из статистических данных организации-разработчика программного средства, то числовую оценку метрики можно найти по формуле</span><br />
<span>X =</span><img src="https://content.snauka.ru/web/98945_files/3.gif" alt="" width="124" height="53" /><br />
<span>При этом справедливо 0&lt;А;0&lt;X&lt;=1</span><br />
<span>Так как объём исходного модуля и модуля организации-разработчика почти различаются, функционал также будет различен и кол-во тестовых наборов будет не одним и тем же. Организация-разработчик создала более масштабную программу с клиентским уклоном.</span><br />
<span>А = 1</span><br />
<span>B = 2</span><br />
<span>Х = А/В = 0,5</span><br />
<span>Метрика &#8220;Время тестирования модуля&#8221;. Как правило, более весомые модули тестируются более продолжительное время. Если обозначить А — время тестирования разрабатываемого модуля; В — время тестирования аналогичного по функциональности модуля, взятое из статистических данных организации-разработчика программного средства, то числовую оценку метрики можно найти по формуле</span><br />
<span>X =</span><img src="https://content.snauka.ru/web/98945_files/4.gif" alt="" width="124" height="53" /><br />
<span>При этом справедливо 0&lt;А; 0&lt;X&lt;=1.</span><br />
<span>Предположим, что разработчик исходной программы тестирует код белого ящика, а разработчик-тестировщик организации – код черного ящика.</span><br />
<span>Тогда параметр А будет равен 12 секундам.</span><br />
<span>Параметр В будет равен 600 секундам.</span><br />
<span>X = А/В = 0,02</span><br />
<span>Оценку надёжности программного средства будем проводить по формуле:</span></p>
<p><img src="https://content.snauka.ru/web/98945_files/4(1).gif" alt="" width="27" height="22" /><span>=</span><img src="https://content.snauka.ru/web/98945_files/4(2).gif" alt="" width="98" height="22" /><span>.</span><span>, где n – кол-во модулей в программном средстве</span><br />
<span>Si – вес i-го модуля</span><br />
<span>Pi – оценка надежности i-го модуля</span></p>
<p><img src="https://content.snauka.ru/web/98945_files/5.gif" alt="" width="18" height="28" /><span>=</span><img src="https://content.snauka.ru/web/98945_files/5(1).gif" alt="" width="110" height="65" /><span>,</span><img src="https://content.snauka.ru/web/98945_files/5(2).gif" alt="" width="26" height="28" /><span>=1-</span><img src="https://content.snauka.ru/web/98945_files/6.gif" alt="" width="138" height="32" /><br />
<span>Для оценки надёжности i-го модуля данную формулу использовать не будем, т.к пользователь никаких данных не вводит. Программа запускается при нажатии кнопки Run.</span><br />
<span>Программным продуктом является сама игра Тетрис, написанная на java. Её модулями являются классы. Их всего восемь. Пользователи игры доступа к модулям не имеют. Имеет доступ только сам разработчик и тестировщик. Поэтому будем рассматривать программный продукт с точки зрения тестировщика.</span><br />
<span>Пусть вероятность просмотра модулей равна соответственно 0,05;0,1;0,05;0,4;0,05;0,25;0,05;0,05.</span><br />
<span>Вероятность ошибки возможно в самых крупных по числу строк модулях. Это 4 и 6 модули. В четвёртом модуле произошла ошибка типа Medium, а в шестом – типа High.</span><br />
<span>Вес ошибок Priceless, High, Medium, Low, None, Detrimental соответственно равны 0,4; 0,25; 0,2; 0,1; 0,04; 0,01.</span><br />
<span>Тогда оценка надежности всех модулей будет равна:</span><br />
<span>P = 1 – (0 * 0,05+0*0,1+0*0,05+0,2*0,4+0*0,05;0,25*0,25;0*0,05;0*0,05)</span><br />
<span>P = 1 – 0,1425 = 0,8575</span><br />
<span>Чтобы рассчитать веса модулей, сначала найдём знаменатель. Он должен равняться 1:</span></p>
<p><img src="https://content.snauka.ru/web/98945_files/6(1).gif" alt="" width="84" height="64" /></p>
<p><span>V1 = 0,356</span><br />
<span>V2 = 0,157</span><br />
<span>V3 = 0,00003</span><br />
<span>V4 = 0,025</span><br />
<span>V5 = 0,05</span><br />
<span>V6 = 0,15</span><br />
<span>V7 = 0,003</span><br />
<span>V8 = 0,1</span><br />
<span>V9 = 0,09</span><br />
<span>V10 = 0,05</span><br />
<span>V11 = 0,01897</span><br />
<span>Значения Xij возьмём из ранее найденных значений метрик:</span><br />
<span>X1 = 370/1029 = 0,356</span><br />
<span>Х2 = А/B = 0,457</span><br />
<span>Х3 = A/B = 0,036/1200 = 0,00003</span><br />
<span>X4=A/B = 1 / 8 = 0,125</span><br />
<span>X5=A/B = 3 / 4= 0,75</span><br />
<span>X6 =А/В=90/120 =0,75.</span><br />
<span>X7 =1/5 = 0,2</span><br />
<span>X8 =A/B = 1 / 2= 0,5</span><br />
<span>X9 =A/B = 5/ 8= 0,625</span><br />
<span>Х10 = А/В = 0,5</span><br />
<span>X11 = А/В = 0,02</span><br />
<span>Находим числитель по формуле </span></p>
<p><img src="https://content.snauka.ru/web/98945_files/7.gif" alt="" width="102" height="66" /></p>
<p><span>(0,356*0,356) +( 0,157*0,457) +( 0,00003*0,00003) +( 0,025*0,125) +</span><br />
<span>+(0,05*0,75) +(0,15*0,75) + (0,003*0,2) + (0,1*0,5) +(0,09+0,625) +</span><br />
<span>+ (0,05*0,5) +( 0,01897*0,02) = 0,1267+0,071+0,00000001+0,0031+</span><br />
<span>+0,0375+0,1125+0,0006+0,05+0,0562+0,025+0,0003 = 0,4829</span></p>
<p><span>Делим на единицу в знаменателе.</span><br />
<span>S = 0, 4829</span><br />
<span>Наконец находим оценку надёжности всего программного средства:</span><br />
<span>Pпс = P * S = 0,8575*0, 4829 = 0,414</span></p>
<div style="text-align: left" align="center"><strong><span>Результаты и их обсуждение</span></strong></div>
<p><span>Оценка надёжности программного средства показала, что данная программа является надёжной только на 40%.</span><br />
<span>В связи с этим рекомендуются следующие действия по увеличению надёжности ПП:</span><br />
<span>1. Проведение обширного тестирования (в особенности юнит-тесты, модульные тесты, интеграционные тесты, функциональные тесты);</span><br />
<span>2. Уменьшение числа классов (модулей программы) для лучшей производительности;</span><br />
<span>3. Постараться упростить функциональность (логику) программы, сделать код более гибким, не создавать лишнего.</span><br />
<span>4. Низкоуровневый подход к написанию кода (то есть создавать более простые структуры, методы поля, классы).</span></p>
<div style="text-align: left" align="center"><strong><span>Заключение</span></strong></div>
<p><span>В любой технике, аппаратно-программном обеспечении, системе есть шанс возникновения отказа. Отказ — событие, заключающееся в нарушении работоспособ­ного состояния объекта. В зависимости от целей исследования отказы подразделяют на: независимые и зависимые; внезапные и постепенные; параметрические и функциональные; конструкционные, производственные и эксплуатационные; перемежающие, сбои и т.д. Если пользователь (потребитель, покупатель, заказчик) хочет, чтобы его устройство прослужило ему как можно дольше, производитель обязан произвести оценку продукта по вышеуказанным критериям.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2022/11/98945/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
