Анализ программного средства по метрике Мак-Кейба

Автор работы: Пользователь скрыл имя, 11 Декабря 2011 в 13:26, лабораторная работа

Краткое описание

Для корректной работы программного средства необходимо выполнить ряд требований:
а) исходный код программы должен соответствовать правилам написания программ на языке программирования PHP 5.
б) исходный код программы должен содержаться в одном файле.
в) на компьютере должно быть установлено приложение GraphViz, оно необходимо для отображения граф-схемы алгоритма. Приложение устанавливается автоматически.

Содержание работы

Цели и задачи
3
Руководство пользователя. Главное меню программы
4
Вкладка “Файл”
4
Вкладка “Обработка”
5
Вкладка “Справка”
5
Панель быстрого доступа
6
Краткие сведения о метрике Мак-Кейба
7
Результаты выполнения программы
8
Список литературы

Содержимое работы - 1 файл

Report1.docx

— 259.08 Кб (Скачать файл)

            Functions.Add(Graph_);

            Graph_ = Main;

            //Parser NewFunc = new Parser(Code, curPos, Functions);

            //NewFunc.GetBlock("}");

            //NewFunc.Graph_.Label = FuncName;

            //Functions.Add(NewFunc.Graph);

            //for (int i = 0; i < NewFunc.Functions.Count; i++)

            //    Functions.Add(NewFunc.Functions[i]);

            //curPos = NewFunc.curPos;

            //Graph NewFunc = new Graph(FuncName);

        } 

        public void GetBlock(string EndBlock)

        {

            string Token;

            int BlockBegin = curPos;

            bool IsBlockEmpty = true;

            bool IsBlockFinifed = false;

            while (!IsBlockFinifed)

            {

                if (curPos <= (Code.Length - 1))

                {

                    Token = GetToken();

                    if ((EndBlock != Token)&&("" != Token))

                    {

                        IsBlockFinifed = false;

                        switch (Token)

                        {

                            case "if":

                                if (!IsBlockEmpty)

                                    Graph_.AddBlock(true, "LBlock");

                                AddIf();

                                BlockBegin = curPos;

                                IsBlockEmpty = true;

                                break;

                            case "while":

                                if (!IsBlockEmpty)

                                    Graph_.AddBlock(true, "LBlock");

                                AddWhile();

                                BlockBegin = curPos;

                                IsBlockEmpty = true;

                                break;

                            case "do":

                                if (!IsBlockEmpty)

                                    Graph_.AddBlock(true, "LBlock");

                                AddDo();

                                BlockBegin = curPos;

                                IsBlockEmpty = true;

                                break;

                            case "for":

                                if (!IsBlockEmpty)

                                    Graph_.AddBlock(true, "LBlock");

                                AddFor();

                                BlockBegin = curPos;

                                IsBlockEmpty = true;

                                break;

                            case "function":

                                if (!IsBlockEmpty)

                                    Graph_.AddBlock(true, "LBlock");

                                AddFunction();

                                BlockBegin = curPos;

                                IsBlockEmpty = true;

                                break;

                            default:

                                //GetNextLine();

                                bool IsFunc = false;

                                for (int i = 0; i < Functions.Count; i++)

                                    if (Functions[i].Label == Token)

                                    {

                                        Graph_.AddBlock(true, Token);

                                        Graph_.Cyclematic += Functions[i].Cyclematic - 1;

                                        IsFunc = true;

                                        break;

                                    }

                                if (IsFunc)

                                {

                                    IsBlockEmpty = true;

                                    GetToken();

                                    GetToken();

                                }

                                else IsBlockEmpty = false; 

                                break;

                        }

                    }

                    else

                        IsBlockFinifed = true;

                }

                else

                    IsBlockFinifed = true;

            }

            if (!IsBlockEmpty) // in cycle

                Graph_.AddBlock(true, "LBlock");

        }

    }

} 

Листинг файла Graph.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text; 

namespace MSSVIR

{

    class Graph

    {

        public Block Root;

        public Block curBlock;

        public int NumberOfBlocks { get; private set; }

        public string Label { get; set; }

        public int Cyclematic = 1; 

        public Graph(string Label_)

        {

            Root = null;

            curBlock = null;

            NumberOfBlocks = 0;

            Label = Label_;

        } 

        public void AddBlock(bool IsLinear, string label_)

        {

            string Node;

            if (IsLinear)

                Node = "node" + NumberOfBlocks.ToString() + "[shape=\"rectangle\",label=\"" + label_ + "\"];";

            else

            {

                Cyclematic++;

                Node = "node" + NumberOfBlocks.ToString() + "[shape=\"diamond\",label=\"" + label_ + "\"];";

            }

            if (Root == null)

            {

                Root = new Block(IsLinear, Node, "node" + NumberOfBlocks.ToString());

                curBlock = Root;

                NumberOfBlocks++;

            }

Информация о работе Анализ программного средства по метрике Мак-Кейба