
- •ОБЗОР
- •Причины появления уязвимостей в сетях связи
- •Виды мошенничества в сетях связи
- •Обзор FMS решений
- •RAID FMS
- •FraudTrace
- •SENTRY Fraud Management
- •Обзор методов кластеризации
- •ПОСТАНОВКА ЗАДАЧИ
- •Модуль СПАЙДЕР-FMS
- •Назначение разрабатываемого ПО
- •Описание входных данных
- •Описание выходных данных
- •АНАЛИЗ ЗАДАЧИ
- •Анализ входных данных
- •Кластеризация данных методом k-средних
- •РАЗРАБОТКА ПО
- •Разработка модульной структуры
- •Разработка кода
- •Выбор языка программирования
- •Модуль CDR Filter
- •Модуль RS Parser
- •Модуль Number Mask Builder
- •Модуль RS Tree
- •Модуль RS Utils
- •Модуль Call Counts Maker
- •Модуль Labeled Call Counts Maker
- •Модуль Main
- •ТЕСТИРОВАНИЕ
- •Модульное тестирование
- •Модуль Number Mask Builder
- •Интеграционное тестирование

Рис. 4.2 – Диаграмма компонентов ПО
4.2 Разработка кода
4.2.1Выбор языка программирования
Python – интерпретируемый высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.
Python обладает динамической типизацией, автоматическим управлением памятью, динамическим разрешением имен, а также поддержкой различных парадигм программирования. К преимуществам языка также нужно отнести большое международное сообщество разработчиков и множество сторонних библиотек, позволяющих использовать Python при разработке ПО в разных отраслях.
Использование языка Python для разработки ПО позволит сократить время написания и отладки необходимых модулей.
35
4.2.2 Модуль CDR Filter
Модуль предоставляет функцию filter. Прототип функции:
f i l t e r ( i d i r , r _ f i e l d s , f i l t e r s , o d i r )
|
В качестве параметров функция принимает путь к папке (директории) с |
|
.csv файлами (idir), выводимые поля (r_fields), накладываемые фильтры (filters), |
|
путь к папке с выходными данными (odir). Параметр filters является словарем, |
|
в котором могут быть как лямбда-выражения, так и функции для фильтрации |
|
полей. Пример использования функции: |
1 |
from c d r _ f i l t e r import f i l t e r |
2 |
|
3def f i l t e r _ f u n c t i o n ( x ) :
4 |
return x == ’ abc ’ |
|
5 |
|
|
6 |
f i l t e r s |
= { |
7 |
0 : |
lambda x : i n t ( x ) == 0 , |
81 : f i l t e r _ f u n c t i o n
9 |
} |
10 |
|
11f i l t e r (
12i d i r = ’ . / f i l t e r _ i n p u t ’ ,
13r _ f i e l d s = [ 1 ] ,
14 |
f i l t e r s = f i l t e r s , |
15o d i r = ’ . / f i l t e r _ o u t p u t ’
16)
Для чтения и записи файлов формата csv используются функции стандартной библиотеки csv.reader, csv.writer соответственно. Выходными данными функции являются файлы, содержащие данные из строк, отфильтрованных с помощью параметра filters. В выходные файлы записываются значения полей, индексы которых указаны в параметре r_fields, поля разделены запятыми, названия выходных файлов соответствуют названиям входных файлов. Выходные файлы создаются в папке, путь к которой указан в параметре odir.
36
4.2.3Модуль RS Parser
Модуль предоставляет функцию parse_file. Определение функции:
1def p a r s e _ f i l e ( f i l e ) :
2i f f i l e . c l o s e d :
3 |
return |
None |
|
4 |
|
|
|
5 |
r e s u l t |
= [ ] |
|
6 |
f i l e . next ( ) |
|
|
7 |
|
|
|
8 |
f o r l i n e i n f i l e : |
||
9 |
temp = |
r s _ p a r s e r . __make_record ( l i n e ) |
|
10 |
i f |
temp |
i s not None : |
11 |
|
r e s u l t . append ( temp ) |
|
12 |
|
|
|
13 |
return r e s u l t |
В качестве параметров функция принимает объект типа file, в кодиров-
ке Windows 1251.
Результатом работы функции является массив объектов типа rs_record.
Поля класса rs_record представлены в таблице 4.1.
|
Таблица 4.1 – Поля класса rs_record |
|
|
Название |
Описание |
|
|
prefix |
ABC/DEF код |
|
|
number_range |
Значения начала и конца семизначного диапазона |
|
|
capacity |
Емкость диапазона |
|
|
provider |
Название оператора |
|
|
region_name |
Название региона |
|
|
region_key |
Код региона в соответствии с конституцией РФ |
|
|
Объекты типа rs_record формируются в функции __make_record. Про-
тотип функции:
__make_record ( l i n e , debug = F a l s e )
37
|
В качестве параметров функция принимает строку (line), а также флаг |
|
для вывода отладочной информации (debug). Поля в исходном файле разделе- |
|
ны ‘;’, а их количество равно шести. Перед формированием выходного зна- |
|
чения функции производится проверка количества полей в строке, после чего |
|
происходит присвоение временным переменным значений полей, при этом |
|
переменная number_range содержит 2 значения, соответствующие началу и |
|
концу семизначного диапазона. |
1 |
s p l i t _ l i n e = l i n e . s t r i p ( ’ \ t ’ ) . s p l i t ( ’ ; ’ ) |
2 |
|
3i f s p l i t _ l i n e :
4 |
i f l e n ( s p l i t _ l i n e ) < 6 : |
5return None
6i f debug :
7 |
p r i n t s p l i t _ l i n e |
|
|
||
8 |
|
|
|
|
|
9 |
p r e f i x = s p l i t _ l i n e [ 0 ] [ : 3 ] |
||||
10 |
number_range = ( s p l i t _ l i n e [ 1 ] [ 1 : 8 ] , s p l i t _ l i n e [ 2 ] [ 1 : 8 ] ) |
||||
11 |
c a p a c i t y = s p l i t _ l i n e [ 3 ] [ 1 : − 1 ] |
||||
12 |
p r o v i d e r = s p l i t _ l i n e [ 4 ] [ 1 : − 1 ] . encode ( ’ u t f −8 ’ ) |
||||
13 |
region_name = s p l i t _ l i n e [ 5 ] [ 1 : − 1 ] . encode ( ’ u t f −8 ’ ) |
||||
|
Для определения кода региона был составлен словарь, в котором в каче- |
||||
|
стве ключей использовуются ключевые слова в определении региона (напри- |
||||
|
мер, Крым, Хакасия, Башкортостан), а значениями являются коды регионов |
||||
|
согласно конституции РФ. При поиске кода региона учитываются субъекты |
||||
|
РФ со схожими названиями, например, Алтай и Алтайский край. |
||||
14 |
r e g i o n _ k e y = 0 |
|
|
||
15 |
t e m p _ r e g i o n =None |
|
|
||
16 |
f o r key |
i n |
s o r t e d ( REGION_DICT . keys ( ) , r e v e r s e = True ) : |
||
17 |
|
|
|
|
|
18 |
temp |
= |
key . r e p l a c e ( ’ |
’ , ’ ’ ) . l o w e r ( ) |
|
19 |
i f temp |
i n region_name . r e p l a c e ( ’ ’ , ’ ’ ) . l o w e r ( ) : |
|||
20 |
|
i f not t e m p _ r e g i o n : |
|||
21 |
|
|
t e m p _ r e g i o n |
= |
temp |
22 |
|
|
r e g i o n _ k e y |
= |
s t r ( REGION_DICT . g e t ( key ) ) |
23 |
|
e l i f l e n ( temp ) |
> |
l e n ( t e m p _ r e g i o n ) : |
38