количество строк исходного кода

В современном автомобиле строк кода больше чем…

Подписывайтесь на каналы:
@AutomotiveRu — новости автоиндустрии, железо и психология вождения
@TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. image loader. количество строк исходного кода фото. количество строк исходного кода-image loader. картинка количество строк исходного кода. картинка image loader. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Количество строк кода в современном автомобиле в 200 раз больше чем в Шаттле, в 60 раз больше, чем в истребителе F-22 Raptor, в 50 раз больше, чем в телескопе Хаббл, в 20 раз больше чем в марсоходе Curiosity, в 4 раза больше чем в истребителях пятого поколения, в 2 раза больше, чем в большом адронном коллайдере или Facebook, если распечатать весь код на бумаге, то стопка будет высотой 200 метров. (по данным на 2009-2012 год)

Данные по количеству строк кода в современном автомобиле вызвали бурные споры на Reddit. Вопросы на темы от «В каком месте эти строчки прячутся, если у микроконтроллеров ограничена память?» до «Разве количество строк кода хоть что-то значит?»

Сравнительные данные по количеству строк кода (SLOC) в различных проектах довольно интересные.

Маргарет Гамильтон и её исходники кода для посадки Апполон-11

Количество строк кода меньше миллиона

10.000 — Unix v 1.0 (1971) [пруф]
10.000 — простая игра для iOS app [пруф]
14.000 — Win32/Simile virus [пруф]
39.000 — iOS app — photo editing [пруф]
80.000 — электрокардиостимуятор [пруф]
120.000 — первая версия Photoshop v1 (1990) [пруф]
200.000 — браузер Camino [пруф]
310.000 — движок Quake 3 [пруф]
400.000 — Space Shuttle [пруф]

> миллиона

количество строк исходного кода. image loader. количество строк исходного кода фото. количество строк исходного кода-image loader. картинка количество строк исходного кода. картинка image loader. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Билл Гейтс в 1994 году демонстрирует, что на компакт-диск вмещается больше информации, чем на высоченные стопки бумаги.

1.000.000 строк кода помещается на 18.000 страницах, 2 метра высотой (в 14 раз больше чем «Война и мир», в 25 раз больше чем «Улисс», в 63 раза больше чем «Над пропастью во ржи»)

1.000.000 — игра Crysis [пруф]
1.140.000 — геном бактерии, вызывающей сифилис [пруф]
1.200.000 — Age of Empires Online [пруф]
1.200.000 — модель климата планеты CESM [пруф]
1.700.000 — истребитель F-22 Raptor [пруф]
1.800.000 — Linux Kernel 2.2.0 (1999) [пруф]
2.000.000 — Космический телескоп «Хаббл» [пруф]
2.000.000 — движок Unreal Engine 3 [пруф]
2.500.000 — Windows 3.1 (1992) [пруф]
3.500.000 — управляющий софт в дронах [пруф]
3.500.000 — софт для управления петабайтами данных с адронного коллайдера ROOT [пруф]
4.500.000 — Photoshop CS 6 (2012) [пруф]
4.500.000 — Windows NT 3.1 (1993) [пруф]
4.700.000 — HD DVD Players on XBox [пруф]
5.000.000 — марсоход Curiosity [пруф]
5.200.000 — Linux kernel 2.6.0 (2003) [пруф]
5.500.000 — сервер World of WarCraft [пруф]
6.100.000 — Windows XP Service Pack 1
6.500.000 — авионика и online support systems на Boeing 787 [пруф]
6.700.000 — Google Chrome [пруф]
7.500.000 — Windows NT 3.5 (1994) [пруф]
9.000.000 — LibreOffice [пруф]
9.500.000 — Windows NT 3.51 (1995) [пруф]
9.700.000 — Firefox [пруф]
10.000.000 — электроавтомобиль Chevy Volt [пруф]
10.000.000 — бухгалтерский программный пакет Intuit Quickbooks [пруф]
11.300.000 — OpenOffice [пруф]
11.500.000 — Windows NT 4.0 (1996) [пруф]
12.000.000 — Android (включая 3 миллиона строк на XML, 2.8 миллиона строк на C, 2.1 миллиона строк на Java и 1.75 миллиона строк на C++) [пруф]
12.500.000 — библитотеки Mozilla Core [пруф]
12.500.000 — MySQL [пруф]
14.000.000 — весь софт Boeing 787 [пруф]
15.000.000 — Android (верхняя оценка)
15.000.000 — Linux 3.1 (2013) [пруф]
20.000.000 — Linux kernel pre-4.2 (2015) [пруф]
23.000.000 — Apache Open Office [пруф]
24.000.000 — истребитель-бомбардировщик пятого поколения F-35 Fighter [пруф]
25.000.000 — Microsoft Office (2001) [пруф]
29.000.000 — Windows 2000 (2000) [пруф]
30.000.000 — Microsoft Office for Mac (2006) [пруф]
37.600.000 — Symbian [пруф]
40.000.000 — Windows 7 [пруф]
40.000.000 — Windows XP (2001) [пруф]
45.000.000 — Microsoft Office (2013) [пруф]
50.000.000 — Large Hadron Collider [пруф]
50.000.000 — Microsoft Visual Studio 2012 [пруф]
50.000.000 — Windows Vista (2007) [пруф]
62.000.000 — Facebook (without backend code) [пруф]
68.000.000 — Debian 5.0 codebase [пруф]
86.000.000 — Mac OS X 10.4 [пруф]
100.000.000 — софт в типичном новом автомобиле 2013 года [пруф]
324.000.000 — Debian 5.0 (all software in package) [пруф]
2.000.000.000 — Google [пруф] стопка распечатанных страниц высотой 3.6 км

