Цикломатическая сложность

Цикломати́ческая сло́жность програ́ммы (англ. cyclomatic complexity of a program) — структурная (или топологическая) мера сложности компьютерной программы. Мера была разработана Томасом Дж. Маккейбом в 1976 году.

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

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

Описание

Граф управления потоком простой программы. Программа начинает выполняться с красного узла, затем идут циклы (после красного узла идут две группы по три узла). Выход из цикла осуществляется через условный оператор (нижняя группа узлов) и конечный выход из программы в синем узле. Для этого графа E = 9, N = 8 и P = 1, цикломатическая сложность программы равна 9 − 8 + 2 × 1 = 3 (рассчитано по первому варианту)

Цикломатическая сложность части программного кода — количество линейно независимых маршрутов через программный код. Например, если исходный код не содержит никаких точек ветвления или циклов, то сложность равна единице, поскольку есть только единственный маршрут через код. Если код имеет единственный оператор IF, содержащий простое условие, то существует два пути через код: один если условие оператора IF имеет значение TRUE и один — если FALSE.

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

M = EN + 2P,

где:

M = цикломатическая сложность,
E = количество рёбер в графе,
N = количество узлов в графе,
P = количество компонент связности.
Сильносвязный граф управления потоком той же функции. Для этого графа E = 10, N = 8 и P = 1, следовательно, цикломатическая сложность программы, рассчитанная по второму варианту, также равна 10 − 8 + 1 =3

В другой формулировке используется граф, в котором каждая точка выхода соединена с точкой входа. В этом случае граф является сильносвязным, и цикломатическая сложность программы равна цикломатическому числу этого графа (также известному как первое число Бетти), которое определяется как[3]

M = EN + P.

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

Для простой программы, или подпрограммы, или метода P всегда равно 1. Однако цикломатическая сложность может применяться к нескольким таким программам или подпрограммам (например, ко всем методам в классе), в таком случае P равно числу подпрограмм, о которых идёт речь, так как каждая подпрограмма может быть представлена как независимая часть графа.

Может быть показано, что цикломатическая сложность любой структурированной программы с только одной точкой входа и одной точкой выхода эквивалентна числу точек ветвления (то есть, операторов if или условных циклов), содержащихся в этой программе, плюс один.[3][4]

Цикломатическая сложность может быть распространена на программу с многочисленными точками выхода; в этом случае она равна[4][5]

π − s + 2,

где:

π — число точек ветвления в программе,
s — число точек выхода.

Формальное определение

Формально, цикломатическая сложность может быть определена как относительное число Бетти:

то есть «первая гомология графа G относительно терминальных узлов t. Это другой способ сказать «число линейно независимых маршрутов через граф от входа к выходу».

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

Применение

Ограничение сложности при разработке

Одно из первоначально предложенных Маккейбом применений состоит в том, что необходимо ограничивать сложность программ во время их разработки. Он рекомендует, чтобы программистов обязывали вычислять сложность разрабатываемых ими модулей и разделять модули на более мелкие всякий раз, когда цикломатическая сложность этих модулей превысит десять.[3] Эта практика была включена НИСТ-ом в методику структурного тестирования с замечанием, что со времени исходной публикации Маккейба выбор значения 10 получил весомые подтверждения, однако в некоторых случаях может быть целесообразно ослабить ограничение и разрешить модули со сложностью до 15. В данной методике признаётся, что иногда могут существовать причины для выхода за рамки согласованного лимита. Это сформулировано как рекомендация: «Для каждого модуля следует либо ограничивать цикломатическую сложность до согласованных пределов, либо предоставить письменное объяснение того, почему лимит был превышен».

Применение при тестировании программного обеспечения

Другое применение цикломатической сложности — определение количества тестов, необходимых для полного покрытия кода.

Он полезен, поскольку цикломатическая сложность M имеет два свойства, для конкретного модуля:

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

В составе других метрик

Цикломатическая сложность используется в качестве одного из параметров в индексе удобства сопровождения (англ. maintainability index)[6].

Примечания

  1. A. J. Sobey. Основной маршрут тестирования. Дата обращения: 2 мая 2009. Архивировано 26 апреля 2012 года.
  2. Здесь термин «структурированная» означает, что программа имеет только одну точку выхода.
  3. 1 2 3 4 McCabe. A Complexity Measure (англ.) // IEEE Transactions on Software Engineering[англ.] : journal. — 1976. — December. — P. 308—320. Архивировано 29 декабря 2009 года.
  4. 1 2 Belzer, Kent, Holzman and Williams. Encyclopedia of Computer Science and Technology (англ.). — CRC Press, 1992. — P. 367—368.
  5. Harrison. Applying Mccabe's complexity measure to multiple-exit programs (англ.) // Software: Practice and Experience : journal. — J Wiley & Sons, 1984. — October.
  6. Linda M. Laird, M. Carol Brennan John. Software Measurement and Estimation: A Practical Approach. — Wiley & Sons, 2006.

Read other articles:

World Trade Center Metro ManilaThe exhibition hall in December 2020General informationStatusCompletedLocationGil Puyat Avenue Extension cor. Macapagal Boulevard, Financial Center Area Bay City, Pasay, Metro Manila, PhilippinesCoordinates14°33′02″N 120°59′15″E / 14.550666°N 120.987636°E / 14.550666; 120.987636InauguratedOctober 28, 1996Technical detailsFloor area16,500 m2 (178,000 sq ft)Grounds21,000 m2 (230,000 sq ft)Design and...

 

Селезінник волосинчастий Asplenium trichomanes subsp. quadrivalens Біологічна класифікація Царство: Рослини (Plantae) Клада: Судинні рослини (Tracheophyta) Відділ: Папоротеподібні (Polypodiophyta) Клас: Папоротевидні (Polypodiopsida) Порядок: Багатоніжкові (Polypodiales) Підпорядок: Aspleniineae Родина: Селезінникові (Aspleniaceae)

 

Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen sind unter Archangelsk (Begriffsklärung) aufgeführt. Stadt ArchangelskАрхангельск Wappen Wappen Föderationskreis Nordwestrussland Oblast Archangelsk Stadtkreis Archangelsk Innere Gliederung 9 Stadtrajons Bürgermeister Dmitri Morjew Gegründet 1584 Frühere Namen Nowocholmogory (bis 1613) Stadt seit 1584 Fläche 294,42 km² Bevölkerung 348.783 Einwohner(Stand: 14. Okt. 2010)[1] Bevölkerungsdichte 1185 E...

Saint-Martin-de-Brômes Comuna francesa Iglesia de Saint-Martin-de-Brômes (indexada en la base Mérimée) Escudo Saint-Martin-de-BrômesLocalización de Saint-Martin-de-Brômes en FranciaCoordenadas 43°46′12″N 5°56′44″E / 43.77, 5.9455555555556Entidad Comuna francesa • País Francia • Región Provenza-Alpes-Costa Azul • Departamento Alpes de Alta Provenza • Distrito Forcalquier • Mancomunidad Durance-Luberon-Verdon AgglomérationAl...

 

Опис файлу Опис Постер фільму Чорна шістка Джерело https://en.wikipedia.org/wiki/File:TheBlackSix.jpg Час створення 1974 Автор зображення Вважається, що правовласник фільму Чорна шістка Ліцензія див. нижче Обґрунтування добропорядного використання для статті «Чорна шістка» [?] Мета викор

 

Straton LampsakenosStraton, digambarkan sebagai sarjana abad pertengahan di Kronik NurembergLahirskt. 335 SMLampsakusMeninggalskt. 269 SMAthenaEraFilsafat KunoKawasanFilosofi BaratAliranSekolah PeripatetikMinat utamaFilsafat alam, Fisika Dipengaruhi Aristoteles, Theophrastus Memengaruhi Pierre Bayle Straton Lampsakenos (/ˈstreɪtoʊ/; bahasa Yunani: Στράτων ὁ Λαμψακηνός, Straton ho Lampsakenos, skt. 335 – skt. 269 SM) merupakan seorang filsuf Peripatetic, dan di...

جمهورية صربيا Republika Srbija  (صربية) بلديات ومدن صربياالعلم بلديات ومدن صربياالشعار بلديات ومدن صربيا النشيد: النشيد الوطني الصربي الأرض والسكان عاصمة بلغراد الحكم التأسيس والسيادة التاريخ وسيط property غير متوفر. تعديل مصدري - تعديل   مقاطعات وبلديات صربيا شاملاً إدعاء صرب

 

1938 film by Edward F. Cline Go Chase YourselfTheatrical release posterDirected byEdward F. ClineScreenplay byPaul YawitzBert GranetStory byWalter O'KeefeProduced byRobert SiskStarringJoe PennerLucille BallRichard LaneJune TravisFritz FeldTom KennedyCinematographyJack MacKenzieEdited byDesmond MarquetteMusic byRoy WebbProductioncompanyRKO PicturesDistributed byRKO PicturesRelease date April 22, 1938 (1938-04-22) Running time70 minutesCountryUnited StatesLanguageEnglish Go Chase...

 

Bourbon di SorbelloCountry Imperial fief of Sorbello (marquisate, 1424–1819) Grand Duchy of Tuscany Kingdom of Italy Founded1424: following the dividing of the Marquises of Monte Santa Maria feudal properties between the brothers Cerbone and Lodovico.FounderLodovico di Giacomo del Monte (1394-1441)Final rulerLodovico VI Bourbon di Sorbello (1749-1821)TitlesMarquises of SorbelloEstate(s) Imperial fief of Sorbello Palazzo Bourbon di Sorbello Bastia Creti Villa del Pischiello Deposition1819: a...

1975 American historical melodrama film For other uses, see Mandingo (disambiguation). MandingoTheatrical release posterDirected byRichard FleischerScreenplay byNorman WexlerBased onMandingoby Kyle OnstottProduced byDino De LaurentiisStarringJames MasonSusan GeorgePerry KingRichard WardBrenda SykesKen NortonLillian HaymanCinematographyRichard H. KlineEdited byFrank BrachtMusic byMaurice JarreHi Tide HarrisMuddy WatersProductioncompanyDino De Laurentiis CompanyDistributed byParamount PicturesR...

 

For other uses, see Jowo. Jowo Rinpoche of the Jokhang temple, image taken in 1999 Jowo Shakyamuni or Jowo Rinpoche (Tibetan: ཇོ་བོ་རིན་པོ་ཆེ།, Wylie: jo bo rin po che) is a large 7th century statue of Gautama Buddha, supposed to have been made in China, but of great influence on the tradition of Tibetan art. Together with Jowo Mikyö Dorje, it is one of the most sacred statues in Tibet. Jowo Rinpoche is housed in the Jokhang chapel of the Rasa Trulnang Tsuglak...

 

Copris bootes Klasifikasi ilmiah Kerajaan: Animalia Filum: Arthropoda Kelas: Insecta Ordo: Coleoptera Famili: Scarabaeidae Genus: Copris Spesies: Copris bootes Copris bootes adalah spesies kumbang yang berasal dari genus Copris dan famili Scarabaeidae. Kumbang ini juga merupakan bagian dari ordo Coleoptera, kelas Insecta, filum Arthropoda, dan kingdom Animalia. Kumbang ini memiliki antena yang terdiri dari plat yang disebut lamela. Referensi Bisby F.A., Roskov Y.R., Orrell T.M., Nicolson D., ...

Betsaidaבית צידה BetsaidaLokasiGalilea, IsraelSejarahDidirikanabad ke-1 SMDitinggalkan65 Betsaida (bahasa Yunani: Βηθσαΐδά bēthsaidá; bahasa Ibrani/Aramaik בית צידה beyt-tsaida (beyt: rumah, bait (seperti Bait Allah)) rumah nelayan; bahasa Inggris: Bethsaida) adalah nama tempat yang disebutkan pada bagian Perjanjian Baru dalam Alkitab Kristen. Di sana tinggal murid-murid Yesus Kristus: Simon Petrus, Andreas, Filipus (Yohanes 1:44; Yohanes 12:21), mungkin juga Y...

 

A cherry pie Ukrainian cherry Varenyky This is a list of notable cherry dishes and foods that are prepared using cherries as a primary ingredient. Cherry dishes and foods A slice of British cherry cake Griottines de Fougerolles (cherries macerated in eau-de-vie) Sour cherry soup in Budapest, Hungary Black Forest gateau – a chocolate sponge cake with a rich cherry filling based on the German dessert Schwarzwälder Kirschtorte, literally Black Forest Cherry-torte.[1] Cherpumple – a ...

 

منتخب الولايات المتحدة تحت 21 سنة لكرة القدم بلد الرياضة الولايات المتحدة  الفئة كرة قدم تحت 21 سنة للرجال  [لغات أخرى]‏  رمز الفيفا USA  مشاركات تعديل مصدري - تعديل   منتخب الولايات المتحدة الأمريكية تحت 21 سنة لكرة القدم (بالإنجليزية: United States men's national under-21 soccer te...

American television channel tbs redirects here. For the company, see Turner Broadcasting System. For other television stations and channels branded as TBS, see TBS (disambiguation) § Entertainment. Television channel TBSTypeBasic cable networkCountryUnited StatesBroadcast areaUnited StatesHeadquartersAtlanta, Georgia, U.S.ProgrammingLanguage(s)EnglishSpanish (with SAP audio track)Picture format1080i (HDTV)(downscaled to letterboxed 480i for the SDTV feed)OwnershipOwnerWarner Bros. Disco...

 

Recording studio in Los Angeles The VillageExterior of the studio as of April 2021Location1616 Butler AvenueWest Los Angeles, CaliforniaTypeRecording studioOpened1922[1]Websitevillagestudios.com The Village (also known as Village Recorders, or the Village Recorder) is a recording studio located at 1616 Butler Avenue in West Los Angeles, California.[2][3] History The building was built by the Freemasons in 1922[1] and was originally a Masonic temple. It remained...

 

Art style, form of Gothic art The Agony in the Garden with the Donor Louis I, Duke of Orléans, Colart de Laon, c. 1405-1408, Prado Museum International Gothic is a period of Gothic art which began in Burgundy, France, and northern Italy in the late 14th and early 15th century.[1] It then spread very widely across Western Europe, hence the name for the period, which was introduced by the French art historian Louis Courajod at the end of the 19th century.[2] Artists and p...

«Nulla è impossibile, se lavori duro.» (Ibrahim Hamato[1]) Ibrahim Hamato Nazionalità  Egitto Tennistavolo paralimpico Palmarès Competizione Ori Argenti Bronzi Campionati Africani 0 3 0 Per maggiori dettagli vedi qui   Modifica dati su Wikidata · Manuale Ibrahim Hamato (in arabo ابراهيم حمدتو‎?; Damietta, 1º luglio 1973[2]) è un tennistavolista egiziano paralimpico. Amputato ad entrambe le braccia, è il primo giocatore nella storia dei...

 

Municipal building in Wallingford, Oxfordshire, England Wallingford Town HallWallingford Town HallLocationMarket Place, WallingfordCoordinates51°35′59″N 1°07′29″W / 51.5998°N 1.1248°W / 51.5998; -1.1248Built1670Architectural style(s)Neoclassical style Listed Building – Grade IOfficial nameTown HallDesignated9 December 1949Reference no.1368477 Shown in Oxfordshire Wallingford Town Hall is a municipal building in the Market Place in Wallingford, Oxford...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!