Вывод: Изучены основные понятия расчета себестоимости и длительности
разработки ПО, обоснован выбор среды разработки «Visual Studio» и языка
программирования C#, были изучены аналоги.
. РАЗРАБОТКА АЛГОРИТМОВ И ТЕХНОЛОГИЙ РАСЧЕТА СЕБЕСТОИМОСТИ ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ
.1 Функциональное моделирование
Модель IDEF0 - это блок, который отображает некоторую бизнес-функцию.
Четыре стороны блока имеют разную роль: левая сторона имеет значение «входа»,
правая - «выхода», верхняя - «управления», нижняя - «механизма».модель
«Автоматизированная система расчета себестоимости и длительности разработки ПО»
представлена на рисунке 2.1.
Рисунок 2.1 - IDEF0 модель «Автоматизация расчета себестоимости и
длительности разработки ПО»
Входными параметрами данной модели являются справочники:
а) каталог функций;
б) нормативная трудоемкость;
в) категория новизны;
г) использования case технологий;
д) коэффициент сложности;
е) коэффициент использования стандартных модулей;
ж) коэффициент средств разработки ПО;
з) экономические показатели;
и) ставка 1-ого разряда.
Процесс разработки осуществляется на основе методик расчета программного обеспечения и постановлении Министерства труда и социальной защиты Республики Беларусь от 27.06.2007 №91. Механизмом управления расчетами является программист. В результате произведенных расчетов выходными параметрами являются:
а) общая трудоемкость ПО;
б) себестоимость ПО;
в) отчет о расчетах себестоимости и длительности ПО;
Проведем декомпозицию контекстной диаграммы на три блока, описав последовательность расчета себестоимости ПО:
а) расчет длительности;
б) расчет затрат на разработку ПО;
в) расчет себестоимости ПО.
В приложении А представлена диаграмма декомпозиции IDEF0.
Первоначально осуществляется расчет длительности разработки ПО на основании постановления Министерства труда и социальной защиты от 27.06.2007 №91. Расчет производится исходя из данных поступивших на расчет.
Затем производиться расчет затрат на разработку ПО на основании методики расчета себестоимости ПО для РУП «Белоруснефть». Расчет производиться исходя из данных полученных из справочника и трудоемкости полученной в результате расчета длительности. После чего данные о трудоемкости и затраты на разработку поступают на расчет себестоимости ПО.
На DFD диаграмме выделено 3 блока основных функций:
а) расчет длительности разработки ПО;
б) расчет себестоимости ПО;
в) Учет расчетов.
В блок «Расчет длительности разработки ПО» передаются следующие параметры:
а) данные о функциях ПО;
б) данные о нормативной трудоемкости;
в) значения коэффициентов новизны;
г) значения использования case технологий;
д) значения коэффициентов сложности;
е) значения коэффициентов использования стандартных модулей;
ж) значения коэффициентов средств разработки ПО.
Выходным параметром является трудоемкость и общая трудоемкость ПО.
Входными параметрами для блока «Расчет себестоимости ПО» является трудоемкость, экономические показатели, ставка 1-ого разряда. В результате чего формируется себестоимость ПО. На выходе получается рассчитанная себестоимость ПО.
Блок «Учет расчетов» формируется исходя из трудоемкости и себестоимости ПО. В результате учета расчетов формируется отчет о расчетах себестоимости и длительности ПО.диаграмма «Автоматизация расчете себестоимости и длительности разработки ПО» представлена в приложении Б.
Функциональная модель описывает вычисления в системе. Она показывает, каким образом выходные данные вычисляются по входным данным, не рассматривая порядок и способ реализации вычислений. Функциональная модель состоит из набора диаграмм потока данных, которые показывают потоки значений от внешних входов через операции и внутренние хранилища данных к внешним выходам. Функциональная модель описывает смысл операций объектной модели и действий динамической модели, а также ограничения на объектную модель [6].
Функциональная схема работы автоматизации расчета себестоимости и
длительности разработки ПО представлена в приложении В.
.2 Алгоритм расчета себестоимости и длительности ПО
Расчет себестоимости и длительности разработки начинается с расчета трудоемкости ПО. Для этого необходимо определить функции, которые выполняет программа. Общий объем ПО определяется исходя из количества и объема функций, реализуемых программой, по каталогу функций ПО который содержится в «Постановлении Министерства труда и социальной защиты Республики Беларусь от 27.06.2007 №91» [7].
Пример перечня и объема функций ПО представлена в таблице 2.1.
Таблица 2.1 - Перечень и объем функций ПО
Код функции
Наименование(содержание) функции
Объем функции строк исходного кода(LOC)
по каталогу Vi
уточненный Vуi
1
2
3
4
101
Организация ввода информации
150
15
107
Организация ввода / вывода информации в интерактивном
режиме
320
32
109
Управление вводом / выводом
2400
240
301
Формирование последовательного файла
780
78
303
Обработка файлов
1100
110
305
Формирование файла
2460
246
403
Формирование служебных таблиц
1070
107
506
Обработка ошибочных и сбойных ситуаций
1720
172
507
Обеспечение интерфейса между компонентами
1820
182
707
Графический вывод результатов
590
59
Итого
12410
1241
Объем функции строк исходного кода по каталогу уменьшается. В результате
чего получается уточненный объем строк (далее - Vу), который
рассчитывается по формуле (2.1).
где Vyi - уточненный объем отдельной функции ПО в
строках исходного.
После чего анализируются характеристики программного продукта. И исходя
из выбранной характеристики программному продукту присваивается категория
сложности (первая, вторая, третья).
Исходя из уточненного объема и категории сложности вычисляется
нормативная трудоемкость (далее - Тн).
Так же для расчета трудоемкости учитываются следующие коэффициенты:
а) коэффициент повышения сложности ПО (далее - Кс);
б) коэффициент, учитывающий новизну ПО (далее - Кн);
в) коэффициент учитывающий степень использования стандартных модулей
(далее - Кт);
г) коэффициент, учитывающий средства разработки ПО (далее - Кур);
Трудоемкость на стадиях:
д) техническое задание (далее - ТЗ) определяется по формуле (2.2);
е) эскизный проект (далее - ЭП) определяется по формуле (2.3);
ж) технический проект (далее - ТП) определяется по формуле 2.4;
з) рабочий проект (далее - РП) определяется по формуле 2.5;
и) ввод в действие (далее - ВН) определяется по формуле 2.6.
Тутз = Тн * Kтз * Kс * Kн
* Kур; (2.2)
Туэп = Тн * Kэп * Kс * Kн
* Kур; (2.3)
Тутп = Тн * Kтп * Kс * Kн
* Kур; (2.4)
Турп = Тн * Kрп * Kс * Kн
* Kт * Kур; (2.5)
Тувн = Тн * Kвн * Kс * Kн
* Kур, (2.6)
где Ктз, Кэп, Ктп, Крп, Квн
- значения коэффициентов удельных весов трудоемкости стадий разработки в общей
трудоемкости ПО.
Результаты расчетов по определению нормативной и скорректированной трудоемкости
ПО, по стадиям разработки записываются в таблицу.
С учетом расчетов общей трудоемкости необходимо рассчитать затраты на
разработку программного продукта.
В состав затрат на разработку программного продукта входят следующие
статьи расходов:
к) затраты труда на создание программного продукта;
л) затраты на машинное время;
м) затраты на материалы;
н) затраты на энергию, на использование каналов связи.
Стоимость потребляемой энергии выражается в рублях. Её можно определить в
соответствии с данными из таблицы 2.3 по формуле (2.7):
где Квр - коэффициент, учитывающий использование по
времени;
Кс - коэффициент, учитывающий потери в сети.
Сумма амортизационных отчислений рассчитывается по данным таблицы 2.3. По
формуле (2.8) линейным способом, принятым на предприятии.
САОГ = БК*Нао/100+(Sрм*Спл*Наоп/100).
(2.8)
где БК - балансовая стоимость компьютера;
Нао - норма амортизации для оборудования;
Sрм - площадь на 1 рабочее место;
Спл - стоимость 1м2 производственной площади;
Напл - норма амортизации для зданий.
Сумма амортизационных отчислений за период разработки ПО рассчитывается
по данным формулы вычислений САОГ по формуле (2.9):
САО = САОГ/FK*Общая трудоемкость, (2.9)
где САОГ - сумма амортизационных отчислений;
FK
- полезный фонд времени работы компьютера за год.
Расчеты годовых отчислений в резервный денежный фонд производятся на
основе балансовой стоимости оборудования по формуле (2.10):
Зрг = БК * РО / 100, (2.10)
где БК - балансовая стоимость компьютера;
РО - отчисления на текущий ремонт оборудования (в % от балансовой
стоимости).
Тогда отчисления за период разработки вычисляются по формуле (2.11).
Зр = Зрг / 304 * Кфод, (2.11)
где Зрг - расчеты годовых отчислений в резервный денежный фонд;
Кфод - количество фактически отработанных дней.
Таким образом, затраты на машинное время при создании программного
обеспечения рассчитываются по формуле (2.12).
ЗМВ =Сэл + Сао + Зр, (2.12)
где Сэл - стоимость потребляемой электроэнергии;
Сао - Сумма амортизационных отчислений за период разработки ПО;
Зр - отчисления в фонд за период разработки.
Далее необходимо рассчитать расходы на оплату труда с отчислениями (далее
- ЗТР). ЗТР рассчитывается по формуле (2.13).
где ЗПОСН - основная заработная плата разработчиков, руб.;
ЗПДОП - дополнительная заработная плата разработчиков, руб.;
ОЗП - сумма отчислений от заработной платы, предусмотренных
законодательством, руб.
Расходы на оплату труда рассчитываются согласно единой тарифной сетке
(ЕТС) согласно тарифному разряду разработчика по формуле (2.14) [8]:
где ТС1 - тарифная ставка работника первого квалификационного
разряда;
Kn - тарифный коэффициент, соответствующий n-му
квалификационному разряду ЕТС.
Оклад за месяц рассчитывается по формуле (2.15).
где
Ст - ставка n-ого разряда.
Исходя
из общей трудоемкости разработки ПО, основная заработная плата разработчика
рассчитывается по формуле (2.16):
где Кфод - количество фактически отработанных дней;
Окл - оклад за месяц.
Дополнительная заработная плата разработчиков (далее - ЗПДОП)
включает выплаты, предусмотренные законодательством о труде и определяется по
нормативу в процентах к основной заработной плате. Для расчета необходимо
ввести размер повышения заработной платы в процентах. Дополнительная заработная
плата рассчитывается по формуле (2.17).
где
ЗПосн - основная заработная плата;
разм%
- процент повышения заработной платы;
Отчисления от заработной платы, предусмотренные законодательством,
включают:
а) обязательные страховые взносы в бюджет фонда социальной защиты
населения Республики Беларусь - 34%;
б) обязательное страхование от несчастных случаев на производстве и
профессиональных заболеваний - 1%.
Отчисления от заработной платы рассчитываются по формуле (2.18):
где
ЗПОСН - основная заработная плата;
ЗПдоп
- дополнительная заработная плата.
В результате расходы на оплату труда разработчика при создании
программного продукта вычисляются по формуле (2.19):
где
ЗПосн - основная заработная плата;
ЗПдоп
- дополнительная заработная плата;
ОЗП
- отчисления из заработной платы.
Статья затрат «Накладные расходы» водятся в размере процентов от основной
заработной платы. И вычисляются по формуле (2.20).
Накладные расходы = ЗПосн * разм%, (2.20)
где ЗПосн - основная заработная плата;
разм% - рамер введенных процентов на накладные расходы.
Таким образом, полная себестоимость разработанного программного продукта
рассчитывается по формуле (2.21).
С/С = Змв + Расходы на оплату труда + Накладные раходы, (2.21)
где Змв - стоимость машинного времени.
.3 Системные требования
Системные
требования - это описание примерных характеристик, которым должен
соответствовать компьютер
<https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80>
для того, чтобы на нём могло использоваться какое-либо определённое программное
обеспечение
<https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5>.
Для
некоторого ПО различают минимальные и рекомендуемые системные требования:
Минимальные
системные требования - это набор условий, необходимых для возможности запуска и
работы программного продукта.
Рекомендуемые
системные требования - набор характеристик, подразумевающих оптимальную работу
большей части возможностей продукта.
Персональный
компьютер, на который будет устанавливаться данное программное обеспечение
должен соответствовать следующим минимальным системным требованиям:
а) процессор с тактовой частотой 1ГГц или более;
б) ОЗУ объемом 1 или более ГБ;
в) не менее 100 мб на жестком диске;
г) операционная система Windows XP или более новая версия;
д) пакет .NET Framework 4.0 и выше;
е) монитор;
ж) клавиатура, мышь.
Выводы: в данном разделе были разработаны IDEF0 и DFD диаграммы,
функциональная модель ПО, описан алгоритм расчета себестоимости и длительности
разработки ПО.
3. ОПИСАНИЕ ТЕХНОЛОГИИ РАЗРАБОТКИ АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ РАСЧЕТА
СЕБЕСТОИМОСТИ И ДЛИТЕЛЬНОСТИ РАЗРАБОТКИ ПО
.1 Состав и организация информационного обеспечения автоматизированной
системы
База данных - совокупность данных, хранимых в соответствии со схемой
данных, манипулирование которыми выполняют в соответствии с правилами средств
моделирования данных.
Реляционная база данных - это совокупность отношений, содержащих всю
информацию, которая должна храниться в БД. Однако пользователи могут
воспринимать такую базу данных как совокупность таблиц.
Схема данных наглядно отображает таблицы и связи между ними, а также
обеспечивает использование связей при обработке данных. В схеме данных
устанавливаются параметры обеспечения целостности связей в базе данных.
База данных содержит 11 таблиц, которые имеют между собой связь 1 ко
многим. База данных приведена к третьей нормальной форме. Схема базы данных, а
так же схема алгоритма работы программы представлена в графической части.
Таблица «Значения коэффициентов с CASE» - предназначена для хранения
коэффициентов для различных категорий новизны для ПО разработанного с
применением case-технологиями. Состав таблицы и описание полей представлены в
таблице 3.1.
Таблица 3.1 - Атрибуты таблицы «Значения коэффициентов с CASE»
Название поля
Тип поля
Описание
Код_значения_case
Счетчик
Номер коэфициента
Категория_новизны
Короткий текст
Категория новизны ПО
Ктз_Кэп_Ктп
Короткий текст
Сумма коэффициентов на стадии ТЗ, ЭП, ТП
Крп
Короткий текст
Коэффициент на стадии РП
Квн
Короткий текст
Коэффициент на стадии РП
Таблица «Значения коэффициентов без CASE» - предназначена для хранения
коэффициентов для различных категорий новизны для ПО разработанного без
применения case-технологиями. Состав таблицы и описание полей представлены в
таблице 3.2.
Таблица 3.2 - Атрибуты таблицы
«Значения коэффициентов без CASE»
Название поля
Тип поля
Описание
Код_значения
Счетчик
Номер коэфициента
Категория_новизны Категория новизны ПО
Ктз
Короткий текст
Коэффициент на стадии ТЗ
Кэп
Короткий текст
Коэффициент на стадии ЭП
Ктп
Короткий текст
Коэффициент на стадии ТП
Крп
Короткий текст
Коэффициент на стадии РП
Квн
Короткий текст
Коэффициент на стадии ВН
Таблица «Каталог функций» - предназначена для хранения функций и их
объема для различных языков программирования. Состав таблицы и описание полей
представлены в таблице 3.3.
Таблица 3.3 - Атрибуты таблицы «Каталог функций»
Название поля
Тип поля
Описание
Код_функции
Счетчик
Номер функции
Наименование_функции
Длинный текст
Категория новизны ПО
Delphi
Числовой
Объем строк для языка программирования «Delphi»
Builder
Числовой
Объем строк для языка программирования «С++ Builder»
Visual_C
Числовой
Объем строк для языка программирования «Visual C++»
Java
Числовой
Объем строк для языка программирования «Java»
Таблица «Коэффициент использования стандартных модулей» -предназначена
для хранения коэффициентов для степеней использования стандартных модулей.
Состав таблицы и описание полей представлены в таблице 3.4.
Таблица 3.4 - Атрибуты таблицы «Коэффициент использования стандартных
модулей»
Название поля
Тип поля
Описание
Код_использования
Счетчик
Номер коэфициента
Степень_охвата_реализауемых_функций_ПО_стандартными_модулями
Короткий текст
Процентное соотношение охвата ПО стандартными модулями
Значение_Кт
Короткий текст
Значения коэффициентов использования стандартных модулей
Таблица «Коэффициент новизны» - предназначена для хранения коэффициентов
новизны для различных категорий новизны ПО. Состав таблицы и описание полей
представлены в таблице 3.5.
Таблица 3.5 - Атрибуты таблицы «Коэффициент новизны»
Название поля
Тип поля
Описание
Код_новизны
Счетчик
Номер коэфициента
Категория_новизны
Короткий текст
Категория новизны ПО (А,Б,В)
Использование_на_ основании_нового типа_ПК
Короткий текст
Разрабатываемое ПО предназначено для нового типа ПК (+/-)
Использование_в_среде_новой_ОС
Короткий текст
Разрабатываемое ПО предназначено для среды новой ОС (+/-)
Значение_Кн
Короткий текст
Коэффициент новизны
Таблица «Коэффициент сложности» - предназначена для хранения
коэффициентов, учитывающих сложность разрабатываемого программного обеспечения
обладающими различными характеристиками. Состав таблицы и описание полей
представлены в таблице 3.6.
Таблица 3.6 - Атрибуты таблицы «Коэффициен сложности»
Название поля
Тип поля
Описание
1
2
3
Код_кфсложности
Счетчик
Номер коэффициента сложности
Характеристика_ повышения_сложности_ПО
Длинный текст
Характеристика на основе которой повышается коэффициент
Значение_Кс
Короткий текст
Значения коэффициентов сложности для той или иной
характеристики
Таблица «Коэффициент средства разработки» - предназначена для хранения
коэффициентов средств разработки ПО для различных операционных систем и сред
использования. Состав таблицы и описание полей представлены в таблице 3.7.
Таблица 3.7 - Атрибуты таблицы «Коэффициент средства разработки»
Название поля
Тип поля
Описание
Код_средства
Счетчик
Номер коэффициента средств разработки
Средства_разработки_ПО
Длинный текст
Описание средства разработки ПО
Значения_Кур_IBMPC_Windows
Короткий текст
Значение коэффициентов для программ разрабатываемых на
основе Windows и IBMPC
Значение_Кур_для_ локальных_сетей
Короткий текст
Значения коэффициентов для программ, работающих в локальных
сетях
Значение_Кур_для_глобальных_сетей
Короткий текст
Значения коэффициентов для программ, работающих в
глобальных сетях
Таблица «Нормативная трудоемкость» - предназначена для хранения объема ПО
в строках и для каждой категории сложности в отдельности. Состав таблицы и
описание полей представлены в таблице 3.8.
Таблица 3.8 - Атрибуты таблицы «Нормативная трудоемкость»
Название поля
Тип поля
Описание
1
2
3
Код_трнормы
Счетчик
Номер трудовой нормы
Объем_ПО
Числовой
Содержит уточненное количество строк для расчета
нормативной трудоемкости
Первая
Числовой
Нормативная трудоемкость для первой категории сложности
Вторая
Числовой
Нормативная трудоемкость для второй категории сложности
Третья
Числовой
Нормативная трудоемкость для третей категории сложности
Таблица «Показатели» - предназначена для хранения основных экономических
показателей в РУП «Белоруснефть». Состав таблицы и описание полей представлены
в таблице 3.9.
Таблица 3.9 - Атрибуты таблицы «Показатели»
Название поля
Тип поля
Описание
Код_показателя
Счетчик
Номер показателя
Показатель
Короткий текст
Название показателя
Значение
Короткий текст
Значения показателей
Таблица «Ставка» - предназначена для хранения тарифной ставки первого
разряда программиста в РУП «Белоруснефть». Состав таблицы и описание полей
представлены в таблице 3.10.
Таблица 3.10 - Атрибуты таблицы «Ставка»
Название поля
Тип поля
Описание
1
2
3
Ставка1разряда
Короткий текст
Ставка 1-ого разряда программиста
Таблица «Расчеты» - предназначена для хранения данных о рассчитанных
программных продуктах в РУП «Белоруснефть». Состав таблицы и описание полей
представлены в таблице 3.11.
Таблица 3.11 - Атрибуты таблицы «Расчеты»
Название поля
Тип поля
Описание
Код_расчета
Счетчик
Номер расчета
Код_функции
Числовой
Номер функции
Код_значения_case
Числовой
Номер коэффициента
Код_значения
Числовой
Номер коэффициента
Код_использования
Числовой
Номер коэффициента
Код_новизны
Числовой
Категория новизны ПО (А,Б,В)
Код_кфсложности
Числовой
Номер коэффициента сложности
Код_средства
Числовой
Номер коэффициента средств разработки
Код_ставки
Числовой
Номер ставки
Код_показателя
Числовой
Номер показателя
Код_трнормы
Числовой
Номер трудовой нормы
Название
Длинный текст
Название рассчитываемого программного продукта
Стоимость
Короткий текст
Себестоимость программного продукта
Длительность
Короткий текст
Длительность разработки программного продукта
Автор
Длинный текст
Автор расчетов
Дата_расчета
Дата и время
Дата расчета себестоимости и длительности программного
продукта
3.2 Разработка графического интерфейса
Графический интерфейс пользователя - разновидность пользовательского
интерфейса, в котором элементы интерфейса (меню, кнопки, значки, списки и т.
п.), представленные пользователю на дисплее, исполнены в виде графических
изображений [9].
В графическом интерфейсе пользователь имеет произвольный доступ (с
помощью устройств ввода - клавиатуры, мыши, джойстика и т. п.) ко всем видимым
экранным объектам (элементам интерфейса) и осуществляет непосредственное
манипулирование ими.
Графический интерфейс пользователя является частью пользовательского
интерфейса и определяет взаимодействие с пользователем на уровне
визуализированной информации.
Можно выделить следующие виды графического интерфейса пользователя:
- простой;
- истинно-графический, двухмерный;
- трёхмерный.
Для разработки автоматизированной системы разработан макет графического
интерфейса, представленный на рисунке 3.2.
Рисунок 3.2 - Макет главного окна программы: 1- вкладка расчета
длительности; 2- вкладка расчета себестоимости; 3 - вкладка предыдущих
расчетов; 4 - поле выбора количества строк; 5 - поле выбора категории
сложности; 6 - поле вывода уточненного объема строк; 7 - поле вывода
нормативной трудоемкости ПО; 8 - поле ввода названия программы; 9 - поле ввода
руководителя проекта; 10 - поле выбора категории новизны; 11 - элемент расчета
программы с применением case-технологий; 12 - элемент расчета программы без
применения case-технологий; 13 - поле выбора коэффициента сложности; 14 - поле
выбора коэффициента использования стандартных модулей; 15 - Поле выбора
коэффициента средств разработки ПО; 16 -Кнопка расчета трудоемкости ПО.
На рисунке 3.3 представлен графический макет окна выбора языка
программирования для расчета количества строк.
Рисунок 3.3 - Макет окна выбора языка программирования: 1 - флаг выбора
языка написания «Delphi»; 2 - флаг выбора языка написания «С++ Builder»; 3 -
флаг выбора языка программирования «Visual C++»; 4 - флаг выбора языка
программирования «Java»; 5 - кнопка для выбора языка программирования;
На рисунке 3.4 представлен графический макет окна выбора функций ПО и
расчета количества строк.
Рисунок 3.4 - Макет окна выбора функций ПО и расчета количества строк:
- область выбора функций ПО; 2 - кнопка переноса функций из одной области
в другую; 3 - кнопка удаления функций по из рабочей области; 4 - кнопка расчета
количества строк по выбранным функциям; 5 - область отобранных функций ПО.
Список использованных компонентов управления и визуализации и их
назначение приведён в таблице 3.12.
Таблица 3.12 - Используемые компоненты и их назначение
Компонент
Назначение
Label
Отображение текста описания или информации во время
выполнения, не редактируемые пользователем
GroupBox
Отображает рамку вокруг группы элементов
TextBox
Ввод текста и выбор полей
Button
Выполнение заданного события при щелчке
DataGridView
Отображает данные в настраиваемой сетке.
TabControl
Управляет связанным набором страниц вкладок.
RadioButton
Выбор определённого параметра из группы
Chart
Служит для вывода графиков
Combobox
Представляет элемент управления "поле со списком"
В классе «Form1» происходит выбор параметров для заполнения полей.
Основные элементы класса описаны в таблице 3.13.
Таблица 3.13 - Основные элементы класса «Form1»
Название метода
Описание
private void textBox1_TextChanged(object sender, EventArgs
e)
Выбор языка программирования
private void button4_Click(object sender, EventArgs e)
Расчет полей в зависимости от языка программирования
private void textBox5_Click
Выбор категории новизны
В классе «Form3» происходит выбор основных функций и подсчета
количества строк ПО для заполнения полей. Основные элементы класса описаны в
таблице 3.15.
Таблица 3.15 - Основные элементы класса «Form3»
Название методаОписание
private void button1_Click(object sender, EventArgs e)
Передача параметров из одной области в другую
private void button2_Click(object sender, EventArgs e)
Удаления параметров из области
private void button3_Click(object sender, EventArgs e)
Подсчет суммы строк
public string Summ()
Передача суммы на «Form1»
В классе «Form5» происходит выбор категории новизны ПО. Основные
элементы класса описаны в таблице 3.17.
Таблица 3.17 - Основные элементы класса «Form5»
Название метода
Описание
private void button1_Click(object sender, EventArgs e)
Выбор категории новизны
public string zn()
Передача значения коэффициента категории новизны на «Form1»
В классе «Form6» происходит выбор коэффициентов повышения
сложности ПО. Путем выбора функции и переноса ее в другую область Основные
элементы класса описаны в таблице 3.18.
Таблица 3.18 - Основные элементы класса «Form6»
Наименование метода
Описание
private void button1_Click(object sender, EventArgs e)
Передача параметров из одной области в другую
private void button2_Click(object sender, EventArgs e)
Удаления параметров из области
private void button3_Click(object sender, EventArgs e)
Подсчет суммы коэффициентов
.4 Описание работы с программой «Автоматизированный расчет
себестоимости и длительности разработки ПО»
Разработанное приложение позволяет рассчитывать себестоимость и
длительность разработки ПО в РУП «Белоруснефть» в случае возникновения вопроса
приобретения или собственной разработки программного продукта.
Для начала работы с программой необходимо запустить ярлык «Расчет
себестоимости.exe». После чего откроется главное окно программы,
представленное на рисунке 3.5.
Рисунок 3.5 - Главное окно программы
В главном окне, имеется три вкладки:
а) расчет длительности;
б) расчет себестоимости;
в) предыдущие расчеты.
На вкладке «Расчет длительности» необходимо выбрать значения и коэффициенты
для разрабатываемого ПО.
При нажатии на поле «Количество строк» откроется окно, представленное на
рисунке 3.6, где предстоит выбрать один и четырех предложенных языков
программирования и нажать на кнопку «Выбрать».
Рисунок 3.6 - окно выбора языка программирования
По нажатию кнопки «Выбрать» откроется окно с функциями соответствующие
выбранному языку программирования. Значения функций, перенесенных из левой
области в правую, суммируются по нажатию кнопки «ОК». Сумма строк заносится в
поле «Количество строк» на вкладке «Расчет длительности». Окно выбора функций
представлено на рисунке 3.7.
Рисунок 3.7 - Окно выбора функций
При нажатии на поле «Категория сложности» откроется окно в котором
пользователю предстоит выбрать категорию сложности разрабатываемого
программного обеспечения, соответствующую предложенным характеристикам. Окно
выбора категории сложности представлено на рисунке 3.8.
Поля «Уточненный объем» и «Нормативная трудоемкость» заполняются
автоматически исходя из данных полей «Количество строк» и «Категория
сложности».
После расчета нормативной трудоемкости необходимо ввести ФИО руководителя
проекта и название проекта в полях «Руководитель проекта» и «Название проекта».
Далее необходимо нажать на поле «Категория новизны», в результате чего
откроется окно, в котором пользователю предстоит выбрать характеристики и
основание использования, соответствующие программному продукту. После чего
нажать на кнопку «Выбрать».
В поле «Категория новизны» отобразиться категория новизны ПО (А, Б, В).
Окно выбора категории новизны представлено на рисунке 3.9.
Рисунок 3.8 - Окно выбора категории сложности
Рисунок 3.9 - Окно выбора категории новизны
Так же при расчете пользователю потребуется выбрать применения
case-средств в разрабатываемом ПО.
Нажав на поле «Коэффициент сложности» откроется окно, в котором
необходимо выбрать характеристику повышения сложности нажав на нее 1 раз. Окно
«Коэффициент повышения сложности» представлено на рисунке 3.10. С полем
«Стандартные модули» необходимо проделать те же действия.
Рисунок 3.10 - Окно выбора коэффициента повышения сложности
себестоимость автоматизация программное обеспечение
По нажатию на поле «Средства разработки ПО» откроется окно в котором
необходимо выбрать средства и среду разработки программного обеспечения, после
чего нажать на кнопку «Выбрать». В поле появится значение выбранного средства
для разрабатываемой среды. Окно «Средства разработки» представлено на рисунке
3.11.
После заполнения всех полей необходимо нажать на кнопку «Рассчитать
длительность». В результате чего будет составлена таблица и построен график с
отображением общей трудоемкости по стадиям разработки. Так же таблица будет
содержать общую трудоемкость затраченную на разработку ПО.
Рисунок 3.11 - Окно выбора средств разработки ПО
После выбора данных для заполнения полей необходимо нажать на кнопку
«Расчет длительности», в результате чего на экране появится таблица и график с
данными по стадиям разработки. Так же есть возможность вывода данных
результатов на печать. В дальнейшем все расчеты производятся исходя из данных
общей трудоемкости. Результаты расчета длительности разработки представлены на
рисунке 3.12.
Рисунок 3.12 - Расчет длительности разработки ПО.
На вкладке «Расчет себестоимости» необходимо выбрать квалификационный
разряд программиста, разрабатываемого программу и ввести процент повышения
заработной платы и накладных расходов на разработку программного обеспечения.
После чего нажать кнопки «Расчет затрат» и «Расчет себестоимости». В результате
заполняться две таблицы с рассчитанными значениями.
В первой таблице будут отображены основные экономические показатели РУП
«Белоруснефть», а также рассчитана площадь на одно рабочее место и стоимость
1-го метра производственной площади.
Во второй таблице рассчитанные показатели для расчета себестоимости
программного обеспечения и исходя из данных показателей рассчитанная
себестоимость.
Так же при изменении в организации экономических показателей или ставки
первого квалификационного разряда, пользователь может изменить данные значения.
При необходимости, данные таблиц могут быть выведены на печать. После расчетов
данные записываются в таблицу «Расчеты» расположенную на вкладке «Предыдущие
расчеты». Вкладка расчет себестоимости представлена на рисунке 3.13.
Рисунок 3.13 - Вкладка «Расчет себестоимости»
На вкладке «Предыдущие расчеты» находится таблица с данными о предыдущих
расчетах себестоимости и длительности разработки ПО. Пользователь при
необходимости может найти нужную программу. Вкладка предыдущие расчеты
представлена на рисунке 3.14.
Рисунок 3.14 - Предыдущие расчеты
Выводы: Спроектирован графический интерфейс пользователя, описаны
используемые компоненты и разработанные классы в программе, представлена
структура классов, описана работа с программой.
4. ТЕСТИРОВАНИЕ И ВЕРИФИКАЦИЯ
РАЗРАБОТАННОГО ПРОГРАММНОГО СРЕДСТВА
Для проверки правильности выполнения расчетов себестоимости и
длительности разработки ПО следует нажать на поле «Количество строк», после
чего выбрать язык программирования. Откроется окно с функциями и объемом строк
(рисунок 4.1).
Рисунок 4.1 - Выбор функций разрабатываемого ПО
Чтобы избежать ошибочных ситуаций, при передаче параметров между окнами.
Была введена обработка передачи пустого параметра. В случай успешной передачи
параметров в поле «Количество строк» появиться сумма строк по выбранным
функциям. Иначе на экране появится сообщение о ошибке. Тест передачи параметров
представлен на рисунке 4.2.
Рисунок 4.2 - Проверка передачи параметров между окнами
В зависимости от выбранной категории сложности и уточненного объема
строк, рассчитывается нормативная трудоемкость разрабатываемой программы
согласно постановлению Министерства труда и социальной защиты Республики
Беларусь от 27.06.2007 №91.
На рисунке 4.3 видно, что данные выбранные в программе полностью
соответствуют постановлению.
Рисунок 4.3 - Методика расчета нормативной трудоемкости
При выборе категории новизны коэффициент заполняется автоматически, в
зависимости от выбранных параметров. Для этого необходимо выбрать один из трех
флажков напротив необходимой категории новизны и флажок напротив одного из
оснований использования.
На рисунке 4.4 видно, что значения программы считают данные в
соответствии с Постановлению Министерства труда и социальной защиты Республики
Беларусь от 27.06.2007 №91. Рисунок 4.4 - Проверка выбранной категории новизны
В случае, когда нет значения количества строк. Невозможно высчитать
нормативную трудоемкость. Поэтому при выборе категории сложности на экране
появляется сообщение об ошибке. Проверка целостности представлена на рисунке
4.5
Рисунок 4.5 - Проверка целостности данных
Для расчета общей трудоемкости и трудоемкости по стадиям необходимо знать
коэффициенты удельных весов программы. Для их вычисления необходимо выбрать
разработку с применением case-технологий или без применения case-технологий.
Как видно на рисунке 4.6 коэффициенты удельных весов берутся в соответствии с
Постановлением Министерства труда и социальной защиты Республики Беларусь от
27.06.2007 №91.
Рисунок 4.6 - Проверка коэффициентов удельных весов
При вычислении коэффициента, учитывающего стандартные модули необходимо
определить степень их использования в программе. Из рисунка 4.7 видно, что
данный коэффициент согласно Постановления Министерства труда и социальной
защиты Республики Беларусь от 27.06.2007 №91 соответствует значению, выбранному
в программе.
Рисунок 4.7 - Проверка коэффициентов использования стандартных модулей
Для выбора коэффициента средств разработки необходимо выбрать язык
программирования, на котором разрабатывался программный продукт и среду
разработки. На рисунке 4.8 показано, что программа правильно выбирает
коэффициент.
Рисунок 4.8 - Проверка коэффициента средств разработки
Разработанные руководства пользователя и программиста
представлены в приложениях Д и Е соответственно.
В случае, когда общая трудоемкость не рассчитана, на вкладке «Расчет
себестоимости» появляется сообщение о необходимости расчета первой вкладки. На
рисунке 4.9 Представлена проверка расчета себестоимости без расчета
трудоемкости.
Рисунок 4.9 - Проверка расчета себестоимости без учета трудоемкости
Как видно, все выбранные значения совпадают. Таким образом, исходя из
произведенных расчётов, можно сделать вывод о корректности работы программы.
. ОРГАНИЗАЦИОННО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ ПРОЕКТА
5.1 Расчет общей трудоемкости разработки
программного обеспечения
В соответствии с Постановлением Министерства труда и социальной защиты
Республики Беларусь от 27.06.2007 № 91 «Об утверждении укрупненных норм затрат
труда на разработку программного обеспечения» основой для определения общей
трудоемкости разработки ПО, объемов финансирования на стадии его
технико-экономического обоснования используются укрупненные нормы затрат труда.
На основе общей трудоемкости разработки ПО составляется смета затрат и
трудоемкость выполняемых работ по этапам разработки ПО.
Единицей измерения объема ПО является строка исходного кода программы.
Общий объем ПО (V0) определяется исходя из количества и
объема функций, реализуемых программой, по каталогу функций ПО [приложение Ж,
таблица Ж.1], и рассчитывается по формуле:
где Vi - объем отдельной функции программы;
n
- общее число функций.
Исходя из того, что данный проект выполняется в учебных целях,
реализованные функции имеют существенно упрощенное содержание, а использование
современных средств автоматизации разработки снижает трудоемкость такого
процесса, поэтому нормативные значения подлежат корректировке. Уточненный объем
функций получается снижением их объема на величину до 90% от значений по
каталогу.
Сравнение исходного и уточнённого объема строк исходного кода
представлено в таблице 5.1.
Таблица 5.1 - Сравнение исходного и уточнённого объёма строк исходного
кода
Код функции
Наименование (содержание) функции
Объем функций (строк исходного кода)
исходный
уточненный
1
2
3
4
101
Организация ввода информации
130
13
1
2
3
4
107
Организация ввода/вывода информации в интерактивном режиме
280
28
207
Организация поиска и поиск в базе данных
4720
470
403
Формирование служебных таблиц
1140
114
706
Предварительная обработка и печать файла
420
42
707
Графический вывод результатов
420
42
Итого:
7110
711
Согласно формуле (5.1) уточненный объем ПО (Vу)
составляет:
Разработанный
в ходе выполнения дипломного проекта программный продукт по своим
характеристикам относится к третьей категории сложности [приложение Ж, таблица
Ж.2], поскольку не обладает характеристикой переносимости ПО.
Исходя
из уточненного объема программы и ее категории сложности нормативная
трудоемкость (Тн) выполняемых работ [Приложение Ж, таблица Ж.3]
составляет 36 чел.-дн.
Дополнительные
затраты труда, связанные с повышением сложности разработанного ПО, учитываются
посредством коэффициента повышения сложности ПО (Кс), который
рассчитывается по формуле (5.2).
где Ki - коэффициент, соответствующий степени повышения
сложности;
n
- количество учитываемых характеристик, шт.
Так как разработанное ПО обеспечивает интерактивный доступ,
соответствующий степени повышения сложности (Ki) составляет
0,07. Таким образом, по формуле (5.2) Кс получает значение:
Новизна
разработанного ПО определяется путем экспертной оценки данных, полученных при
сравнении его характеристик с имеющимися аналогами. Согласно результатам
экспертной оценки новизна ПО соответствует категории В, а коэффициент (Кн),
учитывающий новизну ПО, равен 1,0.
Степень
использования в разработанном ПО стандартных модулей определяется их удельным
весом в общем объеме программного продукта. В созданной автоматизированной
системе расчета себестоимости и длительности ПО используется до 65 %
стандартных модулей. Таким образом, коэффициент, учитывающий степень
использования стандартных модулей ПО (Кт)составляет 0,55.
Еще
одним фактором, влияющим на трудоемкость разработки ПО, является коэффициент,
учитывающий средства разработки ПО (Кур). Программа
разработана с применением процедурного языка высокого уровня «С#» для работы в
ОС «MSWindows», а также для работы не в сетях, что определяет значение
коэффициента Кур равное 0,8.
В
соответствии с ГОСТ 19.102-77 «ЕСПД. Стадии разработки» выделяют следующие
основные стадии разработки ПО: техническое задание (ТЗ), эскизный проект (ЭП),
технический проект (ТП), рабочий проект (РП), внедрение (ВН). Значение
коэффициентов удельных весов трудоемкости стадий разработки ПО в общей
трудоемкости создания программного продукта, определяется с учетом установленной
категории новизны ПО. При этом сумма значений коэффициентов удельных весов всех
стадий в общей трудоемкости равна единице. При распределении трудоемкости по
стадиям учитывается, что программный продукт разрабатывался с применением
CASE-технологии. Таким образом, можно представить следующее распределение
коэффициентов по стадиям разработки ПО: КТЗ + КЭП + КТП
= 0,55, КРП =0,33, КВН = 0,12.
Нормативная
трудоемкость выполняемых работ по стадиям разработки корректируется с учетом
коэффициентов: повышения сложности ПО (Кс), учитывающего новизну ПО
(Кн), учитывающего степень использования стандартных модулей (Кт),
средства разработки ПО (Кур).
Трудоемкость
работ на стадиях «Техническое задание», «Эскизный проект» и «Технический
проект» определяется по формуле:
Трудоемкость работ на стадии рабочего проекта определяется по формуле:
Трудоемкость работ на стадии внедрения не учитывается в общей
трудоемкости разработки ПО, так как внедрение ПО в производственный или учебный
процесс не предполагается. Тогда, общая трудоемкость разработки ПО (ТО)
определяется суммированием нормативной (скорректированной) трудоемкости ПО по
стадиям разработки:
где Туi - нормативная (скорректированная) трудоемкость
разработки ПО на i-й стадии, чел.-дн.;
n
- количество стадий разработки, шт.
Результаты расчетов по определению нормативной и скорректированной
трудоемкости ПО по стадиям разработки представлены в таблице 5.2.
Таблица 5.2 - Результаты расчетов общей трудоемкости ПО
Показатели
Стадии разработки
Итого
ТЗ
ЭП
ТП
РП
ВН
Коэффициенты удельных весов трудоемкости стадий разработки
ПО (КТЗ, КЭП, КТП, КРП, КВН)
0,55
0,33
0,12
1
Распределение нормативной уточненной трудоемкости ПО по
стадиям, чел.-дн.
20
12
-
32
Коэффициент повышения сложности ПО (Кс)
1,06
1,06
1,06
-
Коэффициент, учитывающий новизну ПО (Кн)
1,0
1,0
1,0
-
Коэффициент, учитывающий степень использования стандартных
модулей (Кт)
-
0,55
-
-
Коэффициент, учитывающий средства разработки ПО (Кур)
0,8
0,8
0,8
-
Распределение скорректированной (с учетом Кс, Кн,Кт, Кур)
трудоемкости ПО по стадиям, чел.-дн.
17
6
-
23
Примечание ― Трудоемкость работ на стадии внедрения не учитывается
в общей трудоемкости разработки ПО, так как внедрение ПО в производственный или
учебный процесс не предполагается.
.2 Расчет затрат на разработку
программного обеспечения
При расчете затрат на разработку программного продукта следует
придерживаться общей методики определения статей расходов для традиционной
продукции.
В состав затрат на разработку программного продукта входят следующие
статьи расходов:
затраты труда на создание программного продукта;
затраты на машинное время;
затраты на материалы;
затраты на энергию, на использование каналов связи;
Исходные данные по статьям затрат представлены в таблице 5.3.
Таблица 5.3 - Исходные данные
Показатель
Условное обозначение
Единицы измерения
Значение
Балансовая стоимость компьютера
БК
рубль
993
Мощность, потребляемая компьютером
МК
кВт
0,085
Полезный фонд времени работы компьютера за год
FK
дней
304
Стоимость 1кВт/час
С
рубль
0,28844
Площадь на 1 рабочее место
Spv
м2
6,8
Стоимость 1м2 производственной площади
Спл
рубль
633,48
Норма амортизации для оборудования
Нао
процент
20
Норма амортизации для зданий
Напл
процент
1
Отчисления на текущий ремонт оборудования (в % от
балансовой стоимости)
PO
процент
3,10
Примечание ― Источник [приложение З];
Балансовая стоимость стационарного компьютера составляет 993 рублея.
Общая мощность, потребляемая компьютером, составляет 0,085 кВт.
Полезный фонд времени работы компьютера за год зависит от полезного фонда
рабочего времени предприятия. Количество рабочих дней без учета праздников и
выходных при шестидневной рабочей неделе в 2017 году составляет 304.
Стоимость 1 кВт/час для РУП «Белоруснефть» составляет 0,28844 рублей.
Площадь на одно рабочее место зависит от общей рабочей площади
предприятия и среднесписочной численности сотрудников, работающих на данной
площади. Рабочая площадь административного здания составляет 2238,8 м2,
а среднесписочная численность - 327 человек. Расчет площади на одно рабочее
место производится путем деления общей площади на среднесписочную численность
сотрудников организации. Таким образом, площадь на одно рабочее место
составляет 6,8 м2.
Стоимость 1 м2 производственной площади зависит от стоимости
здания предприятия (или стоимости его аренды) и общей площади предприятия.
Стоимость здания предприятия составляет 1418245,04 рублей. Расчет стоимости 1 м2
производственной площади производится путем деления стоимости здания
предприятия на общую площадь предприятия. Тогда, 1 м2
производственной площади составит 633,48 рублей.
Стоимость потребляемой энергии выражается в рублях. Её можно определить в
соответствии с данными из таблицы 5.3 по следующей формуле:
где
Квр- коэффициент, учитывающий использование по времени (Квр=0,80);
Кс
- коэффициент, учитывающий потери в сети (Кс = 1, 05).
Таким
образом, стоимость потребляемой энергии составляет:
СЭЛ=
0,085×23×7×0,28844×0,8×1,05 = 3,31 руб.
Сумма амортизационных отчислений рассчитывается по формуле (5.7) линейным
способом, принятым на предприятии.
САОГ = БК×Нао/100+(Sрм×Спл×Наоп/100). (5.7)
Таким образом, годовая сумма амортизационных отчислений составляет:
САОГ
=993×20/100+(6,8×633,48×1/100) = 241,67руб.
Сумма амортизационных отчислений за период разработки ПО составляет:
САО =241,67/ 304 × 23 = 18,28 руб.
Для того, чтобы предотвратить непредвиденные расходы на ремонт
оборудования, необходимо иметь резервный денежный фонд, который формируется в
организации путем отчислений на текущий ремонт оборудования, содержание и
эксплуатацию. Выражаются такие затраты в рублях. Расчеты годовых отчислений
производятся на основе балансовой стоимости оборудования по формуле (5.8):
Зрг = БК × РО / 100. (5.8)
Зрг = 993 × 3,10 / 100 = 30,78 руб.
Тогда отчисления за период разработки составляют:
Зр = 30,78 / 304 × 23 = 2,32 руб.
Таким образом, затраты на машинное время при создании программного
обеспечения составляют:
ЗМВ =3,31 + 30,78 + 2,32 = 36,41 руб.
При расчете затрат на материалы следует учесть использование
компакт-диска для записи исходного кода и результатов проектирования и бумаги
для оформления программной документации.
Исходные данные для определения материальных затрат приведены в таблице
5.4.
Таблица 5.4 - Исходные данные
Материалы
Единицы измерения
Потребность
Цена без НДС, руб.
Бумага
пачка
1
5,6
Итого:
5,6
Затраты на материалы составляют 5,6 рублей.
Для определения величины заработной платы необходимо установить значение
каждого множителя, входящего в формулу, первым из которых является часовая
тарифная ставка работника n-го квалификационного разряда. Ее величина зависит
от квалификационного разряда разработчика, задействованного в создании
программного обеспечения.
Расходы на оплату труда разработчиков с отчислениями (ЗТР)
определяются по следующей формуле (5.9):
где ЗПОСН - основная заработная плата разработчиков, руб.;
ЗПДОП - дополнительная заработная плата разработчиков, руб.;
ОЗП - сумма отчислений от заработной платы, предусмотренных
законодательством, руб.
Расходы на оплату труда рассчитываются с использованием повременной
системы оплаты труда, которая в общем случае предполагает расчет основной
заработной платы на основе тарифной ставки по Единой тарифной сетке (ЕТС)
согласно тарифному разряду разработчика по формуле (5.10):
где ТС1 - тарифная ставка работника первого квалификационного
разряда, составляющая 111,46 рублей [Приложение З];
Kn - тарифный коэффициент, соответствующий n-му
квалификационному разряду ЕТС.
Величина тарифного коэффициента зависит от квалификационного разряда
разработчика, задействованного в создании программного обеспечения. Согласно
образовательному стандарту среднего специального образования специальности 2-40
01 01 «Программное обеспечение информационных технологий» обучение по
специальности обеспечивает получение квалификации «техник-программист». Так, в
качестве разработчика, задействованного в создании программного обеспечения в
рамках дипломного проектирования, следует рассматривать техника-программиста
без квалификационной категории, поскольку в соответствии с выпуском 1 Единого
квалификационного справочника должностей служащих (ЕКСД) «Должности служащих
для всех видов деятельности», утвержденным постановлением Министерства труда
Республики Беларусь 30.12.1999 г. № 159 , квалификационными требованиями к
специалистам в должности техника-программиста первой и второй квалификационных
категорий предусматривается обязательное наличие стажа работы в указанной
должности не менее 2 лет.
В соответствии с постановлением Министерства труда Республики Беларусь от
21.01.2000 г. №6 «О мерах по совершенствованию условий оплаты труда работников
бюджетных организаций и иных организаций, получающих субсидии, работники
которых приравнены по оплате труда к работникам бюджетных организаций» во всех
бюджетных организациях и иных организациях, получающих субсидии, работники
которых приравнены по оплате труда к работникам бюджетных организаций, вне
зависимости от основного вида экономической деятельности организации для техника-программиста,
не имеющего квалификационной категории, устанавливается VII разряд ЕТС,
согласно которого установлен тарифный коэффициент равный 2,03. Исходя из этих
данных рассчитывается тарифная ставка VII разряда:
Предусмотрены повышения тарифной ставки согласно коллективному договору и
положению об оплате труда тарифной ставки в связи с заключением контракта на
50% от тарифной ставки и за вклад эффективность работы в размере 10% от
тарифной ставки. Следовательно, оклад за месяц составит:
Окладом
является фиксированный размер заработной платы за полностью отработанный
календарный месяц. Учитывая, что полученная трудоемкость разработки ПО меньше
количества рабочих дней месяца, в котором велась разработка (май2017 г.),
следует произвести расчет заработной платы исходя из фактически отработанного
времени по формуле (5.11):
где Кфод- количество фактически отработанных дней.
Исходя из общей трудоемкости разработки ПО, равный 23 чел.-дн., основная
заработная плата разработчика по формуле (5.12)составит:
Дополнительная
заработная плата разработчиков (ЗПДОП) включает выплаты,
предусмотренные законодательством о труде (оплата отпусков, льготных часов,
времени выполнения государственных обязанностей и других выплат, не связанных с
основной деятельностью исполнителей), и определяется по нормативу в процентах к
основной заработной плате. Для данного расчета дополнительная заработная плата
устанавливается в размере 18% от основной:
Отчисления
от заработной платы, предусмотренные законодательством, включают:
а)
обязательные страховые взносы в бюджет государственного внебюджетного фонда
социальной защиты населения Республики Беларусь - 34% [10].
б)
обязательное страхование от несчастных случаев на производстве и
профессиональных заболеваний - 1% [11].
Отчисления от заработной платы рассчитываются по формуле (5.12):
В
результате проведенных расчетов расходы на оплату труда разработчика при
создании автоматизированной системы учета реализации готовой продукции
животноводства составляют:
,92+62,44+143,27
= 552,63 рублей.
5.3 Обоснование целесообразности
разработки
Себестоимость продукции - это затраты предприятия на ее производство и
реализацию, выраженные в денежной форме [12]. Себестоимость ПО представляет
собой стоимостную оценку затрат на его создание и реализацию. Смета затрат на
разработанный программный продукт составляется на основе общей трудоемкости
разработки ПО.
Статья затрат «Накладные расходы» для данного расчёта принимается в
размере 15% от величины основной заработной платы разработчика.
Расчет себестоимости программного обеспечения по статьям приведен в
таблице 5.5.
Таблица 5.5 - Калькуляция себестоимости созданного программного
обеспечения
Наименование статей затрат
Сумма, руб.
Стоимость материалов
5,6
Стоимость машинного времени
36,41
Расходы на оплату труда
552,63
Накладные расходы
52,03
Полная себестоимость разработанного ПО
646,67
Таким образом, полная себестоимость разработанного программного продукта
по произведенным расчетам составляет 646,67 рублей.
Проанализировав эти сведения, было принято решение о разработке
собственного узкоспециализированного программного обеспечения для автоматизации
расчета себестоимости и длительности разработки ПО. Это позволит экономить
средства в сравнении с покупным ПО.
6. СВЕДЕНИЯ ПО ОХРАНЕ ТРУДА
Правовое регулирование деятельности по обеспечению
пожарной безопасности. Деятельность по обеспечению пожарной безопасности
осуществляется в соответствии с настоящим законом и другими актами
законодательства Республики Беларусь, в том числе техническими нормативными
правовыми актами системы противопожарного нормирования и стандартизации,
действующими на территории Республики Беларусь [13].
Концентрация паров бензина в воздухе до 0,3% уже через 10 - 15 мин
вызывает головокружение, а концентрация 35 - 40 мг на 1 л воздуха при вдыхании
в течение 5 - 10 мин может вызвать смертельное отравление.
Систематическая работа в среде с высокой концентрацией паров
нефтепродуктов вызывает хроническое отравление организма, характеризующееся
головными болями, головокружением и недомоганием. Предельно допустимая
концентрация паров нефтепродуктов в рабочих помещениях и на рабочих площадках
не должна превышать следующих величин, указанных в мг на 1 л воздуха:
- ацетон - 0,2;
- бензин, керосин - 0,3;
- бензол - 0,05;
- тетраэтилсвинец - 0,0001.
При обращении с нефтепродуктами нельзя допускать появления аэрозоля
(тумана) и следует остерегаться попадания на кожу и в дыхательные пути.
Запрещается засасывать этилированный бензин ртом через шланг. В случае
проникновения бензина в желудок следует вызвать рвоту и промыть желудок содовым
раствором. На заправочном посту должен быть умывальник, бидон с керосином, мыло
и чистая вата.
При хранении и замерах нефтепродуктов необходимо соблюдать следующие меры
предосторожности:
а) при открывании люка резервуара или цистерны следует находиться с
подветренной стороны, чтобы избежать вдыхания нефтепродуктов;
б) замерять уровень нефтепродукта в резервуарах только специальными
измерительными приборами, не опуская при этом голову в люк;
в) при сливо-наливных операциях необходимо надежно закреплять на
месте транспортные средства, предназначенные для сливания или налива
нефтепродуктов;
г) при включении перекачивающих средств убедиться в том, что все
механизмы и резервуары, участвующие в сливных и наливных операциях заземлены;
д) если при заполнении емкости наконечник сливного рукава не достает
до уровня нефтепродукта, то скорость заполнения должна быть минимальной до тех
пор, пока наконечник не погрузиться в нефтепродукт;
е) не допускать переполнения емкости, по окончании наливные трубы,
шланги и рукава выводить из наливной горловины только после полного слива из
них нефтепродуктов;
ж) люки и пробки закрывать плотно, но без ударов, применяя при этом
специальные ключи [14].
Работы по осмотру и зачистке емкостей и резервуаров особенно опасны,
поэтому к ним допускаются только мужчины старше 18 лет, прошедшие медицинский
осмотр. Работу должна проводить бригада в составе не менее 3 человек при
одновременной обработке только одного резервуара.
Рабочий внутри резервуара должен работать в спецодежде и шланговом
противогазе, между ним и находящимся у горловины резервуара должна быть
согласованная сигнализация.
Время пребывания рабочего внутри резервуара в шланговом противогазе не
должно превышать 15 мин с последующим отдыхом на свежем воздухе не менее 15
мин, общее время работы внутри резервуара не должно быть более 2 часов. На
рабочего, спускающегося в резервуар, обязательно надевают спасательный пояс, к
которому крепят по две спасательные веревки. Запрещается спускаться внутри
резервуара, если уровень нефтепродуктов в нем более 5 см и температура воздуха
выше 40°С.
Первичные средства пожаротушения - это инструменты и материалы,
применяемые для огнетушения, эффективные в начальной стадии возгорания. Важно
понимать, что противостоять разыгравшейся огненной стихии посредством
применения ПСП опасно для жизни. Эти средства могут быть использованы людьми,
не обладающими профессиональными знаниями борьбы с огнем, до прибытия на объект
пожарной бригады. ПСП размещают в местах, специально для этого оборудованных -
в пожарных шкафах, на пожарных стендах и пожарных щитах [15].
Виды первичных средств пожаротушения:
Вода - самое популярное средство борьбы с огнем. Когда вода подается на
очаг возгорания, часть не испарившейся жидкости впитывается и снижает
температуру горящего объекта. Растекаясь по полу, вода препятствует возгоранию
не охваченных пламенем частей интерьера. Поскольку вода является
электропроводником, она не пригодна для тушения оборудования и сетей, которые
находятся под напряжением. Категорически запрещается лить воду на
легковоспламеняющиеся жидкости. Такие жидкости образуют на поверхности воды
маслянистые пятна, и, растекаясь вместе с водой, продолжают гореть на ее
поверхности;
Песок и земля - вещества, которые эффективно борются с воспламенением
горючих жидкостей (бензин, масла, смолы, керосин и др.) Насыпая землю по
периметру горящей зоны, пытайтесь окружить место возгорания и воспрепятствовать
растеканию горящей жидкости. После этого следует забросать горящую поверхность
слоем земли, которая перекроет доступ кислорода, необходимого для процесса
горения, и впитает жидкость.
Кошма, металлические мелко ячеечные сетки, асбестовые полотна -
предназначены для того, чтобы оградить очаг возгорания от доступа кислорода.
Это достаточно эффективно, если очаг возгорания имеет небольшую площадь;
Пожарный ручной инструмент и пожарный инвентарь. На пожарных стендах и
пожарных щитах располагается пожарный инструмент - ломы, лопаты, багры, крюки,
топоры и пр. Пожарный инвентарь, как правило, устанавливается рядом с пожарным
щитом или стендом - это может быть ящик с песком, бочка или чан с водой и др.
Пожарный инструмент используется для транспортировки огнетушащих веществ в зону
возгорания, а также для разбора тлеющих конструкций, вскрытия дверей и пр.
Кран пожарный - применяются в комплекте с пожарным стволом и пожарным
рукавом на внутреннем противопожарном водоснабжении. Может использоваться как
для тушения небольшого пожара, так и для серьезного противостояния огню в
качестве дополнительного средства пожаротушения. Располагаются пожарные краны в
пожарных шкафах. Они просты в применении и не требуют специальных навыков и
умений. При установлении факта возгорания, необходимо открыть шкаф, соединить
последовательно пожарный ствол, пожарный рукав и кран. Повернуть вентиль крана
и приступить непосредственно к тушению пожара;
Огнетушитель - стационарное или ручное устройство, предназначенное для
пожаротушения путем выброса запасенного огнетушащего состава. При введении
огнетушителя в активное состояние выпускается пожар подавляющее вещество,
которое под большим давлением выходит из сопла. Этим пожар подавляющим
веществом может быть вода, пена, порошковые или газовые химические соединения.
Согласно нормам пожарной безопасности, все производственные помещения
предприятий, расположенных на территории РБ, должны быть оснащены
огнетушителями. Требование об обязательном наличии огнетушителя в автомобильном
транспорте есть в правилах дорожного движения многих государств мира.
Огнетушители различаются в зависимости от вида, используемого пожар
подавляющего вещества и способа его подачи, методу срабатывания и виду
пускового устройства, а также - от объема корпуса огнетушителя.
Эксплуатация ПСП на территории предприятия проводится согласно
утвержденной приказом руководителя инструкции «По содержанию и применению
средств пожаротушения», которая разрабатывается на базе Правил пожарной
безопасности. Все работники предприятия, в обязательном порядке должны ознакомиться
с положениями данной инструкции. Лица, несущие ответственность за наличие и
готовность ПСП, проводят их ежеквартальный осмотр, с занесением данных
результата осмотра в специальный журнал. Выявленные в ходе осмотра неполадки и
несоответствия должны быть оперативно устранены в кратчайшие сроки.
ЗАКЛЮЧЕНИЕ
В процессе выполнения дипломного проекта была разработана
«Автоматизированная система расчета себестоимости и длительности разработки ПО
РУП «Производственное объединение «Белоруснефть». Данный проект позволил лучше
изучить процесс расчета себестоимости программного обеспечения.
На первом этапе выполнения дипломной проекта был проведён анализ
соответствующей литературы и существующих методик расчета. Затем была
разработана информационная модель поставленной задачи, функциональная схема
программы.
В процессе написания дипломного проекта были собраны и изучены следующие
документы:
а) постановление Министерства труда и социальной защиты Республики
Беларусь от 27.06.2007 N 91 "Об утверждении укрупненных норм затрат труда
на разработку программного обеспечения"
б) методика расчета себестоимости программного обеспечения;
в) трудовой кодекс РБ;
г) Постановление Министерства труда и социальной защиты Республики
Беларусь от 20.09.2002 №123 "Об утверждении Инструкции о порядке
применения Единой тарифной сетки работников Республики Беларусь"
Применение современных компьютеров для развития интеллектуальных систем,
оптимизации и автоматизации производства, является перспективным и позволяет
повысить интеллектуальное развитие общества, увеличить производительность труда
и облегчить выполнение повседневных задач на производстве.
Разработанное программное средство позволяет рассчитывать себестоимость и
длительность программного обеспечения, что значительно сэкономит средства
организации.
В процессе тестирования автоматизированной системы расчета ошибки не
выявлены, выбор коэффициентов и их расчёт осуществляется корректно. Выполнена
верификация выбора коэффициентов путём вычисления вручную и сравнения с
результатами программы.
Результатом работы является готовое к эксплуатации программное средство,
имеющее простой и понятный интерфейс, которое удовлетворяет все предъявленные
требования и условия.
Данное программное средство рекомендуется для использования при
возникновении вопроса приобретения или разработки программного обеспечения.
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ И
СОКРАЩЕНИЙ
В настоящей пояснительной записке применяются следующие термины,
обозначения и сокращения.
РУП - Республиканское Унитарное Предприятие.
БД - База Данных.
СУБД - Система Управления Базами Данных.
ГОСТ - межГОсударственный СТандарт.
ЕТС - Единая Тарифная Сетка.
НДС - Налог на Добавленную Стоимость.
ОС - Операционная Система.
ПК - Персональный Компьютер.
ПО - Программное Обеспечение.(Data Flow Diagram) - диаграмма потока
данных.(Integrated DEFinition) - методология функционального
моделирования.(англ. computer-aided software engineering) - набор инструментов
и методов программной инженерии для проектирования программного обеспечения,
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Фатрелл, Р.Т. Управление программными проектами /
Роберт Т. Фатрелл, Дональд Ф. Шафер, Линда И. Шафер - М. : Вильямс, 2004. - 692
с.
2. Расчет себестоимости [Электронный ресурс] /
Планирование затрат на производство работ и услуг, автоматизация
калькулирования и финансовых расчетов. - Режим доступа: #"896355.files/image053.jpg">
ПРИЛОЖЕНИЕ Б
DFD диаграмма
ПРИЛОЖЕНИЕ В
Функциональная модель программы
ПРИЛОЖЕНИЕ В
Листинг программы
Текст файла Form1.cs:
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OleDb;System.IO;System.Diagnostics;Расчет_себестоимости
{partial class Form1 : Form
{obshsum = 0;per = 0;sebest = 0;flag = 0;Form1()
{();cn = new OleDbConnection();cnstr = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr.ToString();(cn.State ==
ConnectionState.Closed)
{.Open();commText = "Select Название, Стоимость,
Длительность, Руководитель_проекта, Дата_расчета FROM [Расчеты]";comm =
new OleDbCommand(commText, cn);table = new DataTable();adapter = new
OleDbDataAdapter(comm);.Fill(table);.DataSource = table;
}.Close();cn1 = new OleDbConnection();cnstr1 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource = @"Dip.mdb";.ConnectionString
= cnstr1.ToString();(cn1.State == ConnectionState.Closed)
{.Open();commText1 = "Select Объем_ПО, Первая,
Вторая, Третья FROM [Нормативная_трудоемкость]";comm1 = new
OleDbCommand(commText1, cn1);table1 = new DataTable();adapter1 = new OleDbDataAdapter(comm1);.Fill(table1);.DataSource
= table1;
}.Close();cn2 = new OleDbConnection();cnstr2 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr2.ToString();(cn2.State == ConnectionState.Closed) }.Close();cn3 = new OleDbConnection();cnstr3 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr3.ToString();(cn3.State ==
ConnectionState.Closed)
{.Open();commText3 = "Select Ктз_Кэп_Ктп, Крп, Квн
FROM [Значение_коэффициентов_с_CASE]";comm3 = new OleDbCommand(commText3,
cn3);table3 = new DataTable();adapter3 = new
OleDbDataAdapter(comm3);.Fill(table3);.DataSource = table3;
}.Close();cn4 = new OleDbConnection();cnstr4 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr4.ToString();(cn4.State ==
ConnectionState.Closed)
{.Open();commText4 = "Select Значение FROM
[Показатели]";comm4 = new OleDbCommand(commText4, cn4);table4 = new
DataTable();adapter4 = new OleDbDataAdapter(comm4);.Fill(table4);.DataSource =
table4;
}.Close();cn5 = new OleDbConnection();cnstr5 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr5.ToString();(cn5.State ==
ConnectionState.Closed)
{.Open();commText5 = "Select Ставка1разряда FROM
[Ставка]";comm5 = new OleDbCommand(commText5, cn5);table5 = new
DataTable();adapter5 = new OleDbDataAdapter(comm5);.Fill(table5);.DataSource =
table5;
}.Close();
}void button4_Click(object sender, EventArgs e)
{sum = 0;sum1 = 0;del = 0;(flag == 0)
{.Visible = true;(textBox5.Text == "А"
&& radioButton2.Checked == true)
{.Rows[0].Cells[1].Value =
dataGridView4.Rows[0].Cells[0].Value;.Rows[0].Cells[2].Value =
dataGridView4.Rows[0].Cells[1].Value;.Rows[0].Cells[3].Value =
dataGridView4.Rows[0].Cells[2].Value;.Rows[0].Cells[4].Value =
dataGridView4.Rows[0].Cells[3].Value;.Rows[0].Cells[5].Value =
dataGridView4.Rows[0].Cells[4].Value;(int i = 0; i < dataGridView4.ColumnCount;
i++)
{+=
Convert.ToDouble(dataGridView4.Rows[0].Cells[i].Value);
}.Rows[0].Cells[6].Value = sum;
}
{(textBox5.Text == "Б" &&
radioButton2.Checked == true)
{.Rows[0].Cells[1].Value =
dataGridView4.Rows[1].Cells[0].Value;.Rows[0].Cells[2].Value =
dataGridView4.Rows[1].Cells[1].Value;.Rows[0].Cells[3].Value =
dataGridView4.Rows[1].Cells[2].Value;.Rows[0].Cells[4].Value =
dataGridView4.Rows[1].Cells[3].Value;.Rows[0].Cells[5].Value =
dataGridView4.Rows[1].Cells[4].Value;(int i = 0; i <
dataGridView4.ColumnCount; i++)
{+=
Convert.ToDouble(dataGridView4.Rows[1].Cells[i].Value);
}.Rows[0].Cells[6].Value = sum;
}
{(textBox5.Text == "В" &&
radioButton2.Checked == true)
{.Rows[0].Cells[1].Value =
dataGridView4.Rows[2].Cells[0].Value;.Rows[0].Cells[2].Value =
dataGridView4.Rows[2].Cells[1].Value;.Rows[0].Cells[3].Value =
dataGridView4.Rows[2].Cells[2].Value;.Rows[0].Cells[4].Value =
dataGridView4.Rows[2].Cells[3].Value;.Rows[0].Cells[5].Value =
dataGridView4.Rows[2].Cells[4].Value;(int i = 0; i <
dataGridView4.ColumnCount; i++)
{+=
Convert.ToDouble(dataGridView4.Rows[2].Cells[i].Value);
}.Rows[0].Cells[6].Value = sum;
}
{(textBox5.Text == "А" &&
radioButton1.Checked == true)
{=
Convert.ToDouble(dataGridView5.Rows[0].Cells[0].Value) / 3;.Rows[0].Cells[1].Value
= del;.Rows[0].Cells[2].Value = del;.Rows[0].Cells[3].Value =
del;.Rows[0].Cells[4].Value =
dataGridView5.Rows[0].Cells[1].Value;.Rows[0].Cells[5].Value =
dataGridView5.Rows[0].Cells[2].Value;(int i = 1; i < dataGridView5.ColumnCount;
i++)
{+=
Convert.ToDouble(dataGridView5.Rows[0].Cells[i].Value);
}.Rows[0].Cells[6].Value = sum;
}
{(textBox5.Text == "Б" &&
radioButton1.Checked == true)
{=
Convert.ToDouble(dataGridView5.Rows[1].Cells[0].Value) /
3;.Rows[0].Cells[1].Value = del;.Rows[0].Cells[2].Value =
del;.Rows[0].Cells[3].Value = del;.Rows[0].Cells[4].Value =
dataGridView5.Rows[1].Cells[1].Value;.Rows[0].Cells[5].Value =
dataGridView5.Rows[1].Cells[2].Value;(int i = 1; i <
dataGridView5.ColumnCount; i++)
{+= Convert.ToDouble(dataGridView1.Rows[1].Cells[i].Value);
}.Rows[0].Cells[6].Value = sum;
}
{(textBox5.Text == "В" &&
radioButton1.Checked == true)
{=
Convert.ToDouble(dataGridView5.Rows[2].Cells[0].Value) /
3;.Rows[0].Cells[1].Value = del;.Rows[0].Cells[2].Value = del;.Rows[0].Cells[3].Value
= del;.Rows[0].Cells[4].Value =
dataGridView5.Rows[2].Cells[1].Value;.Rows[0].Cells[5].Value =
dataGridView5.Rows[2].Cells[2].Value;(int i = 1; i <
dataGridView5.ColumnCount; i++)
{+=
Convert.ToDouble(dataGridView5.Rows[2].Cells[i].Value);
}.Rows[0].Cells[6].Value = sum;
}
}
}
}
}
}
{.Rows[1].Cells[1].Value =
Math.Round((Convert.ToDouble(textBox4.Text) *
(Convert.ToDouble(dataGridView1.Rows[0].Cells[1].Value))),
2);.Rows[1].Cells[2].Value = Math.Round((Convert.ToDouble(textBox4.Text) *
(Convert.ToDouble(dataGridView1.Rows[0].Cells[2].Value))),
2);.Rows[1].Cells[3].Value = Math.Round((Convert.ToDouble(textBox4.Text) *
(Convert.ToDouble(dataGridView1.Rows[0].Cells[3].Value))),
2);.Rows[1].Cells[4].Value = Math.Round((Convert.ToDouble(textBox4.Text) *
(Convert.ToDouble(dataGridView1.Rows[0].Cells[4].Value))),
0);.Rows[1].Cells[5].Value = Math.Round((Convert.ToDouble(textBox4.Text) *
(Convert.ToDouble(dataGridView1.Rows[0].Cells[5].Value))), 0);(int i = 1; i
< dataGridView1.ColumnCount; i++)
{+= Convert.ToDouble(dataGridView1.Rows[1].Cells[i].Value);
}.Rows[1].Cells[6].Value =
Math.Round(sum1,0);.Rows[2].Cells[1].Value =
textBox6.Text;.Rows[2].Cells[2].Value = textBox6.Text;.Rows[2].Cells[3].Value =
textBox6.Text;.Rows[2].Cells[4].Value = textBox6.Text;.Rows[2].Cells[5].Value =
textBox6.Text;.Rows[2].Cells[6].Value = "-";.Rows[4].Cells[1].Value =
"-";.Rows[4].Cells[2].Value = "-";.Rows[4].Cells[3].Value =
"-";.Rows[4].Cells[4].Value = textBox7.Text; ;.Rows[4].Cells[5].Value
= "-";.Rows[4].Cells[6].Value = "-";.Rows[5].Cells[1].Value
= textBox8.Text;.Rows[5].Cells[2].Value = textBox8.Text;.Rows[5].Cells[3].Value
= textBox8.Text;.Rows[5].Cells[4].Value = textBox8.Text;.Rows[5].Cells[5].Value
= textBox8.Text;.Rows[5].Cells[6].Value = "-";(flag == 0)
{.Rows[6].Cells[1].Value =
Math.Round(Convert.ToDouble(dataGridView1.Rows[1].Cells[1].Value) *
Convert.ToDouble(dataGridView1.Rows[5].Cells[1].Value) *
Convert.ToDouble(dataGridView1.Rows[2].Cells[1].Value) *
Convert.ToDouble(dataGridView1.Rows[3].Cells[1].Value),
0);.Rows[6].Cells[2].Value =
Math.Round(Convert.ToDouble(dataGridView1.Rows[1].Cells[2].Value) *
Convert.ToDouble(dataGridView1.Rows[2].Cells[2].Value) *
Convert.ToDouble(dataGridView1.Rows[3].Cells[2].Value) *
Convert.ToDouble(dataGridView1.Rows[5].Cells[2].Value),
0);.Rows[6].Cells[3].Value =
Math.Round(Convert.ToDouble(dataGridView1.Rows[1].Cells[3].Value) *
Convert.ToDouble(dataGridView1.Rows[2].Cells[3].Value) *
Convert.ToDouble(dataGridView1.Rows[3].Cells[3].Value) *
Convert.ToDouble(dataGridView1.Rows[5].Cells[3].Value),
0);.Rows[6].Cells[4].Value =
Math.Round(Convert.ToDouble(dataGridView1.Rows[1].Cells[4].Value) *
Convert.ToDouble(dataGridView1.Rows[2].Cells[4].Value) *
Convert.ToDouble(dataGridView1.Rows[3].Cells[4].Value) * Convert.ToDouble(dataGridView1.Rows[4].Cells[4].Value)
* Convert.ToDouble(dataGridView1.Rows[5].Cells[4].Value),
0);.Rows[6].Cells[5].Value =
Math.Round(Convert.ToDouble(dataGridView1.Rows[1].Cells[5].Value) *
Convert.ToDouble(dataGridView1.Rows[2].Cells[5].Value) * Convert.ToDouble(dataGridView1.Rows[3].Cells[5].Value)
* Convert.ToDouble(dataGridView1.Rows[5].Cells[5].Value), 0);(int i = 1; i <
dataGridView1.ColumnCount; i++)
{+=
Convert.ToDouble(dataGridView1.Rows[6].Cells[i].Value);
}
.Rows[6].Cells[6].Value = obshsum;= 1;
}.Visible = true;x = "ТЗ ЭП ТП РП ВН";y =
Convert.ToDouble(dataGridView1.Rows[6].Cells[1].Value);.Series[0].Points.AddXY(x,
y);y1 =
Convert.ToDouble(dataGridView1.Rows[6].Cells[2].Value);.Series[1].Points.AddXY(x,
y1);y2 = Convert.ToDouble(dataGridView1.Rows[6].Cells[3].Value);.Series[2].Points.AddXY(x,
y2);y3 =
Convert.ToDouble(dataGridView1.Rows[6].Cells[4].Value);.Series[3].Points.AddXY(x,
y3);y4 =
Convert.ToDouble(dataGridView1.Rows[6].Cells[5].Value);.Series[4].Points.AddXY(x,
y4);= 1;.Size = new Size(1091, 555);.Size = new Size(1055, 500);.Size = new
Size(1050, 495);.Visible = false;.Visible = true;.Visible = true;.Visible =
true;.Visible = true;.Visible = true;.Visible = true;.Visible = true;.Visible =
true;.Visible = true;.Visible = true;
}
{.Show("Не хватает параметров!",
"Ошибка!");
}
}
}void textBox1_TextChanged(object sender, EventArgs e)
{form2 = new Form2();.ShowDialog();.Text =
form2.textBox1.Text;
{yt = Int32.Parse(textBox1.Text);.Text = (yt *
0.10).ToString();
}
{.Show("Нужно передать параметр!",
"Ошибка!");
}
}void textBox3_Click(object sender, EventArgs e)
{form4 = new Form4();.ShowDialog();(form4.DialogResult
== DialogResult.OK).Text = form4.kat();temp = 0,= double.MaxValue;a = 0;b = 0;
{(int i = 0; i < dataGridView3.RowCount; i++)
{= Math.Abs(Convert.ToDouble(dataGridView3.Rows[i].Cells[0].Value)
- Convert.ToDouble(textBox2.Text));(a < t)
{=
Convert.ToDouble(dataGridView3.Rows[i].Cells[0].Value);= a;= i;
}
}
}
{.Show("Нет предыдущего параметра",
"Ошибка!");
}
{(textBox3.Text == "Первая")
{.Text =
(dataGridView3.Rows[b].Cells[1].Value.ToString());
}
{(textBox3.Text == "Вторая")
{.Text =
(dataGridView3.Rows[b].Cells[2].Value.ToString());
}
{(textBox3.Text == "Третья")
{.Text =
(dataGridView3.Rows[b].Cells[3].Value.ToString());
}
}
}
}
{.Show("Нет такого параметра!",
"Ошибка!");
}.Enabled = true;
}void textBox5_Click(object sender, EventArgs e)
{form5 = new Form5();.ShowDialog();(form5.DialogResult
== DialogResult.OK)
{.Rows.Add(7);.Rows[0].Cells[0].Value =
"Коэффициенты удельных весов трудоемкости стадий разработки ПО (Ктз, Кэп,
Ктп, Крп, Квн) ";.Rows[1].Cells[0].Value = "Распределение нормативной
уточненной трудоемкости ПО по стадиям, чел.-дн.";.Rows[2].Cells[0].Value =
"Коэффициент повышения сложности ПО (Кс)";.Rows[3].Cells[0].Value =
"Коэффициент, учитывающий новизну ПО (Кн)";.Rows[4].Cells[0].Value =
"Коэффициент, учитывающий степень использования стандартных модулей
(Кт)";.Rows[5].Cells[0].Value = "Коэффициент, учитывающий средства
разработки ПО (Кур)";.Rows[6].Cells[0].Value = "Распределение
скорректированной (с учетом Кс,Кн,Кт,Кур) Трудоемкости ПО по стадиям,
чел.-дн.";.Rows[3].Cells[1].Value = form5.zn();.Rows[3].Cells[2].Value =
form5.zn();.Rows[3].Cells[3].Value = form5.zn();.Rows[3].Cells[4].Value =
form5.zn();.Rows[3].Cells[5].Value = form5.zn();.Rows[3].Cells[6].Value =
"-";.Text = form5.Kateg();
}(textBox5.Text == "")
{.Enabled = false;.Enabled = false;
}
{.Enabled = true;.Enabled = true;
}.Checked = false;.Checked = false;
}void radioButton1_CheckedChanged(object sender,
EventArgs e)
{(radioButton1.Checked == true || radioButton2.Checked
== true)
{.Enabled = true;
}
}void dataGridView1_CellContentClick(object sender,
DataGridViewCellEventArgs e)
{.RowTemplate.DefaultCellStyle.WrapMode =
System.Windows.Forms.DataGridViewTriState.True;
}void button1_Click_1(object sender, EventArgs e)
{.Rows.Add(9);.Rows[0].Cells[0].Value = "Балансовая
стоимость компьютера";.Rows[1].Cells[0].Value = "Мощность
потребляемая компьютером";.Rows[2].Cells[0].Value = "Полезный фонд
времени работы компьютера за год";.Rows[3].Cells[0].Value =
"Стоимость 1квт/час";.Rows[4].Cells[0].Value = "Площадь на 1
рабочее место";.Rows[5].Cells[0].Value = "Стоимость 1м2
производственной площади";.Rows[6].Cells[0].Value = "Норма амортизации
для оборудования";.Rows[7].Cells[0].Value = "Норма амортизации для
зданий";.Rows[8].Cells[0].Value = "Отчисления на текущий ремонт
оборудования (в % от балансовой стоимости)";.Rows[0].Cells[1].Value =
"БК";.Rows[1].Cells[1].Value = "МК";.Rows[2].Cells[1].Value
= "FК";.Rows[3].Cells[1].Value =
"C";.Rows[4].Cells[1].Value = "Sру";.Rows[5].Cells[1].Value
= "Спл";.Rows[6].Cells[1].Value =
"Нао";.Rows[7].Cells[1].Value =
"Напл";.Rows[8].Cells[1].Value =
"РО";.Rows[0].Cells[2].Value = "Рубль";.Rows[1].Cells[2].Value
= "кВт";.Rows[2].Cells[2].Value =
"Дней";.Rows[3].Cells[2].Value =
"Рубль";.Rows[4].Cells[2].Value =
"М2";.Rows[5].Cells[2].Value =
"Рубль";.Rows[6].Cells[2].Value =
"Процент";.Rows[7].Cells[2].Value =
"Процент";.Rows[8].Cells[2].Value =
"Процент";.Rows[0].Cells[3].Value = dataGridView8.Rows[1].Cells[0].Value;.Rows[1].Cells[3].Value
= dataGridView8.Rows[2].Cells[0].Value;.Rows[2].Cells[3].Value =
dataGridView8.Rows[3].Cells[0].Value;.Rows[3].Cells[3].Value =
dataGridView8.Rows[4].Cells[0].Value;.Rows[4].Cells[3].Value = Math.Round(Convert.ToDouble(dataGridView8.Rows[7].Cells[0].Value)
/ Convert.ToDouble(dataGridView8.Rows[5].Cells[0].Value),
2);.Rows[5].Cells[3].Value =
Math.Round(Convert.ToDouble(dataGridView8.Rows[6].Cells[0].Value) /
Convert.ToDouble (dataGridView8.Rows[7].Cells[0].Value),
2);.Rows[6].Cells[3].Value =
dataGridView8.Rows[8].Cells[0].Value;.Rows[7].Cells[3].Value =
dataGridView8.Rows[9].Cells[0].Value;.Rows[8].Cells[3].Value =
dataGridView8.Rows[0].Cells[0].Value;el =0;= Math.Round(Convert.ToDouble
(dataGridView7.Rows[1].Cells[3].Value) * 192 * Convert.ToDouble(
dataGridView7.Rows[3].Cells[3].Value) * 0.80 * 1.05, 2 );.Text =
el.ToString();zap = 0;= Math.Round
(Convert.ToDouble(dataGridView7.Rows[0].Cells[3].Value) *
Convert.ToDouble(dataGridView7.Rows[6].Cells[3].Value) / 100 +
(Convert.ToDouble(dataGridView7.Rows[4].Cells[3].Value) *
Convert.ToDouble(dataGridView7.Rows[5].Cells[3].Value) *
(Convert.ToDouble(dataGridView7.Rows[7].Cells[3].Value) / 100)), 2);.Text =
zap.ToString();(obshsum > 0)
{= Math.Round((zap / Convert.ToDouble(dataGridView7.Rows[2].Cells[3].Value))
* obshsum, 2);.Text = per.ToString();
}
{.Show("Рассчитайте значения на первой вкладке для
расчета значений поля 'Аммортизационные отчисления за период
разработки!'", "Ошибка!");
}fond = 0;= Math.Round((Convert.ToDouble(
dataGridView7.Rows[0].Cells[3].Value) *
Convert.ToDouble(dataGridView7.Rows[8].Cells[3].Value))/100, 2);.Text =
fond.ToString();fondzap = 0;(obshsum > 0)
{= Math.Round(fond /
Convert.ToDouble(dataGridView7.Rows[2].Cells[3].Value) * obshsum, 2);.Text =
fondzap.ToString();
}
{.Show("Рассчитайте значения на первой вкладке
'Резервный денежный фонд за период разработки!'", "Ошибка!");
}mashvr = 0;= el + per + fondzap;.Text =
mashvr.ToString();
}void button2_Click(object sender, EventArgs e)
{zn = 0;(comboBox1.Text == "1")
{= 1.0;
}
{(comboBox1.Text == "2")
{= 1.16;
}
{(comboBox1.Text == "3")
{= 1.35;
}
{(comboBox1.Text == "4")
{= 1.57;
}
{(comboBox1.Text == "5")
{= 1.73;
}
{(comboBox1.Text == "6")
{= 1.90;
}
{(comboBox1.Text == "7")
{= 2.03;
}
{(comboBox1.Text == "8")
{= 2.17;
}
{(comboBox1.Text == "9")
{= 2.33;
}
{(comboBox1.Text == "10")
{= 2.48;
}
{(comboBox1.Text == "11")
{= 2.65;
}
{(comboBox1.Text == "12")
{= 2.84;
}
{(comboBox1.Text == "13")
{= 3.04;
}
{(comboBox1.Text == "14")
{= 3.25;
}(comboBox1.Text == "15")
{= 3.48;
}
{(comboBox1.Text == "16")
{= 3.72;
}
{(comboBox1.Text == "17")
{= 3.98;
}
{(comboBox1.Text == "18")
{= 4.26;
}
{(comboBox1.Text == "19")
{= 4.56;
}
{(comboBox1.Text == "20")
{= 4.88;
}
{(comboBox1.Text == "21")
{= 5.22;
}
{(comboBox1.Text == "22")
{= 5.59;
}
{(comboBox1.Text == "23")
{= 5.98;
}
{(comboBox1.Text == "24")
{= 6.40;
}
{(comboBox1.Text == "25")
{= 6.85;
}
else
{(comboBox1.Text == "26")
{= 7.33;
}
{(comboBox1.Text == "27")
{= 7.84;
}
{(comboBox1.Text == "28")
{= 8.39;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}tarst = 0;(comboBox1.SelectedIndex > 0)
{=
Math.Round(Convert.ToDouble(dataGridView9.Rows[0].Cells[0].Value) * zn,
2);.Text = tarst.ToString();
}
{.Show("Выберите разряд для расчета тарифной ставки!",
"Ошибка!");
}oklad = 0;(textBox15.Text != "")
{= tarst * 1.50;.Text = oklad.ToString();
}
{.Show("Выберите разряд для расчета оклада!",
"Ошибка!");
}zarpl = 0;
{(textBox16.Text != "")
{= Math.Round(((oklad * 12) /
Convert.ToDouble(dataGridView7.Rows[2].Cells[3].Value)) * obshsum,2);.Text =
zarpl.ToString();
}
{.Show("Выберите разряд для расчета заработной
платы!", "Ошибка!");
}
}
{.Show("Рассчитайте параметры на первой вкладке для
расчета заработной платы!", "Ошибка!");
}procpov = 0;(textBox18.Text != "")
{= Math.Round((Convert.ToDouble(textBox18.Text) * zarpl)
/ 100 ,2);.Text = procpov.ToString();
}
{.Show("Введите процент повышения ЗП, для расчета
дополнительной ЗП!", "Ошибка!");
}otchisl = 0;(textBox18.Text != "")
{= Math.Round(((zarpl + procpov) * 35) / 100, 2);.Text =
otchisl.ToString();
}
{.Show("Введите процент повышения ЗП, для расчета
отчислений из ЗП!", "Ошибка!");
}opltruda = 0;= Math.Round(zarpl + procpov + otchisl
,2);.Text = opltruda.ToString();naklrash = 0;(textBox22.Text != "")
{= Math.Round((Convert.ToDouble(textBox22.Text) * zarpl)
/ 100, 2);.Text = naklrash.ToString();
}
{.Show("Введите процент накладных расходов, для
расчета накладных расходов!", "Ошибка!");
}
{.Rows.Add(4);.Rows[0].Cells[0].Value = "Стоимость
машинного времени";.Rows[1].Cells[0].Value = "Расходы на оплату
труда";.Rows[2].Cells[0].Value = "Накладные
расходы";.Rows[3].Cells[0].Value = "Полная себестоимость
разрабатываемого ПО";.Rows[0].Cells[1].Value = textBox14.Text;.Rows[1].Cells[1].Value
= textBox21.Text;.Rows[2].Cells[1].Value = textBox23.Text;(int i = 0; i <
dataGridView10.RowCount; i++)
{+=
Convert.ToDouble(dataGridView10.Rows[i].Cells[1].Value);
}.Rows[3].Cells[1].Value = sebest;
}
{.Show("Введите параметры");
}
}void textBox6_TextChanged(object sender, EventArgs e)
{form6 = new Form6();.ShowDialog();.Text =
form6.Summa();
}void textBox7_TextChanged(object sender, EventArgs e)
{form7 = new Form7();.ShowDialog();(form7.DialogResult
== DialogResult.OK).Text = form7.kt();
}void textBox8_TextChanged(object sender, EventArgs e)
{form8 = new Form8();.ShowDialog();(form8.DialogResult
== DialogResult.OK).Text = form8.raz();
}
}
}
Текст файла Form2.cs:
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;Расчет_себестоимости
{partial class Form2 : Form
{Form2()
{();
}void button1_Click(object sender, EventArgs e)
{r1 = radioButton1.Checked;r2 = radioButton2.Checked;r3
= radioButton3.Checked;r4 = radioButton4.Checked;form3 = new Form3(r1, r2, r3,
r4);.ShowDialog();();(form3.DialogResult == DialogResult.OK).Text =
form3.Summ();
}
}
}
Текст файла Form3.cs:
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OleDb;System.IO;System.Diagnostics;Расчет_себестоимости
{partial class Form3 : Form
{sum = 0;Form3(bool r1, bool r2, bool r3, bool r4)
{();cn = new OleDbConnection();cnstr = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr.ToString();(cn.State ==
ConnectionState.Closed)
{.Open();commText = "Select Наименование_функции,
Delphi FROM [Каталог_функций]";comm = new OleDbCommand(commText, cn);table
= new DataTable();adapter = new OleDbDataAdapter(comm);.Fill(table);.DataSource
= table;
}.Close();cn1 = new OleDbConnection();cnstr1 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource = @"Dip.mdb";.ConnectionString
= cnstr1.ToString();(cn1.State == ConnectionState.Closed)
{.Open();commText1 = "Select Наименование_функции,
Builder FROM [Каталог_функций]";comm1 = new OleDbCommand(commText1,
cn1);table1 = new DataTable();adapter1 = new OleDbDataAdapter(comm1);.Fill(table1);.DataSource
= table1;
}.Close();cn2 = new OleDbConnection();cnstr2 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr2.ToString();(cn2.State ==
ConnectionState.Closed)
{.Open();commText2 = "Select Наименование_функции,
Builder FROM [Каталог_функций]";comm2 = new OleDbCommand(commText2,
cn2);table2 = new DataTable();adapter1 = new
OleDbDataAdapter(comm2);.Fill(table2);.DataSource = table2;
}.Close();cn3 = new OleDbConnection();cnstr3 = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr3.ToString();(cn3.State ==
ConnectionState.Closed)
{.Open();commText3 = "Select Наименование_функции,
Visual_C FROM [Каталог_функций]";comm3 = new OleDbCommand(commText3,
cn3);table3 = new DataTable();adapter3 = new
OleDbDataAdapter(comm3);.Fill(table3);.DataSource = table3;
}.Close();cn4 = new OleDbConnection();cnstr4 = new
OleDbConnectionStringBuilder();.Provider = "Microsoft.Jet.OLEDB.4.0";.DataSource
= @"Dip.mdb";.ConnectionString = cnstr4.ToString();(cn4.State ==
ConnectionState.Closed)
{.Open();commText4 = "Select Наименование_функции,
Java FROM [Каталог_функций]";comm4 = new OleDbCommand(commText4,
cn4);table4 = new DataTable();adapter4 = new
OleDbDataAdapter(comm4);.Fill(table4);.DataSource = table4;
}.Close();(r1 == true)
{.Visible = true;.Location = new Point(12, 15);
}
{(r2 == true)
{.Visible = true;.Location = new Point(12, 15);
}
{(r3 == true)
{.Visible = true;.Location = new Point(12, 15);
}
{(r4 == true)
{.Visible = true;.Location = new Point(12, 15);
}
}
}
}
}void button1_Click(object sender, EventArgs e)
{(dataGridView1.Visible == true)
{(int i = 0; i < dataGridView1.RowCount; i++)
{(dataGridView1.Rows[i].Cells[0].Selected == true)
{.Rows.Add();(int k = 0; k < dataGridView4.RowCount;
k++)
{(dataGridView1.Rows[i].Cells[0].Value !=
dataGridView4.Rows[k].Cells[0].Value)
{.Rows[dataGridView4.RowCount - 1].Cells[0].Value =
dataGridView1.Rows[i].Cells[0].Value.ToString();.Rows[dataGridView4.RowCount -
1].Cells[1].Value = dataGridView1.Rows[i].Cells[1].Value.ToString();
}
}
}
}
}
{(dataGridView2.Visible == true)
{(int i = 0; i < dataGridView2.RowCount; i++)
{(dataGridView2.Rows[i].Cells[0].Selected == true)
{.Rows.Add();(int k = 0; k < dataGridView4.RowCount;
k++)
{(dataGridView2.Rows[i].Cells[0].Value !=
dataGridView4.Rows[k].Cells[0].Value)
{.Rows[dataGridView4.RowCount - 1].Cells[0].Value =
dataGridView2.Rows[i].Cells[0].Value.ToString();.Rows[dataGridView4.RowCount -
1].Cells[1].Value = dataGridView2.Rows[i].Cells[1].Value.ToString();
}
}
}
}
}
{(dataGridView3.Visible == true)
{(int i = 0; i < dataGridView3.RowCount; i++)
{(dataGridView3.Rows[i].Cells[0].Selected == true)
{.Rows.Add();(int k = 0; k < dataGridView4.RowCount;
k++)
{(dataGridView3.Rows[i].Cells[0].Value !=
dataGridView4.Rows[k].Cells[0].Value)
{.Rows[dataGridView4.RowCount - 1].Cells[0].Value =
dataGridView3.Rows[i].Cells[0].Value.ToString();.Rows[dataGridView4.RowCount -
1].Cells[1].Value = dataGridView3.Rows[i].Cells[1].Value.ToString();
}
}
}
}
}
{(dataGridView5.Visible == true)
{(int i = 0; i < dataGridView5.RowCount; i++)
{(dataGridView5.Rows[i].Cells[0].Selected == true)
{.Rows.Add();(int k = 0; k < dataGridView4.RowCount;
k++)
{(dataGridView5.Rows[i].Cells[0].Value !=
dataGridView5.Rows[k].Cells[0].Value)
{.Rows[dataGridView4.RowCount - 1].Cells[0].Value =
dataGridView5.Rows[i].Cells[0].Value.ToString();.Rows[dataGridView4.RowCount -
1].Cells[1].Value = dataGridView5.Rows[i].Cells[1].Value.ToString();
}
}
}
}
}
}
} }void button2_Click(object sender, EventArgs e)
{(dataGridView1.Visible == true)
{(int i = 0; i < dataGridView4.RowCount; i++)
{(dataGridView4.Rows[i].Cells[0].Selected == true)
{.Rows.RemoveAt(i);
}
}
}
{(dataGridView2.Visible == true)
{(int i = 0; i < dataGridView4.RowCount; i++)
{(dataGridView4.Rows[i].Cells[0].Selected == true)
{.Rows.RemoveAt(i);
}
}
}
{(dataGridView3.Visible == true)
{(int i = 0; i < dataGridView4.RowCount; i++)
{(dataGridView4.Rows[i].Cells[0].Selected == true)
{.Rows.RemoveAt(i);
}
}
}
}
}
}void button3_Click(object sender, EventArgs e)
{(int i = 0; i < dataGridView4.RowCount; i++)
{+=
Convert.ToInt32(dataGridView4.Rows[i].Cells[1].Value);
}.DialogResult = DialogResult.OK;
}string Summ()
{sum.ToString();
}
}
}
Текст файла Form4.cs:
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;Расчет_себестоимости
{partial class Form4 : Form
{p;Form4()
{();
}string kat()
{(radioButton1.Checked == true)
{= "Первая";
}{(radioButton2.Checked == true)
{= "Вторая";
}
{= "Третья";
}
}p;
}void button1_Click(object sender, EventArgs e)
{.DialogResult = DialogResult.OK;
}
}
}
Текст файла Form5.cs:
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OleDb;System.IO;System.Diagnostics;Расчет_себестоимости
{partial class Form5 : Form
{kategor;znach;Form5()
{();cn = new OleDbConnection();cnstr = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr.ToString();(cn.State ==
ConnectionState.Closed)
{.Open();commText = "Select Категория_новизны,
Использование_на_основании_нового_типа_ПК, Использование_в_среде_новой_ОС,
Значение_Кн FROM [Коэффициент_новизны]";comm = new OleDbCommand(commText,
cn);table = new DataTable();adapter = new OleDbDataAdapter(comm);.Fill(table);.DataSource
= table;
}.Close();
}void radioButton3_CheckedChanged(object sender,
EventArgs e)
{.Enabled = false;.Enabled = false;
}void button1_Click(object sender, EventArgs e)
{(radioButton1.Checked == true &&
checkBox1.Checked == true && checkBox2.Checked == true)
{= dataGridView1.Rows[0].Cells[3].Value.ToString();=
dataGridView1.Rows[0].Cells[0].Value.ToString();
}
{(radioButton1.Checked == true &&
checkBox1.Checked == false && checkBox2.Checked == true)
{= dataGridView1.Rows[1].Cells[3].Value.ToString();=
dataGridView1.Rows[1].Cells[0].Value.ToString();
}
{(radioButton1.Checked == true &&
checkBox1.Checked == true && checkBox2.Checked == false)
{= dataGridView1.Rows[2].Cells[3].Value.ToString();=
dataGridView1.Rows[2].Cells[0].Value.ToString();
}
{(radioButton1.Checked == true &&
checkBox1.Checked == false && checkBox2.Checked == false)
{= dataGridView1.Rows[3].Cells[3].Value.ToString();=
dataGridView1.Rows[3].Cells[0].Value.ToString();
}
{(radioButton2.Checked == true &&
checkBox1.Checked == true && checkBox2.Checked == true)
{= dataGridView1.Rows[4].Cells[3].Value.ToString();=
dataGridView1.Rows[4].Cells[0].Value.ToString();
}
{(radioButton2.Checked == true &&
checkBox1.Checked == false && checkBox2.Checked == true)
{= dataGridView1.Rows[5].Cells[3].Value.ToString();=
dataGridView1.Rows[5].Cells[0].Value.ToString();
}
{(radioButton2.Checked == true &&
checkBox1.Checked == true && checkBox2.Checked == false)
{= dataGridView1.Rows[6].Cells[3].Value.ToString();=
dataGridView1.Rows[6].Cells[0].Value.ToString();
}
{(radioButton3.Checked == true)
{= dataGridView1.Rows[7].Cells[3].Value.ToString();=
dataGridView1.Rows[7].Cells[0].Value.ToString();
}
}
}
}
}
}
}
}.DialogResult = DialogResult.OK;
}void radioButton2_CheckedChanged(object sender,
EventArgs e)
{.Enabled = true;.Enabled = true;
}void radioButton1_CheckedChanged(object sender,
EventArgs e)
{.Enabled = true;.Enabled = true;
}string Kateg()
{(kategor);
}string zn()
{(znach);
}
}
}
Текст файла Form6.cs:
using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OleDb;System.IO;System.Diagnostics;Расчет_себестоимости
{partial class Form6 : Form
{sum = 0;Form6()
{();cn = new OleDbConnection();cnstr = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr.ToString();(cn.State ==
ConnectionState.Closed)
{.Open();commText = "Select
Характеристика_повышения_сложности_ПО, Значение_Кс FROM
[Коэффициент_сложности]";comm = new OleDbCommand(commText, cn);table = new
DataTable();adapter = new OleDbDataAdapter(comm);.Fill(table);.DataSource =
table;
}.Close();
}void button1_Click(object sender, EventArgs e)
{(int i = 0; i < dataGridView1.RowCount; i++)
{(dataGridView1.Rows[i].Cells[0].Selected == true)
{.Rows.Add();(int k = 0; k < dataGridView4.RowCount;
k++)
{(dataGridView1.Rows[i].Cells[0].Value !=
dataGridView4.Rows[k].Cells[0].Value)
{.Rows[dataGridView4.RowCount - 1].Cells[0].Value =
dataGridView1.Rows[i].Cells[0].Value.ToString();.Rows[dataGridView4.RowCount -
1].Cells[1].Value = dataGridView1.Rows[i].Cells[1].Value.ToString();
}
}
}
}
}void button2_Click(object sender, EventArgs e)
{(dataGridView1.Visible == true)
{(int i = 0; i < dataGridView4.RowCount; i++)
{(dataGridView4.Rows[i].Cells[0].Selected == true)
{.Rows.RemoveAt(i);
}
}
}
}void button3_Click(object sender, EventArgs e)
{(int i = 0; i < dataGridView4.RowCount; i++)
{+= Convert.ToDouble(dataGridView4.Rows[i].Cells[1].Value);
}.DialogResult = DialogResult.OK;
}string Summa()
{(1 + sum).ToString();
}
}
}
Текст файла Form7.cs:
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OleDb;System.IO;System.Diagnostics;Расчет_себестоимости
{partial class Form7 : Form
{s;Form7()
{();cn = new OleDbConnection();cnstr = new
OleDbConnectionStringBuilder();.Provider = "Microsoft.Jet.OLEDB.4.0";.DataSource
= @"Dip.mdb";.ConnectionString = cnstr.ToString();(cn.State ==
ConnectionState.Closed)
{.Open();commText = "Select
Степень_охвата_реализауемых_функций_ПО_стандартными_модулями, Значение_Кт FROM
[Коэффициент_использования_стандартных_модулей]";comm = new
OleDbCommand(commText, cn);table = new DataTable();adapter = new
OleDbDataAdapter(comm);.Fill(table);.DataSource =
table;.Columns["Значение_Кт"].Visible = false;
}.Close();
}void dataGridView1_CellContentClick(object sender,
DataGridViewCellEventArgs e)
{(int i = 0; i < dataGridView1.RowCount; i++)
{(dataGridView1.Rows[i].Cells[0].Selected == true)
{= dataGridView1.Rows[i].Cells[1].Value.ToString();
}
}.DialogResult = DialogResult.OK;
}string kt ()
{(s);
}
}
}
Текст файла Form8.cs:
using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Data.OleDb;System.IO;System.Diagnostics;Расчет_себестоимости
{partial class Form8 : Form
{kof;Form8()
{();cn = new OleDbConnection();cnstr = new
OleDbConnectionStringBuilder();.Provider =
"Microsoft.Jet.OLEDB.4.0";.DataSource =
@"Dip.mdb";.ConnectionString = cnstr.ToString();(cn.State ==
ConnectionState.Closed)
{.Open();commText = "Select Значения_Кур_IBMPC_Windows,
Значение_Кур_для_локальных_сетей, Значение_Кур_для_глобальных_сетей FROM
[Коэффициент_средства_разработки]";comm = new OleDbCommand(commText,
cn);table = new DataTable();adapter = new
OleDbDataAdapter(comm);.Fill(table);.DataSource = table;
}.Close();
}void button1_Click(object sender, EventArgs e)
{(radioButton1.Checked == true &&
radioButton8.Checked == true)
{= dataGridView1.Rows[0].Cells[0].Value.ToString();
}
{(radioButton2.Checked == true &&
radioButton8.Checked == true)
{= dataGridView1.Rows[1].Cells[0].Value.ToString();
}
{(radioButton3.Checked == true &&
radioButton8.Checked == true)
{= dataGridView1.Rows[2].Cells[0].Value.ToString();
}
{(radioButton4.Checked == true &&
radioButton8.Checked == true)
{= dataGridView1.Rows[3].Cells[0].Value.ToString();
}
{(radioButton5.Checked == true &&
radioButton8.Checked == true)
{= dataGridView1.Rows[4].Cells[0].Value.ToString();
}
{(radioButton6.Checked == true &&
radioButton8.Checked == true)
{= dataGridView1.Rows[5].Cells[0].Value.ToString();
}
{(radioButton7.Checked == true &&
radioButton8.Checked == true)
{= dataGridView1.Rows[6].Cells[0].Value.ToString();
}
{(radioButton1.Checked == true &&
radioButton9.Checked == true)
{= dataGridView1.Rows[0].Cells[1].Value.ToString();
}
{(radioButton2.Checked == true &&
radioButton9.Checked == true)
{= dataGridView1.Rows[1].Cells[1].Value.ToString();
}
{(radioButton3.Checked == true &&
radioButton9.Checked == true)
{= dataGridView1.Rows[2].Cells[1].Value.ToString();
}
{(radioButton4.Checked == true &&
radioButton9.Checked == true)
{= dataGridView1.Rows[3].Cells[1].Value.ToString();
}
{(radioButton5.Checked == true &&
radioButton9.Checked == true)
{= dataGridView1.Rows[4].Cells[1].Value.ToString();
}
{(radioButton6.Checked == true &&
radioButton9.Checked == true)
{= dataGridView1.Rows[5].Cells[1].Value.ToString();
}
{(radioButton7.Checked == true &&
radioButton9.Checked == true)
{= dataGridView1.Rows[6].Cells[1].Value.ToString();
}
{(radioButton1.Checked == true && radioButton10.Checked
== true)
{= dataGridView1.Rows[0].Cells[2].Value.ToString();
}
{(radioButton2.Checked == true &&
radioButton10.Checked == true)
{= dataGridView1.Rows[1].Cells[2].Value.ToString();
}
{(radioButton3.Checked == true &&
radioButton10.Checked == true)
{= dataGridView1.Rows[2].Cells[2].Value.ToString();
}
{(radioButton4.Checked == true &&
radioButton10.Checked == true)
{= dataGridView1.Rows[3].Cells[2].Value.ToString();
}
{(radioButton5.Checked == true &&
radioButton10.Checked == true)
{= dataGridView1.Rows[4].Cells[2].Value.ToString();
}
{(radioButton6.Checked == true &&
radioButton10.Checked == true)
{= dataGridView1.Rows[5].Cells[2].Value.ToString();
}
{(radioButton7.Checked == true &&
radioButton10.Checked == true)
{= dataGridView1.Rows[6].Cells[2].Value.ToString();
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}.DialogResult = DialogResult.OK;
}string raz()
{(kof);
}
}
}
ПРИЛОЖЕНИЕ Д
Руководство пользователя
1. Введение
Программное средство предназначено для автоматизированного расчета себестоимости
и длительности программного обеспечения. Для работы в системе пользователю
достаточно базовых знаний работы за компьютером и ознакомление с данным
руководством.
2. Назначение и условия применения.
Основные функции выполняемы программой:
а) расчет длительности ПО;
б) вывод статистики расчетов длительности;
в) расчет себестоимости ПО;
г) ведение справочников экономических показателей.
3. Подготовка к работе.
Для работы с программой необходимо запустить файл «Расчет
себестоимости.exe», который находится в корневой папке программы.
4. Описание операций.
Основные операции, доступные в программном комплексе:
а) выбор показателей из БД;
б) расчет длительности;
в) вывод графика расчетов;
г) расчет себестоимости;
д) запись данных о себестоимости и длительности в отчет.
. Аварийные ситуации.
В случае кода в программе возникают аварийные ситуации на экран выводятся
сообщения о возникших ошибках.
6. Рекомендации по освоению.
Если пользователь не обладает базовыми навыками, то их следует приобрести
для беспроблемной работы с программой расчета себестоимости и длительности ПО.
ПРИЛОЖЕНИЕ Е
Руководство программиста
. Назначение и условия применения программы.
Программа «Автоматизированная система расчета
себестоимости и длительности разработки ПО РУП «Производственное объединение
«Белоруснефть» предназначен для расчета
себестоимости и длительности разработки ПО. Основные функции:
д) расчет длительности ПО;
е) вывод статистики расчетов длительности;
ж) расчет себестоимости ПО;
з) ведение справочников экономических показателей.
Программа написана на языке программирования C# и предназначена для
использования на персональных компьютерах в операционных системах Microsoft
Windows 7/8/10 c установленным пакетом .NET Framework 3.5 и выше.
2. Характеристики программного комплекса.
Программа состоит 2 основных классов:
- приложения-клиента;
- приложения сервера.
. Обращение к программному комплексу.
Для внесения изменений в автоматизированную систему необходимо
использовать среду Visual Studio 2013 или совместимое с ней ПО. Обращение к
приложению выполняется через запуск файла «Расчет себестоимости.exe».
. Входные и выходные данные.
Входной информацией являются экономические показатели взятые из базы
данных, а выходными являются печатные формы и график расчета длительности
разработки по стадиям.
ПРИЛОЖЕНИЕ Ж
Экономические данные
Таблица Ж.1 - Каталог функций программного обеспечения
Код функции
Наименование (содержание) функции
Объем функций (строк исходного кода (LOC))
с использованием среды разработки приложений
Delphi (Borland)
C++ Builder (Borland)
Visual C++ (Microsoft)
Java
1
2
3
4
5
6
1. Ввод, анализ входной информации, генерация кодов и
процессор входного языка
101
Организация ввода информации
100
110
150
130
102
Контроль, предварительная обработка и ввод информации
290
430
550
490
103
Преобразование операторов входного языка в команды другого
языка
730
850
980
740
104
Обработка входного языка и формирование таблиц
630
900
1340
1040
105
Преобразование входного языка в машинные команды
2950
3100
4200
3620
106
Синтаксический и анализ входного языка и генерация кодов
команд
3750
4900
5700
5350
107
Организация ввода-вывода информации в интерактивном режиме
170
220 280
108
Организация ввода-вывода информации с сети терминалов
2780
2920
3200
2950
109
Управление вводом-выводом
2700
1980
2400
1970
2. Формирование, ведение и обслуживание базы данных
201
Генерация структуры базы данных
3450
3950
4300
3500
202
Формирование базы данных
1700
1750
2180
1980
203
Обработка наборов и записей базы данных
2050
2350
2670
2370
204
Обслуживание базы данных в пакетном режиме
1030
1100
1260
1070
205
Обслуживание базы данных в интерактивном режиме
3800
4400
6950
4840
206
Манипулирование данными
8400
8670
9550
7860
207
Организация поиска и поиск в базе данных
5230
5460
5480
4720
208
Реорганизация базы данных
130
190
220
170
1
2
3
4
5
6
209
Загрузки базы данных
3150
2950
2780
2360
3. Формирование и обработка файлов
301
Формирование последовательного файла
340
560
780
590
302
Автоматическая сортировка файлов
1040
1150
930
890
303
Обработка файлов
750
800
1100
1050
304
Управление файлами
4130
5380
5750
5240
305
Формирование файла
1100
1780
2460
2130
4. Генерация программ и ПО, а также настройка программного
обеспечения
401
Генерация рабочих программ
3680
3920
3360
3120
402
Генерация программ по описанию
7450
8430
9880
6740
403
Формирование служебных таблиц
570
620
1070
1140
404
Система генерации ПО
2950
4340
4980
3250
405
Система настройки ПО
250
300
370
340
5. Управление ПО, компонентами ПО и внешними устройствами
501
Монитор ПО (управление работой компонентов)
670
980
1340
1230
502
Монитор системы
3750
3880
7740
5760
503
Управление внешними устройствами и объектами
5850
6340
5900
4730
504
Обработка прерываний
980
1260
1680
1760
505
Управление внешней памятью
250
210
200
180
506
Обработка ошибочных сбойных ситуаций
970
1310
1720
1540
507
Обеспечение интерфейса между компонентами
1120
1540
1820
1680
6. Тестирование, проведение тестовых испытаний прикладных
программ, вспомогательные программные функции
601
Проведение тестовых испытаний прикладных программ в
интерактивном режиме
4500
4700
4300
3780
602
Вспомогательные и сервисные программы
460
490
580
470
7. Расчётные задачи, формирование и вывод на внешние
носители документов сложной формы и файлов
1
2
3
4
5
6
701
Математическая статистика и прогнозирование
2890
3620
4560
3780
702
Расчётные задачи (расчёт режимов обработки)
9260
13300
14800
11700
703
Расчёт показателей
410
500
460
420
705
Формирование и вывод на внешние носители
2650
2850
3500
3150
706
Предварительная обработка печать файлов
390
410
470
420
707
Графический вывод результатов
300
330
590
420
708
Интерактивный редактор текста
2800
3910
4540
3780
709
Изменение состояния ресурсов в интерактивном режиме
390
440
630
570
701
Математическая статистика и прогнозирование
2890
3620
4560
3780
8. Создание Internet-портала
801
Простой поиск контента портала
55
802
Многокритериальный поиск контента портала
85
803
Разработка системы оплаты услуг сайта при внедрении интерфейса
системы в дизайн сайта
820
804
Создание гостевой книги
50
805
Создание карты сайта
76
806
Сбор статистики о посетителях портала
95
807
Интеграция модуля опроса посетителей сайта
390
808
Создание системы внутренней рекламы
58
809
Создание системы управлением контентом
970
810
Формирование базы данных портала
1480
Таблица Ж.2 -Характеристика категорий сложности ПО
Категория сложности
Характеристики программного обеспечения
1
ПО, обладающее одной или несколькими из следующих
характеристик: 1. Наличие сложного интеллектуального языкового интерфейса с
пользователем. 2. Обеспечение телекоммуникационной обработки данных и
управление удалёнными объектами. 3. Обеспечение существенного
распараллеливания вычислений. 4. Криптография и другие методы защиты
информации
2
ПО, обладающее одной или несколькими из следующих
характеристик: 1. Моделирование объектов и процессов. 2. Обеспечение
настройки ПО на изменение структур входных и выходных данных. 3. Обеспечение
переносимости ПО. 4. Реализация особо сложных инженерных и научных расчётов
3
ПО, не обладающее перечисленными характеристиками
Таблица Ж.3 - Нормативная трудоёмкость на разработку ПО
Объем ПО (строки исходного кода (LOC)), Vу
Категория сложности ПО
Номер нормы
1-я
2-я
3-я
1
2
3
4
5
400
30
25
21
1
420
31
26
22
2
440
32
28
23
3
470
34
29
25
4
490
36
30
26
5
520
38
32
27
6
550
40
34
29
7
580
42
35
30
8
610
44
37
32
9 46
39
33
10
680
48
41
35
11
710
50
43
36
12
750
53
45
38
13
790
56
47
40
14
1
2
3
4
5
840
59
50
42
15
880
61
52
44
16
930
65
55
46
17
980
68
57
49
18
1040
72
61
51
19
1090
75
63
53
20
1150
79
66
56
21
1210
82
69
59
22
1280
87
73
62
23
1350
91
77
65
24
1420
95
80
68
25
1500
100
85
71
26
1580
105
89
75
27
1670
111
93
79
28
1760
116
98
83
29
1850
122
102
86
30
1960
128
108
91
31
2060
134
113
95
32
2170
141
119
100
33
2290
148
125
105
34
2420
156
131
110
35
2550
163
137
116
36
2690
172
144
122
37
2800
178
150
126
38
2990
189
159
134
39
3150
198
167
140
40
3320
208
175
147
41
3500
219
184
154
42
1
2
3
4
5
3700
230
193
162
43
3900
242
193
162
43
4110
253
213
179
45
4330
266
223
187
46
4570
279
234
197
47
4820
293
246
207
48
13200
741
619
517
67
13920
779
650
543
68
14680
818
682
570
69
15470
858
715
597
70
16320
901
751
627
71
17210
946
789
658
72
18140
993
828
690
73
19130
1043
869
725
74
20170
1095
912
760
75
21270
1150
957
798
76
22430
1208
1005
838
77
23650
1268
1055
879
78
24940
1331
1108
922
79
26300
1398
1163
968
80
27730
1468
1220
1016
81
29240
1541
1281
1066
82
30830
1618
1345
1119
83
32510
1699
1412
1174
84
34290
1785
1482
1233
85
36150
1873
1555
1293
86
38120
1967
1633
1357
87
40200
2066
1714
1424
88
1
2
3
4
5
42390
2169
1799
1495
89
44700
2278
1889
1569
90
47130
2391
1983
1646
91
49700
2511
2081
1728
92
50000
2525
2093
1737
93
(2.1)
, (2.7)
(2.13)
(2.14)
(2.15)
(2.16)
(2.17)
(2.18)
(2.19)
3.3 Описание используемых компонентов и иерархии классов
При разработке программного проекта были использованы
стандартные компоненты из набора классов «Windows Forms». «Windows Forms» -
набор различных управляемых библиотек, отвечающий за графический интерфейс
пользователя.
, (5.1)
строк.
, (5.2)
.
, (5.3)
чел.-дн.
, (5.4)
чел.-дн.
, (5.5)
, (5.6)
(5.9)
(5.10)
рублей.
рублей.
(5.11)
рублей.
рублей.
(5.12)
рублей.