количество строк исходного кода. image loader. количество строк исходного кода фото. количество строк исходного кода-image loader. картинка количество строк исходного кода. картинка image loader. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Мы копнули первоисточники и выяснили, что первыми про 100 миллионов строк кода заявили в журнале IEEE Spectrum, сославшись на почетного профессора Мюнхенского технического университета Манфред Брой, который заслужил медаль Конрада Цузе (почти нобелевка в области computer science) в публикации 2009 «This Car Runs on Code»:

These are impressive amounts of software, yet if you bought a premium-class automobile recently, ”it probably contains close to 100 million lines of software code,” says Manfred Broy, a professor of informatics at Technical University, Munich, and a leading expert on software in cars. All that software executes on 70 to 100 microprocessor-based electronic control units (ECUs) networked throughout the body of your car.

Подписывайтесь на каналы:
@AutomotiveRu — новости автоиндустрии, железо и психология вождения
@TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

О компании ИТЭЛМА

количество строк исходного кода. image loader. количество строк исходного кода фото. количество строк исходного кода-image loader. картинка количество строк исходного кода. картинка image loader. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Мы большая компания-разработчик automotive компонентов. В компании трудится около 2500 сотрудников, в том числе 650 инженеров.

Мы, пожалуй, самый сильный в России центр компетенций по разработке автомобильной электроники. Сейчас активно растем и открыли много вакансий (порядка 30, в том числе в регионах), таких как инженер-программист, инженер-конструктор, ведущий инженер-разработчик (DSP-программист) и др.

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

Источник

Количество строк кода в разных приложениях, системах

А вы задумывались из чего состоят системы которыми вы пользуетесь? Ответ на этот вопрос с вашей стороны меня не волнует (извините за возможную грубость). Сегодня, именно сегодня, я в любом случае расскажу вам о количестве строчек кода в разных проектах.

количество строк исходного кода. 157874985813647872. количество строк исходного кода фото. количество строк исходного кода-157874985813647872. картинка количество строк исходного кода. картинка 157874985813647872. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

3. А теперь вышедшая в 1996 году Windows NT 4.0, содержащая в себе 11-12 млн. строк.

количество строк исходного кода. 1578750380179849822. количество строк исходного кода фото. количество строк исходного кода-1578750380179849822. картинка количество строк исходного кода. картинка 1578750380179849822. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

4. Windows 2000. Просто молчу. целых 30 млн строк.

Стоит признать, это не предел, ведь дальше у нас Windows XP.

количество строк исходного кода. 1578750596110137788. количество строк исходного кода фото. количество строк исходного кода-1578750596110137788. картинка количество строк исходного кода. картинка 1578750596110137788. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1578750863172780891. количество строк исходного кода фото. количество строк исходного кода-1578750863172780891. картинка количество строк исходного кода. картинка 1578750863172780891. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Что-то мы застряли на «Винде». Давайте перейдем к Linux.

2. Linux 1.0.0 вышедший спустя 3 года состоял из более чем 170к строк.

3. Linux 1.2.0 появившийся на свет в 1995 был создан при помощь 300к строчек.

количество строк исходного кода. 1578751699128719219. количество строк исходного кода фото. количество строк исходного кода-1578751699128719219. картинка количество строк исходного кода. картинка 1578751699128719219. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Android? 12 млн. строк.

количество строк исходного кода. 1578752143157686353. количество строк исходного кода фото. количество строк исходного кода-1578752143157686353. картинка количество строк исходного кода. картинка 1578752143157686353. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Переходим к браузерам.

количество строк исходного кода. 157875237012962977. количество строк исходного кода фото. количество строк исходного кода-157875237012962977. картинка количество строк исходного кода. картинка 157875237012962977. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1578752656160440821. количество строк исходного кода фото. количество строк исходного кода-1578752656160440821. картинка количество строк исходного кода. картинка 1578752656160440821. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1578752768111694159. количество строк исходного кода фото. количество строк исходного кода-1578752768111694159. картинка количество строк исходного кода. картинка 1578752768111694159. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Переход к обсуждению приложений, программ, фреймворков.

количество строк исходного кода. 1578753087137265607. количество строк исходного кода фото. количество строк исходного кода-1578753087137265607. картинка количество строк исходного кода. картинка 1578753087137265607. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1578753176138937064. количество строк исходного кода фото. количество строк исходного кода-1578753176138937064. картинка количество строк исходного кода. картинка 1578753176138937064. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1578753388161893923. количество строк исходного кода фото. количество строк исходного кода-1578753388161893923. картинка количество строк исходного кода. картинка 1578753388161893923. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1578753620135094308. количество строк исходного кода фото. количество строк исходного кода-1578753620135094308. картинка количество строк исходного кода. картинка 1578753620135094308. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 157875377117885064. количество строк исходного кода фото. количество строк исходного кода-157875377117885064. картинка количество строк исходного кода. картинка 157875377117885064. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1578753923136775629. количество строк исходного кода фото. количество строк исходного кода-1578753923136775629. картинка количество строк исходного кода. картинка 1578753923136775629. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 157875400114073280. количество строк исходного кода фото. количество строк исходного кода-157875400114073280. картинка количество строк исходного кода. картинка 157875400114073280. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Надеюсь вам понравилось!

Найдены дубликаты

Для unreal engine взяли скриншот окна cinema 4d. Автор «потрудился» над статьёй как надо.

Игра «Посадка на Луну» на калькуляторе МК60: 1 (одна) строка кода.

Полный бред полного чайника.

