метрика сложности программ (статья Гэнссла)

 

au

   
★★
С примерами, в том числе линуксы.

Taming software complexity

A simple equation can help you measure the complexity of your code.

// www.embedded.com
 

 
+
-
edit
 
+
-
edit
 

Balancer

администратор
★★★★☆
Хех. А что оно даёт? :)

...

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

ИМХО, сложность программ мало коррелирует с их функционалом, обратно коррелирует с их расширяемостью и прямо коррелирует с уровнем ошибок :D

...

/me картинок по ссылке не нашёл.
 
+
-
edit
 

Mishka

модератор
★★☆
С этими старыми метриками есть проблемы. Просто сейчас ренесанс с технологиями программирования. У меня начальник (Терехов) как раз этими вещами занималься. В приведённой метрике что плохо, так это то, что CASE всегда добавляет офигенно сложности. А учёт идёт чисто механический. Та же функция перекодировки на основе CASE или разбор команды не слишком усложняет реальную функциональность, но v(G) просто уходит в небеса. И внести ошибку в такую процедурку достаточно сложно.

Кстати, расширяемость тоже ещё та священная корова. Если ей на альтарь ложить очень много, то сложность функции возрастёт настолько, что понять эту функцию будет затруднительно. Хороший пример в этом смысле — STL — надо посмотреть внутрь, чтобы понять, что средний человек никогда не поймёт все тонкости реализации. А с расширяемостью там всё отлично.

У меня есть куски кода, точнее два файла: h — 1223 строки, с++ — 2073. Методов и процедур там 236. Что даёт очень маленькое количество кода на процедуру. Соответственно и v(G) будет очень маленькое. Но там настолько использует Generic Programming и Template-ы в купе с pattern-ми, наследованием, что у нас туда никто не лазит никто, кроме меня. А сделал я там аггрегация Netflow траффика по типу БД, т.е. то, что выражается SQL Statement:
SELECT SUM(A), SUM(B) FROM T1 GROUP BY I1, I2, I3. Эту задачу можно было бы уложить в 3 раза большее количество строк, сделать менее расширяемой, более понятной людям. :) Но так вышло, что надо было написать быстро, чтобы работало быстро, чтобы ошибок было поменьше — дали мне, я написал.
 
MD Wyvern-2 #04.03.2008 23:28  @Balancer#04.03.2008 20:34
+
-
edit
 

Wyvern-2

координатор
★★★☆
☠☠
Balancer> Вот я фреймворк Авиабазы прошлым летом как отрефакторил на новую идеологию, так он с тех пор только всё упрощается, а функционал - возрастает.

А База падает и падает :F

Ник
P.S. Интересно, помнит ли кто то первоначальное значение слова "фрэймворк"? ;)
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  
+
-
edit
 

Mishka

модератор
★★☆
Wyvern-2> А База падает и падает :F

Я знал, что кто это скажет! :lol:

Wyvern-2> Ник
Wyvern-2> P.S. Интересно, помнит ли кто то первоначальное значение слова "фрэймворк"? ;)

Оно всё то же — мы пробьём окно в Европу, а потом засунем туда ж@пу!
Видишь, окно и рамочка красивые, а вот наполнение... :F соотвествует. Только надо понять чему.
 
+
-
edit
 

Wyvern-2

координатор
★★★☆
☠☠
Wyvern-2>> P.S. Интересно, помнит ли кто то первоначальное значение слова "фрэймворк"? ;)
Mishka> Оно всё то же — мы пробьём окно в Европу, а потом засунем туда ж@пу!
Mishka> Видишь, окно и рамочка красивые, а вот наполнение... :F соотвествует. Только надо понять чему.

Эээх...ты же тоже стоял тэк сказать у истоков :F Фрэймворк - первая многооконная и многозадачная рабочая среда, работала еще под PC DOS 3.1 Нынешние оконные интерфейсы, многозадачность, даже идея самого микрософт Офиса - оттудова

Ник
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  
+
-
edit
 

Wyvern-2

координатор
★★★☆
☠☠
Вот ХРОНОЛОГИЯ СОБЫТИЙ:
1984
Для Интернета предложен DNS (Domain Name Server), содержавший информацию о примерно 1000 компьютеров. Hewlett Packard выпускает ставший очень популярным принтер LaserJet. К 1993 году продано свыше 10 млн. принтеров Laserjet.
1984, январь Европа
Весь Запад отмечал литературное событие особого рода: начало 1984 года, давшего название самому известному роману Джорджа Оруэлла "1984"
1984, январь США
Apple Computer внедряет в производство Macintosh, построеный на базе 8 MHz процессора Motorola 68000, мог адресовать до 16 Мб памяти. Достигал производительности 0.7 MIPS и поставлялся с 128 Кб RAM и монохромным видеоадаптером. Microsoft предлагает для Macintosh Бейсик и Multiplan.
1984, март США
Выпуск DOS 2.1 для PC Junior. Microsoft выпускает версии 3.2 языков Паскаль и Фортран. Microsoft публикует DOS 2.11 для международного рынка.
1984, март США
Ashton-Tate объявляет о создании Framework , пятифункционального комплексного программного пакета.
1984, май США
Microsoft представляет программу Microsoft Project для управления проектами. Издатели программного обеспечения и производители компьютеров получают первые комплекты инструментария для разработки прикладных программ для Windows. Сама Windows задерживается...
1984, ноябрь США [Microsoft]
Microsoft выпускает MS-DOS 3.1, которая может поддерживать сети PC


А вот, что написанно про слово "Framework" в Вики: Фреймворк — Википедия

Труп Ashton-Tate еще не упел толком остыть, а молодые уже забыли...

Ник
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  
Это сообщение редактировалось 05.03.2008 в 16:25
+
-
edit
 

Kernel3

аксакал

Wyvern-2> Эээх...ты же тоже стоял тэк сказать у истоков :F Фрэймворк - первая многооконная и многозадачная рабочая среда, работала еще под PC DOS 3.1
Многозадачной она не была и быть не могла. Под ДОСом-то.
Wyvern-2> Нынешние оконные интерфейсы, многозадачность, даже идея самого микрософт Офиса - оттудова
Фигня. Можно сказать, идея витала в воздухе :) Apple свою Mac OS делал явно без оглядки на Framework.
Broken Windows® cures my ills and makes me feel alright... ©  
+
-
edit
 

Wyvern-2

координатор
★★★☆
☠☠
Wyvern-2>> Эээх...ты же тоже стоял тэк сказать у истоков :F Фрэймворк - первая многооконная и многозадачная рабочая среда, работала еще под PC DOS 3.1
Kernel3> Многозадачной она не была и быть не могла. Под ДОСом-то.

:F А Винда 3.11 откель запускалась? :F
В Фрэймворке главной фишкой были сложные структурированные фрэймы - содержащие данные разных типов(текст+таблица+график) Если бы не было многозадачности, то как бы их возможно было ОТКРЫТЬ? ;)

"Витала" там идея или ползала - Фрамеворк первый эту идею РЕАЛИЗОВАЛ. Чувствуешь разницу? Разницу между вертолетом да Винчи и Сикорского понимаешь? :F

Ник
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  
+
-
edit
 

Kernel3

аксакал

Wyvern-2> :F А Винда 3.11 откель запускалась? :F
А это неважно. На момент наличия ДОС как таковой Винда ещё не является многозадачной системой :)
Wyvern-2> В Фрэймворке главной фишкой были сложные структурированные фрэймы - содержащие данные разных типов(текст+таблица+график) Если бы не было многозадачности, то как бы их возможно было ОТКРЫТЬ? ;)
Взять и открыть. Многозадачность как таковая - это всё-таки наличие нескольких активных процессов одновременно. Под ДОС такое не делается в принципе. TSR и штуки типа DOS Shell - это не то.
Wyvern-2> "Витала" там идея или ползала - Фрамеворк первый эту идею РЕАЛИЗОВАЛ. Чувствуешь разницу? Разницу между вертолетом да Винчи и Сикорского понимаешь? :F
Ээээ... По твоей же хронологии получается, что первой была таки Apple :)
Broken Windows® cures my ills and makes me feel alright... ©  
+
-
edit
 

Wyvern-2

координатор
★★★☆
☠☠
Wyvern-2>> :F А Винда 3.11 откель запускалась? :F
Kernel3> А это неважно. На момент наличия ДОС как таковой Винда ещё не является многозадачной системой :)

И W95 тоже? :F

Wyvern-2>> В Фрэймворке главной фишкой были сложные структурированные фрэймы
Kernel3> Взять и открыть. Многозадачность как таковая - это всё-таки наличие нескольких активных процессов одновременно....
И что принципиально мешает внешней программе запущенной из под ДОС организовать несколько активных процессов внутри себя, вытеснительным способом, например?

Wyvern-2>> ....Разницу между вертолетом да Винчи и Сикорского понимаешь? :F
Kernel3> Ээээ... По твоей же хронологии получается, что первой была таки Apple :)
Это почему же? Яблоки выпустили только компьютер имевший почти такую же ДОС, как и PC Dos

Ник
Жизнь коротка, путь искусства долог, удобный случай мимолетен, опыт обманчив.... Ἱπποκράτης  
+
-
edit
 

Kernel3

аксакал

Kernel3>> А это неважно. На момент наличия ДОС как таковой Винда ещё не является многозадачной системой :)
Wyvern-2> И W95 тоже? :F
Конечно. Там загрузка аналогично происходит.
Wyvern-2> И что принципиально мешает внешней программе запущенной из под ДОС организовать несколько активных процессов внутри себя, вытеснительным способом, например?
Например, работа микропроцессора не в том режиме :P Хотя, если DOS Extenders рассматривать как такие внешние программы, то да. Но, НЯЗ, Framework к ним не относилась.
Wyvern-2>>> ....Разницу между вертолетом да Винчи и Сикорского понимаешь? :F
Kernel3>> Ээээ... По твоей же хронологии получается, что первой была таки Apple :)
Wyvern-2> Это почему же? Яблоки выпустили только компьютер имевший почти такую же ДОС, как и PC Dos
А, ну да, Mac OS вроде как на год позже появилась. Всё ж разница не как у Да Винчи с Сикорским :F
Broken Windows® cures my ills and makes me feel alright... ©  
RU Balancer #05.03.2008 16:44  @Wyvern-2#04.03.2008 23:28
+
-
edit
 

Balancer

администратор
★★★★☆
Wyvern-2> А База падает и падает :F

Вроде, с ноября прошлого года не падала. Да и тогда, не по вине авиабазовского фреймворка падала, а из-за апгрейда mysql :-p

...

Аптайм сервера - 43 дня. И тогда тоже не падение было, а технические работы у провайдера :D
 
+
-
edit
 

Mishka

модератор
★★☆
Wyvern-2> Эээх...ты же тоже стоял тэк сказать у истоков :F Фрэймворк - первая многооконная и многозадачная рабочая среда, работала еще под PC DOS 3.1 Нынешние оконные интерфейсы, многозадачность, даже идея самого микрософт Офиса - оттудова
Wyvern-2> Ник

Framework, вообще-то, пришёл из других областей. И обычные окна как раз одна из таких областей. Frame там. А вот frmaework было по аналогии использовано в различных технических областях, когда говорилось о некой повышенной абстактности. Т.е. некий процесс, задающий общие правила поведения, разработки и т.д., а вот что именно процесс делает — пофиг. Ну или почти пофиг. Как рама в окне — деревянная или железная (сейчас пластиковые или комбинированные), а вот какие стёкла вставим — дело пользователя. Идея немцев, которые под MS DOS сделали такое в графическом режиме (было и в текстовом) — блин, забыл название пакета, мы в ИМ его имели. Ориентирован он был, конечно, больше на GUI, Был ещё VitaminC. Поэтому Ahton-Tate вовсе не первая.

Framework от Ashton-Tate всегда был Office Suite, а не многозадачной средой. Текущее продолжение есть здесь — Framework home page & the FRED Computer Language, Framework IV, II, III, V, VI, VI, VII. Хотя задумка там была связана с объектно-ориентированной средой (которой многозадачность побоку), ориентированной на удобство разработки новых приложений. Вот тебе интервью с создателем от 1985 — http://www.pcmag.com/article2/0,1759,1167680,00.asp. Явно видно влияние Smalltalk-а на автора.
 
+
-
edit
 

Mishka

модератор
★★☆
Kernel3> Многозадачной она не была и быть не могла. Под ДОСом-то.

Это не верно. Многозадачной можно быть и под MS DOS без проблем. Вот изоляции задач полной — не было, это да.


Kernel3> Фигня. Можно сказать, идея витала в воздухе :) Apple свою Mac OS делал явно без оглядки на Framework.

Не только витала, но была уже реализована во многих системах — VM/SP — немного по уродски, по мэйнфрэмовски, Smalltalk — в полной мере и даже намного лучше. Такой среды-компилятора-ОС и сейчас-то не найти. Всякие машинки от Вирта — Лилит и т.д. А так же следует лучше посмотреть на работы Дугласа Энджельбарта, который аналогичные пробные вещи показывал в начале 70-х.
 
RU Balancer #05.03.2008 16:53  @Wyvern-2#04.03.2008 23:28
+
-
edit
 

Balancer

администратор
★★★★☆
Wyvern-2> P.S. Интересно, помнит ли кто то первоначальное значение слова "фрэймворк"? ;)

А чего его помнить, в английском первое значение - «остов», «каркас». В нём и используется :D
 
+
-
edit
 

Kernel3

аксакал

Mishka> Это не верно. Многозадачной можно быть и под MS DOS без проблем. Вот изоляции задач полной — не было, это да.
Ага. Без изоляции, без разделяемого доступа к ресурсам, без средств взаимодействия между процессами... В общем, хреновая такая многозадачность :)
Broken Windows® cures my ills and makes me feel alright... ©  
+
-
edit
 

Mishka

модератор
★★☆
Kernel3> А это неважно. На момент наличия ДОС как таковой Винда ещё не является многозадачной системой :)

Согласен.

Kernel3> Взять и открыть. Многозадачность как таковая - это всё-таки наличие нескольких активных процессов одновременно. Под ДОС такое не делается в принципе. TSR и штуки типа DOS Shell - это не то.

Активных, в смылсе выполняющихся — такое только на многопроцессорной системе. А готовых к выполнению — стоящих в очереди готовых — под досом делается достаточно просто. У нас свой тайм-слайсер был — 1,500 строк на ассемблере.

Kernel3> Ээээ... По твоей же хронологии получается, что первой была таки Apple :)
Apple была первая, Smalltalk вышел в 1981 — там уже было всё.
 
+
-
edit
 

Mishka

модератор
★★☆
Kernel3> Ага. Без изоляции, без разделяемого доступа к ресурсам, без средств взаимодействия между процессами... В общем, хреновая такая многозадачность :)

Изоляция не признак многозадачности. Возьми IOS — до сих пор это сопрограммная ОС без изоляции.

Ну тот самый монитор, что у нас был — без защиты, но обеспечивал средства взаимодействия и синхронизации. Семафоры, события у нас были, таймслайсы тоже. Изоляции — не было. Нормально всё крутилось. Стандартно до 4-х задач. Вот виртуальную память мы не делали, т.к. аппаратной поддержки не было, а переводить в режим отладки не хотели — медленно всё работало. Хотя один студент носился с этой идеей и даже чего-то реализовал.
 

au

   
★★
Mishka> ещё одна :)

А можно развернуть мысль?
 
+
-
edit
 

Kernel3

аксакал

Mishka> Изоляция не признак многозадачности. Возьми IOS — до сих пор это сопрограммная ОС без изоляции.
Mishka>Вот виртуальную память мы не делали, т.к. аппаратной поддержки не было, а переводить в режим отладки не хотели — медленно всё работало. Хотя один студент носился с этой идеей и даже чего-то реализовал.
А. Значит, лично у меня повышенные требования к многозадачным системам :)
Broken Windows® cures my ills and makes me feel alright... ©  
+
-
edit
 

Balancer

администратор
★★★★☆
Kernel3> А. Значит, лично у меня повышенные требования к многозадачным системам :)

«Многозадачность» задаётся уже своим названием. И только им. Про изоляцию и защищённость там ни слова. И, вообще:

Многозада́чность (англ. multitasking) — свойство операционной системы или среды программирования, обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов.

// Многозадачность — Википедия
 
+
-
edit
 

Kernel3

аксакал

Balancer> Многозада́чность (англ. multitasking) — свойство операционной системы или среды программирования, обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов.
Ага. Вот только под процессом можно понимать разные вещи :P И изоляция с защищённостью ту сразу всплывут.
Broken Windows® cures my ills and makes me feel alright... ©  

Mishka

модератор
★★☆
Mishka>> ещё одна :)
au> А можно развернуть мысль?
Надо бы посмотреть на диссер моего начальника и его статьи. Ну, разговоров у нас была уйма на эту тему. Причём, вся лаба спорила (было у нас такое правило, что на выходные или просто так, все из лабы забирались к кому-нибудь на дачу, загружались спиртным, жратвой, бумагой, карандашами и на целую неделю отбывали из универа — говорить, говорить и ещё раз говорить — в полной изоляции от мира; решений было сделано так уйма). Начальник взял и рассмотрел около 30 метрик на тот момент (это был конец 80-х) с полным анализом каждой — положительные стороны, отрицательные стороны, возможность применения в коллективе, привязка к размерам проектов и т.д. Обкатывал во многом на нас — сотрудниках и аспирантах. Выходило, что технология — нужная вещь, но найти убервафель не получалось. Всякая метрика всегда несла в себе элемент субъективности. Т.е. в конкретном коллективе можно было применять метрику (а лучше несколько, если время есть), с учётом знаний начальника. Т.е. Начальник знал, что тот же v(G) у Борыги (я тут использую наши ники, т.к. не хочу называть имён) будет всегд близок к 1. Борыга писал всегда очень чётко небольшими функциями — как кирпичиками. Но сложность задачи была всегда офигенная — Алгол 68, Ада и т.д. А вот Lin всегда писал очень размашисто, фундаментально. Его v(G) был бы очень высок, но у процедур всегда была логическая завершённость. Лёгко изменять, понимать. SHR и я, как аспиратны, всегда писали с вы#бонами поначалу — как говорил IBG, не такой херовой особенности у машины (языка), которую бы было нельзя использовать очень красиво хоть бы раз. Вот мы были в этой категории. Gnil был тоже близок к этому стилю. У нас v(G) скакал бы резко, а сложность, на самом деле, была бы одинаковая, как и понимабельность. А вот Bokr (он же jec) всегда был более прост. Jul писала быстро, в зависимости от нужды могла менять стиль. Дама очень толковая, но мысли всегда обгоняли руки. :) Ну, так можно на каждго из 30 людей. Т.е. чисто метрика v(G) не работала бы. Надо было бы v(G)+DeltaSubject, причём последняя составляющая очень не маловажна. Хороший начальник эту составляющую знает и учитывает. При этом, наш начальник ратовал за применение метрик. И показывал другим, как это бывает полезно. Но метрика сама по себе — один из многих показателей, которые надо учитывать в технологии программирования.


Сейчас идёт возрождение идей старых, новые появляются. Ренесанс, одним словом. Я это связываю с тем, что:
1. За последние десятилетие нет большого прорыва в области технологии. Прорыва в том смысле, чтобы качественно улучшить надёжность кода, производительность и т.д. Моё ИМХО на эту тему я уже высказывал не раз. Технология программирования, помимо упрощения жизни настоящим инженерам, привносит волну новичков, которым вдруг стало легче делать проекты. Или им только так кажется. Но общий уровень падает.
2. Программирование как таковое широко шагнуло в embedded — если раньше там были высококвалифицированные люди, которые хорошо обучены (не только в универе, но в жизни — знают как это устроено и работает), знают область, заботятся о качестве (история одного байта — хорошая иллюстрация), то теперь ряды embedded программистов пополняются обычными программистами — не хватает тех спецов уже, что готовятся по стандартной схеме, слишком быстро отрасль развивается. Поэтому сюда занесло и обычные технологии программирования, обычные проблемы. Т.е. шагнула массовость в embedded и принесла с собой не только хорошее, но и всё г, что накопилось за годы развития программирования в обычной области.
3. Всё идёт по спирали и к этому вопросу должны были вернуться рано или поздно.


PS Заметь, что в статье почти везде использованы старые метрики. Может немного подправленные. Но всё из далёких 70-х, 80-х.
 

в начало страницы | новое
 
1942: Оборона Севастополя (74 года).
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru