Критерии профессиональности программистов при разработке экспертной системы управления программными проектами
Потребность в экспертной системе, позволяющей отслеживать изменяющиеся навыки разработчиков и осуществлять близкое к оптимальному распределение людских ресурсов при разработке программных проектов. Наиболее значимые навыки при реализации проектов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 30.07.2017 |
Размер файла | 249,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
14
Размещено на http://www.allbest.ru/
Донской Государственный Технический Университет
Критерии профессиональности программистов при разработке экспертной системы управления программными проектами
А.А. Живаева, В.В. Долгов
Аннотация: В течение долгого времени в программной инженерии существует проблема, связанная с довольно большим процентом провалов программных проектов. Одной из наиболее частых причин таких провалов является неоптимальное распределение людских ресурсов, т.е. распределение разработчиков по задачам в соответствии с их навыками и спецификой задачи. Сфера разработки программного обеспечения требует постоянного совершенствования навыков, причем степень овладения одним навыком может положительно влиять на другие, связанные с ним. Из-за большого числа навыков существует потребность в экспертной системе, позволяющей отслеживать изменяющиеся навыки разработчиков и осуществлять близкое к оптимальному распределение людских ресурсов. При этом из-за невозможности однозначного оценивания навыков и частичного их перекрытия друг с другом, обработка информации о сотрудниках более удобна с использованием теории нечетких множеств, нежели при применении классической теории множеств или теории вероятности. В конце статьи приведен список наиболее значимых навыков при реализации ИТ-проектов.
Ключевые слова: экспертные системы, разработка программ, управление проектами, распределение людских ресурсов, навыки, нечеткие множества, неопределенность, теория вероятности.
На протяжении долгого времени проблема разработки программного обеспечения не утрачивает свою актуальность. Научно-исследовательская организация Standish Group International, Inc с 1994 года предоставляет статистику успешности программных проектов по всему миру. В 2015 году из 50 000 проектов 19% полностью провалились, т.е. не завершились вовсе [1] . При этом за предыдущие пять лет процент провалов варьировался от 17% до 22%, что говорит о закономерности данной проблемы в программной инженерии. Также эта организация предоставляет процентное выражение влияния различных факторов на успешность проекта. Согласно данным 45% успеха зависит от руководителей и команды разработчиков. Таким образом, можно сделать вывод, что планирование и управление проектами зачастую осуществляется не должным образом, в связи с чем имеется необходимость в создании системы поддержки принятия решений при управлении процессом разработки программного обеспечения. Существующие разработки в данной области могут с разной степенью помочь в разрешении имеющейся проблемы, но они не позволяют осуществлять близкое к оптимальному распределение разработчиков по задачам проекта в соответствии с их навыками [2] .
Чтобы выполнить данное распределение сотрудников по задачам, менеджер проекта должен опираться на имеющиеся у сотрудников навыки и специфику задачи. Каждая задача требует наличия у разработчика некоторого множества навыков. Для того чтобы выполнить распределение людских ресурсов можно использовать теорию множеств. Тогда пусть U - некоторое множество всех возможных навыков. X является множеством навыков, которые требуются для решения поставленной задачи (X Ѓє U). Y является множеством навыков, имеющихся у отдельного разработчика (Y Ѓє U). Множество Y либо определяется самим сотрудником или менеджером проекта, либо рассчитывается на основе данных о предыдущем опыте. Разработчик, у которого Y ? X = X является наиболее подходящей кандидатурой для данной задачи. В случае если таких разработчиков нет, наиболее подходящим будет являться тот, у которого имеется наибольшее количество требуемых для решения задачи навыков. Данное описание предполагает, что разработчик может обладать или не обладать каким-либо навыком. В связи с этим возможна следующая ситуация: разработчик с более низкой квалификацией в каком-либо навыке может посчитать ее вполне достаточной для обладания данным навыком, а разработчик с более высокой квалификацией может посчитать ее недостаточной для обладания данным навыком. При этом произойдет неоптимальное распределение сотрудников по задачам. Аксиома исключающего третьего, лежащая в основе теории множеств, накладывает некоторые ограничения на ее применение во многих реальных задачах, в которых используются оценки типа: "отлично", "очень хорошо", "хорошо", "удовлетворительно", "плохо", "очень плохо" и т.п. [3] . Данные оценки не могут адекватно формализовываться в классической теории множеств.
Так же возможна интерпретация неопределенных оценок с помощью теории вероятности. Но при использовании данного аппарата неопределенность степени обладания навыком отождествляется со случайностью. То есть набор навыков конкретного разработчика в данном случае определяется вероятностью обладания определенным навыком. А навыки рассматриваются как совокупность статистически однородных случайных объектов.
Однако рассматриваемая неопределенность является неопределенностью другого рода и не связанна со случайностью. Она связана с лингвистической неопределенностью или нечеткостью рассуждений и восприятий того или иного навыка. Для формализации неопределенностей такого рода удобно использовать лингвистические переменные из теории нечетких множеств, которую в 1965 году предложил в своей статье "Fuzzy Sets" профессор Л. Заде из университета Беркли. [4] В соответствие с этой теорией нечеткое множество Y - множество упорядоченных пар {y, мY (y) }, где мY (y) является функцией принадлежности y в Y (мY (y) > [0, 1]) [5] , - можно сопоставить с каким-либо навыком разработчика, а его функцию принадлежности - со степенью владения конкретным разработчиком (y) данного навыка. При этом значение функции принадлежности равное 0 будет означать абсолютное отсутствие навыка у разработчика, а значение 1 - полное и абсолютное знание разработчиком всех тонкостей навыка. С помощью данной теории можно хорошо интерпретировать субъективные оценки "отлично", "очень хорошо", "хорошо", "удовлетворительно", "плохо" и "очень плохо" выставляемые разработчику экспертами или руководителями проектов. Связки ("и", "или", "не", "очень", "более" и т.д.) в этом случае трактуются как видоизменяющие операторы, что позволяет при разработке экспертной системы переводить запросы, составленные с учетом лингвистических переменных, в SQL-операторы реляционных баз данных, что упростит создание такой системы в целом. [6]
Еще одним важным вопросом является вид функции принадлежности - функции владения разработчиком тем или иным навыком. Вид этой функции напрямую зависит от особенностей рассматриваемой области и важности различения между собой значений лингвистических переменных. В рассматриваемой нами области оценивания навыков разработчиков крайне важно отличить разработчика, владеющего навыком "плохо" от разработчика, владеющего навыком "отлично". В то время как различие между "очень плохо" и "плохо", а также между "отлично" и "безупречно" может быть не таким важным. Кроме того, в крайних областях значений (области "очень плохо" и "очень хорошо") разница между разработчиками может быть спорной или неочевидной. Приемлемой функцией оценивания при таких условиях можно считать сигмоид с общей формулой , где "б" - коэффициент крутизны функции принадлежности (рис. 1).
Рис. 1. - Функция ценности программиста от уровня владения навыком
экспертная система программный проект
Для того чтобы выполнять распределение людских ресурсов необходимо сформировать базу навыков, необходимых для выполнения различных задач. Множество всех возможных навыков представлено в таблицах 1-4 [7-12] .
Таблица № 1. Навыки программирования в срезе языков программирования
Язык |
Навыки |
Язык |
Навыки |
Язык |
Навыки |
|
C |
ACL |
C++ |
ACE |
Java |
Apach Common Collections |
|
IUP |
ACDK |
Google Guava |
||||
GSL |
Boost |
Jsoup |
||||
SIGIL |
STL |
JDOM |
||||
Imdb |
Dlib |
Gson |
||||
ATTR |
Loki |
JasperReports |
||||
CuTest |
Reason |
Hibarnate |
||||
cUnit |
C++ REST SDK |
Commons Math |
||||
Check |
cppunit |
Spring |
||||
Cmocka |
Google Test |
Akka |
||||
JavaScript |
jQuery |
jest |
Arquillian |
|||
jQuery UI |
doctest |
Jtest |
||||
AngularJS |
C# |
Windows Forms |
Junit |
|||
Angular2 |
WPF |
Mockito |
||||
React |
LINQ |
Powermock |
||||
AJAX |
PLINQ |
The Grinder |
||||
TypeScript |
LINQ to SQL |
perf4j |
||||
Node. js |
ASP.net MVC |
jetm |
||||
ECMAScript5 |
WFC |
JavaMelody |
||||
ECMAScript6 |
.net Core |
Python |
Django |
|||
Bootstrap |
Moq |
Requests |
||||
Underscore. js |
FsCheck |
wxPython |
||||
Echo |
xUnit |
NumPy |
||||
Vue. js |
Nunit |
PuQT |
||||
Jasmine |
Bogus |
Python-patterns |
||||
Mocha |
Scala |
Spark |
Python-oauth2 |
|||
Qunit |
Hadoop |
Pylint |
||||
Tape |
Akka |
multiprocessing |
||||
Unit. js |
PostgreSQL async |
Orange |
||||
Swift |
OhMyAuth |
MySQL async |
Babel |
|||
SwiftCop |
ReactiveMongo |
PuSpark |
||||
SwiftLine |
Scala-redis |
pytest |
||||
Safe |
ScalikeJDBC |
PyAutoGUI |
||||
Sync |
Slick |
mock |
||||
SwiftData |
Finatra |
church |
||||
SwiftStructures |
Play |
Objective-C |
Gtrack |
|||
Algorithm |
Scalatra |
ocstyle |
||||
SwiftTask |
Spray |
ObjectiveRecords |
||||
Swiftx |
SecureSocial |
FMDB |
||||
Swift-AI |
json4s |
RestKit |
||||
SwiftMath |
Pickling |
FxForms |
||||
RxSwift |
PredictionIO |
BFKit |
||||
SwiftCheck |
Kafka |
CocoaPods |
||||
Quick |
Scala. Rx |
Specta |
||||
Fakery |
Scalaz |
Quick |
||||
Perl |
Catalyst |
Scaloid |
SQL |
T-SQL |
||
Mojolicious |
ScalaCheck |
SQL PL |
||||
Dancer |
Specs2 |
SQL/PSM |
||||
PSGI/Plack |
ScalaTest |
PL/SQL |
||||
PerlUnit |
F# |
Akka.net |
PL/pgSQL |
|||
Test:: Unit |
Math.net |
R |
Shiny |
|||
SCTE |
FsharpLu |
Runit |
||||
Test:: Harness |
canopy |
RGG |
||||
PHP |
Symfony |
FsCheck |
MilanoR |
|||
Yii 2 |
FsUnit |
dplyr |
||||
Phalcon |
xUnit.net |
broom |
||||
CakePHP |
Freya |
SparkR |
||||
PHPSpec |
ASP.net Core MVC |
Rcpp |
||||
PHPUtil |
Nancy |
Runit |
||||
HTTP Mock |
WevSharper |
svUnit |
||||
Faker |
DSGeek |
|||||
rddr |
Таблица № 2. Навыки администрирования информационных систем
Область |
Навыки |
Область |
||
Администрирование баз данных |
Управление БД |
Администрирование веб-сервера |
Знание Unix-систем |
|
Управление пропускной способностью БД |
Конфигурация веб-серверов |
|||
Создание БД |
Конфигурация почтовых серверов |
|||
Мониторинг БД и настройка производительности |
Знание ОС семейства Windows Server |
|||
Управление экземплярами БД |
Понимание модели OSI |
|||
Понимание стека протокола TCP/IP |
||||
Администрирование сети |
Знания в области сетевых протоколов |
Администрирование безопасности сети |
Протоколы шифрования и аутентификации |
|
Знания в области маршрутизации |
Антивирусные системы |
|||
Знания в области реализации VPN |
Планирование PKI |
|||
Знания в системах биллинга |
Системы контроля доступа |
|||
Построение сетей |
Инцидентный анализ |
|||
Резервное копирование |
||||
Администрирование почтовых серверов |
Знание Unix-систем |
Администрирование систем интеграции и развертывания |
Знание принципов непрерывной интеграций |
|
Знание ОС семейства Windows Server |
Знание инструментов для интеграции |
|||
Знание программ почтовых серверов |
Знание систем контроля версий |
|||
Модули проверки на вирусы и спам |
Знание инструментов для развертывания |
|||
Модули интеграции с базами данных |
||||
Знание программ клиентов электронной почты |
||||
Понимание стека протокола TCP/IP |
||||
Знания в области сетевых протоколов |
Таблица № 3. Навыки работы с инструментами
Группа |
Инструменты |
Группа |
Инструменты |
|
IDE |
Microsoft Visual Studio |
Текстовые редакторы |
Microsoft Visual Studio Code |
|
Eclipce |
Sublime Text |
|||
IntelliJ IDEA |
Notepad++ |
|||
PhpStorm |
Coda 2 |
|||
Xcode |
Atom |
|||
PyCharm |
Brackets |
|||
Dev-C++ |
Light Table |
|||
WebStorm |
Vim |
|||
Komodo IDE |
Dart Editor |
|||
RubyMine |
Системы контроля версий |
git |
||
C++Builder |
SVN |
|||
AndroidStudio |
Mercurial |
|||
CodeLite |
CVS |
|||
Code:: Blocks |
Team Foundation Server |
|||
NetBeans |
Bazaar |
|||
AptanaStudio |
Профилирование |
YourKit |
||
ShiftEdit |
Jprofiler |
|||
Cloud 9 IDE |
xDebug |
|||
MonoDevelop |
XHProf |
|||
SharpDevelop |
Gperf |
|||
DrJava |
hotspot |
|||
Xamarin Studio |
Python profile |
|||
Интеграция и развертывание |
Travis CI |
dowser |
||
CircleCI |
YUI profiler |
|||
Railsonfile |
||||
Wercker |
||||
Hostedci |
||||
Jenkins |
Таблица № 4. Обобщенные и социальные навыки
Область |
Навыки |
Область |
Навыки |
|
Структуры данных |
Обычные |
Алгоритмы |
Компьютерная графика |
|
Параллельные |
Цифровая обработка сигналов |
|||
Императивные |
Информационная безопасность |
|||
Функциональные |
Анализ данных и машинное обучение |
|||
Прикладной опыт |
Сфера |
Искусственный интеллект |
||
Пользовательский интерфейс веб-систем (front-end) |
Компьютерные сети |
|||
Серверный код веб-систем (back-end) |
Моделирование |
|||
Разработка игр |
Высокопроизводительные вычисления |
|||
Разработка под мобильные платформы |
Компьютерная математика |
|||
Разработка для ПК |
Распределенные информационные системы |
|||
Высокопроизводительные вычисления |
Опыт работы с платформами |
Microsoft.net Framework |
||
Администрирование баз данных |
Android |
|||
Администрирование веб-сервера |
iOS |
|||
Администрирование сети |
Windows Phone |
|||
Администрирование безопасности сети |
Blackberry |
|||
Администрирование почтовых серверов |
Java (JDK and JRE) |
|||
Управление проектами |
MAC |
|||
Тестирование |
Unix |
|||
Тестирование |
Компонентное тестирование |
Silverlite |
||
Модульное тестирование |
Flash AIR |
|||
Интеграционное тестирование |
Mono |
|||
Системное тестирование |
LiveCode |
|||
Приемочное тестирование |
Qt |
|||
Тестирование безопасности |
Open Web Platform |
|||
Тестирование взаимодействия |
Личные и социальные навыки |
Умение работать в группе |
||
Функциональное тестирование |
Инновационный/творческий ум |
|||
Нагрузочное тестирование |
Открытость и адаптивность к изменениям |
|||
Тестирование стабильности и надежности |
Критическое мышление |
|||
Объемное тестирование |
Анализ и решение проблем |
|||
Тестирование установки |
Планирование и контроль |
|||
Тестирование удобства пользования |
Умение слушать |
|||
Тестирование на отказ и восстановление |
Умение работать под давлением |
|||
Конфигурационное тестирование |
Надежность |
|||
Навык писателя |
||||
Управление проектами |
Управление конфликтами |
Гибкость и адаптивность |
||
Организация совещаний |
Способность эффективно задавать вопросы |
|||
Управление временем |
Управление временем |
|||
Построение команды |
Умение работать под давлением |
|||
Управление ожиданиями |
Надежность |
|||
Гибкость и адаптивность |
||||
Анализ и решение проблем |
Данные таблицы навыков не является окончательными. Система предполагает возможность ее расширения в соответствие со спецификой решаемых задач. Представление информации об обладании каким-либо навыком в виде функции принадлежности наилучшим образом отражает нечеткость данной характеристики. Поэтому использование теории нечетких множеств наиболее удобно при распределении людских ресурсов по задачам, исходя из имеющихся у разработчиков навыков и специфики задач.
Работа выполнена при поддержке РФФИ проект № 16-01-00390.
Литература
1. Hastie S., Wojewoda S. Standish Group 2015 Chaos Report - Q&A with Jennifer Lynch. Info, 2015. URL: infoq.com/articles/standish-chaos-2015.
2. Zhivaeva A.A. et al. Decision support systems for planning the software development process // Modern informatization problems in economics and safety / ed. Kravets O. J. et al. Yelm, WA, USA: Scince Boor Publishing House, 2017. pp.101-105.
3. А.П. Ротштейн. Интеллектуальные технологии идентификации // Проектирование систем управления\Fuzzy Logic Toolbox. URL: matlab. exponenta.ru/fuzzylogic/book5/1_1. php.
4. Кофман А. Введение в теорию нечетких множеств / ред.С.И. Травкин. М.: Радио и связь, 1982.432 c.
5. Гинис Л.А. Развитие инструментария когнитивного моделирования для исследования сложных систем // Инженерный вестник Дона. 2013. № 3. URL: ivdon.ru/ru/magazine/archive/n3y2013/1806.
6. Венцов Н.Н., Долгов В.В., Подколзина Л.А. Об одном способе построения запросов к базе данных на основе аппарата нечеткой логики // Инженерный вестник Дона. 2015. № 3. URL: ivdon.ru/ru/magazine/archive/n3y2015/3172.
7. Wen F., Lin C. - M. Multistage Human Resource Allocation for Software Development by Multiobjective Genetic Algorithm // Open Appl. Math. J. 2008. № 2. pp.95.
8. Alison Doyle. Top Skills to List on LinkedIn. Most Popular Skills Employers Seek on LinkedIn. 2017. URL: thebalance.com/top-skills-to-list-on-linkedin-2062321.
9. Mtsweni E.S., Hцrne T., Poll J.A. Van Der. Soft Skills for Software Project Team Members // Int. J.comput. Theory Eng. 2016. Vol.8, № 2. pp.150-155.
10. Ahmed F. et al. What Soft Skills Software Architect Should Have? A Reflection from Software Industry // Int. Conf.comput.commun. Manag. 2011. Vol.5. pp.565-569.
11. Silva L.C. e, Costa A. P. C. S. Decision model for allocating human resources in information system projects // Int. J. Proj. Manag. 2013. Vol.31, № 1. pp.100-108.
12. Avinash A., Ramani K. A Hybrid Technique for Software Project Scheduling and Human Resource Allocation // Int. J. Eng. Dev. Res. 2014. Vol.2, № 3. pp.3243-3251.
Размещено на Allbest.ru
...Подобные документы
Назначение экспертной системы. Разработка экспертной системы путем самостоятельного программирования в полном объеме простейшей ЭС в "GURU". Листинг экспертной системы по прогнозированию на бирже уровня цен, если валютный курс доллара падает или растет.
лабораторная работа [17,8 K], добавлен 15.01.2011История развития, применение искусственных нейронных сетей. Распознавание образов в сети. Сжатие данных и ассоциативная память. Проектирование экспертной системы, позволяющей диагностировать заболевания органов пищеварения. Программная реализация системы.
курсовая работа [744,0 K], добавлен 05.02.2016Проблемы современных проектов разработки ПО. Причины неудач программных проектов. Ошибки требований и стоимость переделок. Основная фундаментальная идея программной инженерии. Типы нефункциональных и эксплуатационных требований к программному обеспечению.
презентация [3,2 M], добавлен 19.09.2016Структура типичной экспертной системы. База данных (рабочая память), её назначение. Функция getsport как экземпляр класса cSport. Алгоритм работы экспертной системы. Реализация пользовательского интерфейса. Результаты тестирования системы пользователем.
курсовая работа [1018,8 K], добавлен 13.06.2012Аналитический обзор системы управления курсами Moodle, программное построение ее модулей. Разработка структурной схемы и базы знаний экспертной системы. Создание дерева вопросов и выбор алгоритма поиска решений. Анализ возможных угроз и защита информации.
дипломная работа [534,7 K], добавлен 14.12.2013История появления первой экспертной системы DENDRAL. Проектирование и разработка программной экспертной системы, предназначенной для анализа финансового состояния предприятия. Основные предикаты и секции приложения: domains, predicates, clauses, goal.
курсовая работа [1,5 M], добавлен 21.05.2016Особенности и классификация обучающих программных средств обучения. Обзор методов обработки экспертной информации. Требования к программному комплексу лабораторных работ. Построение логической модели данных. Описание компьютерной реализации для студента.
дипломная работа [2,0 M], добавлен 19.01.2017Внедрение системы управления проектами Microsoft Project 2003 в Московский институт экономики, менеджмента и права для автоматизации учета выполнения дипломных проектов. Сравнительная характеристика систем управления проектами в России и за рубежом.
дипломная работа [1,4 M], добавлен 25.10.2013Реализация системы экспертной оценки эффективности программного продукта. Анализ информационной системы как объекта проектирования. Описание потоков данных, обрабатываемых и генерируемых системой. Программная архитектура и основные требования к системе.
курсовая работа [1,5 M], добавлен 10.12.2016Фреймовые модели представления знаний. Разработка структуры фреймов для реализации экспертной системы. Разработка экспертной системы с фреймовой моделью представления знаний. Редактирование базы фактов кандидатов и описание режима консультации.
курсовая работа [1,3 M], добавлен 13.10.2012Сущность и назначение экспертной системы, ее основные элементы и предъявляемые требования, обоснование важности и области применения. Методика получения объяснений в результате действия экспертной системы, их виды. Построение модели гибкого интерфейса.
курсовая работа [202,4 K], добавлен 10.11.2009Виды и основные функции интеллектуальных систем. Выбор инструментального средства для создания экспертной системы. Физическое проектирование базы данных. Использование среды EsWin 2.1 для разработки и тестирования экспертной системы выбора должности.
курсовая работа [615,8 K], добавлен 22.03.2016Проектирование корпоративных информационных систем. Автоматизация процесса выполнения лабораторных работ по дисциплине "Управление программными проектами". Построение модели ИС учебного процесса: архитектура, формализация пользовательских требований.
дипломная работа [1,1 M], добавлен 20.08.2017Разработка программного комплекса, нацеленного на предоставление информации о комплектации персонального компьютера. Входные и выходные данные системы. Описание предметной области. Краткая информация о языке Clips. Проектирование экспертной системы.
курсовая работа [36,0 K], добавлен 23.06.2011Описание экспертной системы по подбору кадров. Требования к функциональным характеристикам программы. Состав и параметры технических средств ЭВМ. Структура входных данных. Руководство программиста и пользователя. Тестирование программного средства.
курсовая работа [897,0 K], добавлен 13.11.2016Создание интеллектуальной экспертной системы по подбору комплектующих для стационарного компьютера. Медицина как пример экспертной системы с использованием метода Криса-Нейлора. Извлечение знаний, их структурирование, представление, стратегия вывода.
контрольная работа [827,5 K], добавлен 14.12.2012Структура экспертной системы: база знаний, механизм вывода, система пользовательского интерфейса. Анализ требований, проектирование системы "Подбор сотовых телефонов". Спецификация области, кодирование. Листинг программы, результаты тестирования.
курсовая работа [24,5 K], добавлен 12.05.2013Технология экспертных систем на основе искусственного интеллекта: разработка и внедрение компьютерных программ, способных имитировать, воспроизводить области деятельности человека, требующих мышления, определенного мастерства и накопленного опыта.
курсовая работа [264,8 K], добавлен 22.12.2008Понятие программной инженерии как применения определенного систематического измеримого подхода при разработке, эксплуатации и поддержке программного обеспечения. Модели процесса разработки программного обеспечения. Управление программными проектами.
презентация [870,6 K], добавлен 12.11.2014Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.
контрольная работа [60,1 K], добавлен 17.01.2011