Почти все сравнения некорректны типа кода в ЯДРЕ LINUX коим явлется Linux и ПОЛНОЙ СИСТЕМЕ где в 10 раз больше в GNU окружении даже уровня IceWM, а в полноценном DE ещё процентов 20 накинет как в ядре. А винда это полная система, ядро у неё к слову, достаточно простое и рядом с NET не стояло, так же начиная с 2000/xp винды не особо росло.

И каков, интересно, процент строк, состоящих из одной только фигурной скобочки?

Люблю, когда мне льстят.

Какой-то бред написан.

Приводится количество строк кода. чего? Ядра и модулей?

Вспоминается количество матерных слов в комментариях к коду разных версий Linux

количество строк исходного кода. 1578754550184676773. количество строк исходного кода фото. количество строк исходного кода-1578754550184676773. картинка количество строк исходного кода. картинка 1578754550184676773. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Некоторые кодят так, как Маяковский стихи писал, так что количество строк имхо далеко не показатель

количество строк исходного кода. m688159 1962074288. количество строк исходного кода фото. количество строк исходного кода-m688159 1962074288. картинка количество строк исходного кода. картинка m688159 1962074288. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Проект Семь пятниц на неделе #217. День программиста в високосные годы

количество строк исходного кода. 1631432933132957389. количество строк исходного кода фото. количество строк исходного кода-1631432933132957389. картинка количество строк исходного кода. картинка 1631432933132957389. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Конечно же это просто юмор. И вообще очень интересно наблюдать, как 15 лет назад все угарали с «компьютерщиков» и помногу раз пересказывали шутеечки формата «в ванной нашли труп программиста с пустой бутылкой от шампуня, на которой было написано: намылить, смыть, повторить» и «программист перед сном ставит на тумбочку два стакана — с водой и пустой, первый на случай если захочется пить, а второй — если не захочется». А еще 15 лет назад все родители хотели видеть своих чад выпускниками юридических и экономических вузов. А теперь те самые «компьютерщики» правят миром, и пишут программное обеспечение, которое скоро заменит тех самых юристов и экономистов. Вон, года три-четыре назад Сбер анонсировал увольнение штата юристов и замены их нейросеткой.

Я каждый день с 8 февраля рисую по комиксу, связанному с событием произошедшим в эту дату, когда она была пятницей! Если хотите поддержать меня, то вот — http://desvvt.art/

количество строк исходного кода. m395469 1406591541. количество строк исходного кода фото. количество строк исходного кода-m395469 1406591541. картинка количество строк исходного кода. картинка m395469 1406591541. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1630444348273119023. количество строк исходного кода фото. количество строк исходного кода-1630444348273119023. картинка количество строк исходного кода. картинка 1630444348273119023. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Тут уже не до красоты

количество строк исходного кода. 1631030602165381673. количество строк исходного кода фото. количество строк исходного кода-1631030602165381673. картинка количество строк исходного кода. картинка 1631030602165381673. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. m2429689 780169393. количество строк исходного кода фото. количество строк исходного кода-m2429689 780169393. картинка количество строк исходного кода. картинка m2429689 780169393. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1615813986233369554. количество строк исходного кода фото. количество строк исходного кода-1615813986233369554. картинка количество строк исходного кода. картинка 1615813986233369554. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Linkin Park OS и 2000 год

Сегодня был на сайте Linkin Park и случайно забрёл в имитатор старой ОС под браузером. Вышло оригинально. Не ожидал от Linkin Park такого.

количество строк исходного кода. 1630752211145583729. количество строк исходного кода фото. количество строк исходного кода-1630752211145583729. картинка количество строк исходного кода. картинка 1630752211145583729. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1630752217166994680. количество строк исходного кода фото. количество строк исходного кода-1630752217166994680. картинка количество строк исходного кода. картинка 1630752217166994680. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. 1630752224154859144. количество строк исходного кода фото. количество строк исходного кода-1630752224154859144. картинка количество строк исходного кода. картинка 1630752224154859144. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

количество строк исходного кода. m2533627 1945366223. количество строк исходного кода фото. количество строк исходного кода-m2533627 1945366223. картинка количество строк исходного кода. картинка m2533627 1945366223. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

День рождения Тетриса

количество строк исходного кода. 1630176376119562982. количество строк исходного кода фото. количество строк исходного кода-1630176376119562982. картинка количество строк исходного кода. картинка 1630176376119562982. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Tetris: From Russia With Love

6 июня 1984 года — советский программист Алексей Пажитнов представил компьютерную игру «Тетрис». Множество производителей видеоигр сделали на ней миллионы. За продажу лицензии Пажитнов получил один IBM-совместимый компьютер 286-й модели.

Интерес к фигурам домино, тримино, тетрамино и пентамино в СССР возник благодаря книге С. В. Голомба «Полимино» (издательство «Мир», 1975 год).

количество строк исходного кода. 1630176466138448800. количество строк исходного кода фото. количество строк исходного кода-1630176466138448800. картинка количество строк исходного кода. картинка 1630176466138448800. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

В частности, пентамино было настолько популярно, что в «Науке и жизни» начиная с 1960-х годов был постоянный раздел, посвящённый составлению фигурок из набора пентамино, а пластмассовые наборы пентамино иногда продавались в магазинах.

количество строк исходного кода. 1630176517121182927. количество строк исходного кода фото. количество строк исходного кода-1630176517121182927. картинка количество строк исходного кода. картинка 1630176517121182927. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

«Тетрис» был впервые написан Алексеем Пажитновым в июне 1984 года на компьютере Электроника-60. Работая в ВЦ Академии наук СССР, Пажитнов занимался проблемами искусственного интеллекта и распознавания речи, а для обкатки идей применял головоломки, в том числе и классическое пентамино. Пажитнов пытался автоматизировать укладку пентамино в заданные фигурки. Однако вычислительных мощностей тогдашнего оборудования для вращения пентамино не хватало, приходилось отлаживать на тетрамино, что и определило название игры. В тех опытах и родилась основная идея «Тетриса» — чтобы фигурки падали, а заполненные ряды исчезали.

количество строк исходного кода. 1630176569145190739. количество строк исходного кода фото. количество строк исходного кода-1630176569145190739. картинка количество строк исходного кода. картинка 1630176569145190739. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Для IBM PC игра была переписана на Turbo Pascal 16-летним школьником Вадимом Герасимовым. Игра быстро распространилась по Москве и далее по всему миру.

Несколько месяцев спустя про игру узнал импортер программного обеспечения из Венгрии — Роберт Стейн.

количество строк исходного кода. 1630176744182288502. количество строк исходного кода фото. количество строк исходного кода-1630176744182288502. картинка количество строк исходного кода. картинка 1630176744182288502. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Стейн поехал в Москву, где он встретился с Алексеем Пажитновым, и договорился о лицензии на выпуск игры. По какой-то неизвестной для Стейна причине Пажитнов подарил ему тетрис. Роберт Стейн сразу решил, что игру можно было свободно издавать.

В 1988 году разработчик и издатель игр нидерландского происхождения Хенк Роджерс занимался ввозом новых игр в Японию. Он познакомился с тетрисом в 1988 году на выставке бытовой электроники в Лас-Вегасе. Он ходил по выставкам, покупал понравившееся ему игры и привозил их в Японию, где их издавали не платя за лицензию. Хенк поиграл в тетрис и ушел, потом вернулся, опять поиграл и ушел, потом опять вернулся и поиграл — игра затягивала.

Стейн продал права на «Тетрис» компании Mirrorsoft (и её дочерней компании Spectrum HoloByte), принадлежащей британскому медиа-магнату Роберту Максвеллу. У игры появляются качественные по меркам того времени графика и звук, а также «русский колорит» — в фоновых заставках программы появляются Юрий Гагарин, Матиас Руст, незадолго до этого совершивший посадку своего спортивного самолета на Красной площади, и другие подобающие случаю персонажи. На глазах рождается сенсация — первая игра из-за «железного занавеса».

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

Spectrum Holobyte и Mirrorsoft на условиях сублицензирования продают права на разработку консольных версий «Тетриса» соответственно фирмам Bullet-Proof Software и Atari Games. При этом первая получает возможность разрабатывать программы только для систем, продающихся на японском рынке. Условия второй гораздо выгоднее — её «зона ответственности» включает Японию и США.

В 1989 году в Nintendo полным ходом идет разработка карманного игрового компьютера Game Boy. Глава американского отделения фирмы Минору Аракава (Minoru Arakawa) убеждает президента Bullet-Proof Software Хенка Роджерса (Henk Rogers) вступить в переговоры со Стейном по поводу возможности разработки версии «Тетриса» для Game Boy.

количество строк исходного кода. 1630176993158477879. количество строк исходного кода фото. количество строк исходного кода-1630176993158477879. картинка количество строк исходного кода. картинка 1630176993158477879. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Nintendo от продажи игры получила очень неплохие прибыли, но сам Алексей Пажитнов смог воспользоваться плодами своего детища только в 1996 году, когда истёк срок первоначальной лицензии, и он начал получать первые (весьма небольшие) отчисления от продаж.

В 1996 году он с Хенком Роджерсом (англ. Henk Rogers) создал компании The Tetris Company LLC и Blue Planet Software, пытаясь получить прибыль от бренда Tetris. The Tetris Company LLC (TTC) зарегистрировала слово Tetris как торговую марку. С тех пор несколько компаний купили у TTC лицензию на торговую марку, но законность игр тетрамино, которые не используют название Tetris, не оспаривалась в суде. По американским законам, игру нельзя защитить авторским правом (только запатентовать), поэтому основным имуществом компании является торговая марка Tetris. Несмотря на это, TTC преследует клоны игры под именами, непохожими на Tetris. В мае 2010 года юрист TTC послал письмо в Google с требованием убрать с рынка Android Market все 35 клона данной игры, хотя их имена не схожи с именем «Tetris».

количество строк исходного кода. 163017706815161245. количество строк исходного кода фото. количество строк исходного кода-163017706815161245. картинка количество строк исходного кода. картинка 163017706815161245. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

В 1996 году Алексей Пажитнов устроился на работу в Microsoft, где под его руководством был выпущен набор головоломок Pandora’s Box.

количество строк исходного кода. 1630177112182322604. количество строк исходного кода фото. количество строк исходного кода-1630177112182322604. картинка количество строк исходного кода. картинка 1630177112182322604. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla

Сейчас непосредственно программированием Алексей Пажитнов уже давно не занимается, он работал в подразделении Microsoft разработчиком компьютерных игр с 1996 по 2005 год.

29 июня 2010 года, в интервью журналистам одного из геймерских порталов, Алексей Пажитнов сказал, что последние десять лет он работал над многопользовательским режимом для своего детища. Но ещё не закончил.

Слово «тетрис» происходит от греческого «tetra» — четыре, поскольку все фигуры в игре состоят из четырех элементов, скрещенного со словом «теннис». Также существует модификация игры — Пентикс, (от греч. «penta» — пять), в которой фигуры могут состоять из элементов в количестве от одного до пяти.

Вариаций тетриса достаточно много, в том числе трехмерный тетрис, n-мерный тетрис, Polytope Tetris и прочие модификации, со вводными элементами. Идея восходит к старым развлечениям с тетрамино, то есть Пажитнов как бы не на пустом месте его придумал. Что, впрочем, не умаляет гениальности сей затеи.

Основная суть игры — заполнить как можно больше линий блоками тетрамино, не достигнув верхней части экрана. Все заполняемые линии будут удаляться. Игра, теоретически, является бесконечной, а практически — рано или поздно конец игры неминуемо настанет. Но особо трагичный конец случается когда садятся батарейки!

Если играть в тетрис какое-нибудь значимое время (часа 4), а потом лечь спать, то игра удивительным образом продолжается из-за одноименного эффекта.

В Америке ходили слухи, что тетрис был советским планом коммунистов для подрыва производительности американского труда.

Источник

Программный код и его метрики

количество строк исходного кода. image loader. количество строк исходного кода фото. количество строк исходного кода-image loader. картинка количество строк исходного кода. картинка image loader. Подписывайтесь на каналы: @AutomotiveRu — новости автоиндустрии, железо и психология вождения @TeslaHackers — сообщество российских Tesla-хакеров, прокат и обучение дрифту на Tesla
Одной из тем в программировании, к которым интерес периодически то появляется, то пропадает, является вопрос метрик кода программного обеспечения. В крупных программных средах время от времени появляются механизмы подсчета различных метрик. Волнообразный интерес к теме так выглядит потому, что до сих пор в метриках не придумано главного — что с ними делать. То есть даже если какой-то инструмент позволяет хорошо подсчитать некоторые метрики, то что с этим делать дальше зачастую непонятно. Конечно, метрики — это и контроль качества кода (не пишем большие и сложные функции), и «производительность» (в кавычках) программистов, и скорость развития проекта. Эта статья — обзор наиболее известных метрик кода программного обеспечения.

Введение

В статье приведен обзор 7 классов метрик и более 50 их представителей.

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

В общем случае применение метрик позволяет руководителям проектов и предприятий изучить сложность разработанного или даже разрабатываемого проекта, оценить объем работ, стилистику разрабатываемой программы и усилия, потраченные каждым разработчиком для реализации того или иного решения. Однако метрики могут служить лишь рекомендательными характеристиками, ими нельзя полностью руководствоваться, так как при разработке ПО программисты, стремясь минимизировать или максимизировать ту или иную меру для своей программы, могут прибегать к хитростям вплоть до снижения эффективности работы программы. Кроме того, если, к примеру, программист написал малое количество строк кода или внес небольшое число структурных изменений, это вовсе не значит, что он ничего не делал, а может означать, что дефект программы было очень сложно отыскать. Последняя проблема, однако, частично может быть решена при использовании метрик сложности, т.к. в более сложной программе ошибку найти сложнее.

1. Количественные метрики

Прежде всего, следует рассмотреть количественные характеристики исходного кода программ (в виду их простоты). Самой элементарной метрикой является количество строк кода (SLOC). Данная метрика была изначально разработана для оценки трудозатрат по проекту. Однако из-за того, что одна и та же функциональность может быть разбита на несколько строк или записана в одну строку, метрика стала практически неприменимой с появлением языков, в которых в одну строку может быть записано больше одной команды. Поэтому различают логические и физические строки кода. Логические строки кода — это количество команд программы. Данный вариант описания так же имеет свои недостатки, так как сильно зависит от используемого языка программирования и стиля программирования [2].

Также к группе метрик, основанных на подсчете некоторых единиц в коде программы, относят метрики Холстеда [3]. Данные метрики основаны на следующих показателях:

n1 — число уникальных операторов программы, включая символы-

разделители, имена процедур и знаки операций (словарь операторов),

n2 — число уникальных операндов программы (словарь операндов),

N1 — общее число операторов в программе,

N2 — общее число операндов в программе,

n1′ — теоретическое число уникальных операторов,

n2′ — теоретическое число уникальных операндов.

Учитывая введенные обозначения, можно определить:

n=n1+n2 — словарь программы,

N=N1+N2 — длина программы,

n’=n1’+n2′ — теоретический словарь программы,

N’= n1*log2(n1) + n2*log2(n2) — теоретическая длина программы (для стилистически корректных программ отклонение N от N’ не превышает 10%)

V=N*log2n — объем программы,

V’=N’*log2n’ — теоретический объем программы, где n* — теоретический словарь программы.

L=V’/V — уровень качества программирования, для идеальной программы L=1

L’= (2 n2)/ (n1*N2) — уровень качества программирования, основанный лишь на параметрах реальной программы без учета теоретических параметров,

EC=V/(L’)2 — сложность понимания программы,

D=1/ L’ — трудоемкость кодирования программы,

y’ = V/ D2 — уровень языка выражения

I=V/D — информационное содержание программы, данная характеристика позволяет определить умственные затраты на создание программы

E=N’ * log2(n/L) — оценка необходимых интеллектуальных усилий при разработке программы, характеризующая число требуемых элементарных решений при написании программы

При применении метрик Холстеда частично компенсируются недостатки, связанные с возможностью записи одной и той же функциональности разным количеством строк и операторов.

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

2. Метрики сложности потока управления программы

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

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

Пусть представлена некоторая программа. Для данной программы строится ориентированный граф, содержащий лишь один вход и один выход, при этом вершины графа соотносят с теми участками кода программы, в которых имеются лишь последовательные вычисления, и отсутствуют операторы ветвления и цикла, а дуги соотносят с переходами от блока к блоку и ветвями выполнения программы. Условие при построении данного графа: каждая вершина достижима из начальной, и конечная вершина достижима из любой другой вершины [4].

К сожалению, данная оценка не способна различать циклические и условные конструкции. Еще одним существенным недостатком подобного подхода является то, что программы, представленные одними и теми же графами, могут иметь совершенно разные по сложности предикаты (предикат — логическое выражение, содержащее хотя бы одну переменную).

Для исправления данного недостатка Г. Майерсом была разработана новая методика. В качестве оценки он предложил взять интервал (эта оценка еще называется интервальной) [V(G),V(G)+h], где h для простых предикатов равно нулю, а для n-местных h=n-1. Данный метод позволяет различать разные по сложности предикаты, однако на практике он почти не применяется.

Продолжая тему анализа управляющего графа программы, можно выделить еще одну подгруппу метрик — метрики Харрисона, Мейджела.

Данные меры учитывает уровень вложенности и протяженность программы.

Каждой вершине присваивается своя сложность в соответствии с оператором, который она изображает. Эта начальная сложность вершины может вычисляться любым способом, включая использование мер Холстеда. Выделим для каждой предикатной вершины подграф, порожденный вершинами, которые являются концами исходящих из нее дуг, а также вершинами, достижимыми из каждой такой вершины (нижняя граница подграфа), и вершинами, лежащими на путях из предикатной вершины в какую-нибудь нижнюю границу. Этот подграф называется сферой влияния предикатной вершины.

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

Функциональная мера (SCOPE) программы — это сумма приведенных сложностей всех вершин управляющего графа.

Функциональным отношением (SCORT) называется отношение числа вершин в управляющем графе к его функциональной сложности, причем из числа вершин исключаются терминальные.

SCORT может принимать разные значения для графов с одинаковым цикломатическим числом.

Метрика Пивоварского — очередная модификация меры цикломатической сложности. Она позволяет отслеживать различия не только между последовательными и вложенными управляющими конструкциями, но и между структурированными и неструктурированными программами. Она выражается отношением N(G) = v *(G) + СУММАPi, где v *(G) — модифицированная цикломатическая сложность, вычисленная так же, как и V(G), но с одним отличием: оператор CASE с n выходами рассматривается как один логический оператор, а не как n — 1 операторов.

Рi — глубина вложенности i-й предикатной вершины. Для подсчета глубины вложенности предикатных вершин используется число «сфер влияния». Под глубиной вложенности понимается число всех «сфер влияния» предикатов, которые либо полностью содержатся в сфере рассматриваемой вершины, либо пересекаются с ней. Глубина вложенности увеличивается за счет вложенности не самих предикатов, а «сфер влияния». Мера Пивоварского возрастает при переходе от последовательных программ к вложенным и далее к неструктурированным, что является ее огромным преимуществом перед многими другими мерами данной группы.

Мера Вудворда — количество пересечений дуг управляющего графа. Так как в хорошо структурированной программе таких ситуаций возникать не должно, то данная метрика применяется в основном в слабо структурированных языках (Ассемблер, Фортран). Точка пересечения возникает при выходе управления за пределы двух вершин, являющихся последовательными операторами.

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

Пусть G — управляющий граф программы с единственной начальной и единственной конечной вершинами.

В этом графе число входящих вершин у дуг называется отрицательной степенью вершины, а число исходящих из вершины дуг — положительной степенью вершины. Тогда набор вершин графа можно разбить на две группы: вершины, у которых положительная степень =2.

Вершины первой группы назовем принимающими вершинами, а вершины второй группы — вершинами отбора.

Каждая принимающая вершина имеет приведенную сложность, равную 1, кроме конечной вершины, приведенная сложность которой равна 0. Приведенные сложности всех вершин графа G суммируются, образуя абсолютную граничную сложность программы. После этого определяется относительная граничная сложность программы:

где S0 — относительная граничная сложность программы, Sa — абсолютная граничная сложность программы, v — общее число вершин графа программы.

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

3. Метрики сложности потока управления данными

Следующий класс метрик — метрики сложности потока управления данных.

Метрика Чепина: суть метода состоит в оценке информационной прочности отдельно взятого программного модуля с помощью анализа характера использования переменных из списка ввода-вывода.

Все множество переменных, составляющих список ввода-вывода, разбивается на 4 функциональные группы :

1. P — вводимые переменные для расчетов и для обеспечения вывода,

2. M — модифицируемые, или создаваемые внутри программы переменные,

3. C — переменные, участвующие в управлении работой программного модуля (управляющие переменные),

4. T — не используемые в программе («паразитные») переменные.

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

Q = a1*P + a2*M + a3*C + a4*T,

где a1, a2, a3, a4 — весовые коэффициенты.

Весовые коэффициенты использованы для отражения различного влияния на сложность программы каждой функциональной группы. По мнению автора метрики, наибольший вес, равный 3, имеет функциональная группа C, так как она влияет на поток управления программы. Весовые коэффициенты остальных групп распределяются следующим образом: a1=1, a2=2, a4=0.5. Весовой коэффициент группы T не равен 0, поскольку «паразитные» переменные не увеличивают сложность потока данных программы, но иногда затрудняют ее понимание. С учетом весовых коэффициентов:

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

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

Пара «модуль-глобальная переменная» обозначается как (p,r), где p — модуль, имеющий доступ к глобальной переменной r. В зависимости от наличия в программе реального обращения к переменной r формируются два типа пар «модуль — глобальная переменная»: фактические и возможные. Возможное обращение к r с помощью p показывает, что область существования r включает в себя p.

Данная характеристика обозначается Aup и говорит о том, сколько раз модули Up действительно получали доступ к глобальным переменным, а число Pup — сколько раз они могли бы получить доступ.

Отношение числа фактических обращений к возможным определяется

Эта формула показывает приближенную вероятность ссылки произвольного модуля на произвольную глобальную переменную. Очевидно, что чем выше эта вероятность, тем выше вероятность «несанкционированного» изменения какой-либо переменной, что может существенно осложнить работы, связанные с модификацией программы.

На основе концепции информационных потоков создана мера Кафура. Для использования данной меры вводятся понятия локального и глобального потока: локальный поток информации из A в B существует, если:

1. Модуль А вызывает модуль В (прямой локальный поток)

2. Модуль В вызывает модуль А и А возвращает В значение, которое используется в В (непрямой локальный поток)

3. Модуль С вызывает модули А, В и передаёт результат выполнения модуля А в В.

Далее следует дать понятие глобального потока информации: глобальный поток информации из А в В через глобальную структуру данных D существует, если модуль А помещает информацию в D, а модуль В использует информацию из D.

На основе этих понятий вводится величина I — информационная сложность процедуры:
I = length * (fan_in * fan_out)2
Здесь:

length — сложность текста процедуры (меряется через какую-нибудь из метрик объёма, типа метрик Холстеда, Маккейба, LOC и т.п.)

fan_in — число локальных потоков входящих внутрь процедуры плюс число структур данных, из которых процедура берёт информацию

fan_out — число локальных потоков исходящих из процедуры плюс число структур данных, которые обновляются процедурой

Можно определить информационную сложность модуля как сумму информационных сложностей входящих в него процедур.

Следующий шаг — рассмотреть информационную сложность модуля относительно некоторой структуры данных. Информационная мера сложности модуля относительно структуры данных:

J = W * R + W * RW + RW *R + RW * (RW — 1)

W — число процедур, которые только обновляют структуру данных;

R — только читают информацию из структуры данных;

RW — и читают, и обновляют информацию в структуре данных.

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

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

Обозначим через R(i) множество определяющих вхождений переменных, которые расположены в радиусе действия луча i (определяющее вхождение переменной находится в радиусе действия луча, если переменная либо локальна в нём и имеет определяющее вхождение, либо для неё есть определяющее вхождение в некотором предшествующем луче, и нет локального определения по пути). Обозначим через V(i) множество переменных, использующие вхождения которых уже есть в луче i. Тогда мера сложности i-го луча задаётся как:

где DEF(vj) — число определяющих вхождений переменной vj из множества R(i), а ||V(i)|| — мощность множества V(i).

4. Метрики сложности потока управления и данных программы

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

Первой из таких метрик является тестирующая М-Мера [5]. Тестирующей мерой М называется мера сложности, удовлетворяющая следующим условиям:

Мера возрастает с глубиной вложенности и учитывает протяженность программы. К тестирующей мере близко примыкает мера на основе регулярных вложений. Идея этой меры сложности программ состоит в подсчете суммарного числа символов (операндов, операторов, скобок) в регулярном выражении с минимально необходимым числом скобок, описывающим управляющий граф программы. Все меры этой группы чувствительны к вложенности управляющих конструкций и к протяженности программы. Однако возрастает уровень трудоемкости вычислений.

Также мерой качества программного обеспечения служит связанность модулей программы [6]. Если модули сильно связанны, то программа становится трудномодифицируемой и тяжелой в понимании. Данная мера не выражается численно. Виды связанности модулей:

Связанность по данным — если модули взаимодействуют через передачу параметров и при этом каждый параметр является элементарным информационным объектом. Это наиболее предпочтительный тип связанности (сцепления).

Связанность по структуре данных — если один модуль посылает другому составной информационный объект (структуру) для обмена данными.

Связанность по управлению — если один посылает другому информационный объект — флаг, предназначенный для управления его внутренней логикой.

Модули связаны по общей области в том случае, если они ссылаются на одну и туже область глобальных данных. Связанность (сцепление) по общей области является нежелательным, так как, во-первых, ошибка в модуле, использующем глобальную область, может неожиданно проявиться в любом другом модуле; во-вторых, такие программы трудны для понимания, так как программисту трудно определить какие именно данные используются конкретным модулем.

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

Внешняя связанность — два модуля используют внешние данные, например коммуникационный протокол.

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

Отсутствие связанности — модули не взаимодействуют между собой.

Подклассовая связанность — отношение между классом-родителем и классом-потомком, причем потомок связан с родителем, а родитель с потомком — нет.

Связанность по времени — два действия сгруппированы в одном модуле лишь потому, что ввиду обстоятельств они происходят в одно время.

Еще одна мера, касающаяся стабильности модуля — мера Колофелло [7], она может быть определена как количество изменений, которые требуется произвести в модулях, отличных от модуля, стабильность которого проверяется, при этом эти изменения должны касаться проверяемого модуля.

1. Для каждой управляющей переменной i вычисляется значениt её сложностной функции C(i) по формуле: C(i) = (D(i) * J(i))/n.

Где D(i) — величина, измеряющая сферу действия переменной i. J(i) — мера сложности взаимодействия модулей через переменную i, n — число отдельных модулей в схеме разбиения.

2. Для всех модулей, входящих в сферу разбиения, определяется значение их сложностных функций M(P) по формуле M(P) = fp * X(P) + gp * Y(P)
где fp и gp — соответственно, число модулей, непосредственно предшествующих и непосредственно следующих за модулем P, X(P) — сложность обращения к модулю P,

Y(P) — сложность управления вызовом из модуля P других модулей.

3. Общая сложность MP иерархической схемы разбиения программы на модули задаётся формулой:

MP = СУММА(M(P)) по всем возможным значениям P — модулям программы.

Данная метрика ориентирована на программы, хорошо структурированные, составленные из иерархических модулей, задающих функциональную спецификацию и структуру управления. Также подразумевается, что в каждом модуле одна точка входа и одна точка выхода, модуль выполняет ровно одну функцию, а вызов модулей осуществляется в соответствии с иерархической системой управления, которая задаёт отношение вызова на множестве модулей программы.

Также существует метрика, основанная на информационной концепции — мера Берлингера [8]. Мера сложности вычисляется как M=СУММАfi*log2pi, где fi — частота появления i-го символа, pi — вероятность его появления.

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

5. Объектно-ориентированные метрики

В связи с развитием объектно-ориентированных языков программирования появился новый класс метрик, также называемый объектно-ориентированными метриками. В данной группе наиболее часто используемыми являются наборы метрик Мартина и набор метрик Чидамбера и Кемерера. Для начала рассмотрим первую подгруппу.

Прежде чем начать рассмотрение метрик Мартина необходимо ввести понятие категории классов [9]. В реальности класс может достаточно редко быть повторно использован изолированно от других классов. Практически каждый класс имеет группу классов, с которыми он работает в кооперации, и от которых он не может быть легко отделен. Для повторного использования таких классов необходимо повторно использовать всю группу классов. Такая группа классов сильно связна и называется категорией классов. Для существования категории классов существуют следующие условия:

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

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

Классы в категории разделяют некоторую общую функцию или достигают некоторой общей цели.

Ответственность, независимость и стабильность категории могут быть измерены путем подсчета зависимостей, которые взаимодействуют с этой категорией. Могут быть определены три метрики :

1. Ca: Центростремительное сцепление. Количество классов вне этой категории, которые зависят от классов внутри этой категории.

2. Ce: Центробежное сцепление. Количество классов внутри этой категории, которые зависят от классов вне этой категории.

3. I: Нестабильность: I = Ce / (Ca+Ce). Эта метрика имеет диапазон значений [0,1].

I = 0 указывает максимально стабильную категорию.

I = 1 указывает максимально не стабильную категорию.

Можно определять метрику, которая измеряет абстрактность (если категория абстрактна, то она достаточно гибкая и может быть легко расширена) категории следующим образом:

A: Абстрактность: A = nA / nAll.

Значения этой метрики меняются в диапазоне [0,1].

0 = категория полностью конкретна,

1 = категория полностью абстрактна.

Теперь на основе приведенных метрик Мартина можно построить график, на котором отражена зависимость между абстрактностью и нестабильностью. Если на нем построить прямую, задаваемую формулой I+A=1, то на этой прямой будут лежать категории, имеющие наилучшую сбалансированность между абстрактностью и нестабильностью. Эта прямая называется главной последовательностью.

Далее можно ввести еще 2 метрики:

Расстояние до главной последовательности: D=|(A+I-1)/sqrt(2)|

Нормализированной расстояние до главной последовательности: Dn=|A+I-2|

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

Следующая подгруппа метрик — метрики Чидамбера и Кемерера [10]. Эти метрики основаны на анализе методов класса, дерева наследования и т.д.

WMC (Weighted methods per class), суммарная сложность всех методов класса: WMC=СУММАci, i=1. n, где ci — сложность i-го метода, вычисленная по какой либо из метрик (Холстеда и т.д. в зависимости от интересующего критерия), если у всех методов сложность одинаковая, то WMC=n.

DIT (Depth of Inheritance tree) — глубина дерева наследования (наибольший путь по иерархии классов к данному классу от класса-предка), чем больше, тем лучше, так как при большей глубине увеличивается абстракция данных, уменьшается насыщенность класса методами, однако при достаточно большой глубине сильно возрастает сложность понимания и написания программы.

NOC (Number of children) — количество потомков (непосредственных), чем больше, тем выше абстракция данных.

CBO (Coupling between object classes) — сцепление между классами, показывает количество классов, с которыми связан исходный класс. Для данной метрики справедливы все утверждения, введенные ранее для связанности модулей, то есть при высоком CBO уменьшается абстракция данных и затрудняется повторное использование класса.

RFC (Response for a class) — RFC=|RS|, где RS — ответное множество класса, то есть множество методов, которые могут быть потенциально вызваны методом класса в ответ на данные, полученные объектом класса. То есть RS=(((i>), i=1. n, где M — все возможные методы класса, Ri — все возможные методы, которые могут быть вызваны i-м классом. Тогда RFC будет являться мощностью данного множества. Чем больше RFC, тем сложнее тестирование и отладка.

6. Метрики надежности

Следующий тип метрик — метрики, близкие к количественным, но основанные на количестве ошибок и дефектов в программе. Нет смысла рассматривать особенности каждой из этих метрик, достаточно будет их просто перечислить: количество структурных изменений, произведенных с момента прошлой проверки, количество ошибок, выявленных в ходе просмотра кода, количество ошибок, выявленных при тестировании программы и количество необходимых структурных изменений, необходимых для корректной работы программы. Для больших проектов обычно рассматривают данные показатели в отношении тысячи строк кода, т.е. среднее количество дефектов на тысячу строк кода.

7. Гибридные метрики

В завершении необходимо упомянуть еще один класс метрик, называемых гибридными. Метрики данного класса основываются на более простых метриках и представляют собой их взвешенную сумму. Первым представителем данного класса является метрика Кокола. Она определяется следующим образом:

H_M = (M + R1 * M(M1) +… + Rn * M(Mn)/(1 + R1 +… + Rn)

Где M — базовая метрика, Mi — другие интересные меры, Ri — корректно подобранные коэффициенты, M(Mi) — функции.

Функции M(Mi) и коэффициенты Ri вычисляются с помощью регрессионного анализа или анализа задачи для конкретной программы.

В результате исследований, автор метрики выделил три модели для мер: Маккейба, Холстеда и SLOC, где в качестве базовой используется мера Холстеда. Эти модели получили название «наилучшая», «случайная» и «линейная».

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

(структура, взаимодействие, объем, данные) СУММА(a, b, c, d).

(сложность интерфейса, вычислительная сложность, сложность ввода/вывода, читабельность) СУММА(x, y, z, p).

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *