Что нового

Стандарты кодирования для AutoIt Good Code

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
default_blog_header.jpg

[box title=Авторство]Данная статья это перевод (частично машинный и частично мой) статьи на apriorit.com[/box]

Стандарты кодирования для AutoIt Good Code
Разработчики в вашей компании, безусловно, придерживаются единого стандарта кодирования, который был разработан самостоятельно с учетом области специализации или использования одного из готовых решений, поскольку их существует несколько для популярных языков программирования.

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

Но в настоящее время язык пользуется большой популярностью для своего класса задач и увеличивает возможности, которые он предоставляет. Именно поэтому мы предлагаем читателям стандарт, который мы разработали в нашей компании. Вы можете использовать его полностью или адаптировать к вашим требованиям.

Статья предназначена для специалистов по автоматизации тестирования, их менеджеров, а также для тех, в задачи которых входит написание скриптов (макросов) для автоматизации задач в среде Microsoft Windows с использованием языка AutoIt.

Содержание
Преимущества использования единого стандарта
Стандарт написания скриптов
- Имена переменных, констант и функций
- Объявление переменных и функций
- Отступы
- Пробелы
- Комментарии
Статический анализ как средство улучшения кода
Пример
Заключение



Преимущества использования единого стандарта
Стандарт кодирования (стандарт проектирования кода) - это набор правил и соглашений, которые используются при написании исходного кода на определенном языке программирования.

Правила визуального оформления элементов программы, которые используются для повышения информативности кода для человека, составляют основу любого стандарта.

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

Общеизвестно, что использование единого стандарта разработки кода гарантирует некоторые преимущества:

  • Лучшая читаемость кода (как следствие, сокращение временных ресурсов, необходимых для его понимания)
  • Упрощение поддержки кода, процесс внесения в него изменений
  • Упрощение интеграции тестов
  • Простота повторного использования кода
  • Уменьшение коммуникаций

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



Стандарт написания скриптов
Стандарты для Visual Basic (поскольку AutoIt является языком семейства BASIC), требования к пользовательским функциям языка AutoIt и соглашения, которые определяют высококачественный код независимо от языка программирования, были взяты за основу при разработке текущего стандарта.

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

Хорошо
Код:
$ReceivedError


Плохо:
Код:
$received_error


  • Ссылка на тип данных
После знака доллара («$»), с которого начинается объявление переменной, должен быть символ или набор символов, определяющий тип данных, которые он будет содержать.

Вы можете использовать следующий список префиксов:

$a<Буква>Массив. Буква указывает на тип данных, хранящихся в массиве
$bДвоичные данные
$hУказатель / Дескриптор (файла, окна и т.п.)
$iЦелое число
$fЛогический оператор (Boolean)
$nЧисло с плавающей точкой
$sСтрока
$vВариант. Неизвестный заранее или переменный тип данных

  • Значимые имена
В следующей части имени используйте слова, указывающие, для чего предназначена переменная (функция).

Хорошо:
Код:
$asEmployeesNames


Плохо:
Код:
$IQwerty




Объявление переменных и функций
  • Переменные
Здесь возможны два подхода: объявление всех переменных в начале скрипта или непосредственно перед их использованием. На мой взгляд, первый вариант более удобен. Но это ваше право выбрать один :smile:.

  • Функции
Если мы можем выделить повторяющуюся часть кода для функции в теле автотеста, эта функция находится:

  • в начале скрипта после основного комментария, если функция значительна и часто вызывается (например, функция перезапуска системы, если перезапуск выполняется несколько раз в процессе пробного запуска).
  • в конце скрипта, если функция выполняет незначительные действия (например, работа с GUI).

Отступы
Стандартный редактор AutoIt кода SciTE Script Editor использует 4 пробела для табуляции. Поэтому за основу мы возьмем 4 пробела.

Используйте табуляцию из четырех символов при написании любого выражения при принятии решения:
  • Условное выражение (If ... Then ... Else ; Select ... Case ; Switch ... Case)
  • Циклическое выражение (For ... Next ; Пока ... WEnd; Do ... Пока ; Для ... In ... Next)

Хорошо:
Код:
If $fTemperature > 38.5 Then
    MsgBox (4096, "", "You need a doctor.")
ElseIf $fTemperature > 37.5   Then
    MsgBox(4096, "", "You catch a cold.")
Else
    MsgBox(4096, "",  "Everything is Ok.")
EndIf


Плохо:
Код:
Switch @HOUR
Case 6 To 11
$sGreatMsg = "Good Morning"
Case 12 To 17
$sGreatMsg = "Good Afternoon"
Case 18 To 21
$sGreatMsg = "Good Evening"
Case Else
$sGreatMsg = "What are you still doing up?"
EndSwitch


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

В SciTE Script Editor перейдите в Options -> Indentation Settings или нажмите Ctrl + Shift + I

Пробелы
Использование пробелов значительно улучшает читабельность кода.

Обведите каждое выражение одним пробелом, а также добавьте пробел после запятой.

Хорошо:
Код:
$nSalary = 20 + 20


Плохо:
Код:
$nSalary=20+20


Комментарии
Мы можем выделить комментарии двух типов: уровень сценария и линейные комментарии.

  • Комментарии на уровне скрипта
Каждый отдельный сценарий должен начинаться с блочного комментария (#comments-start … #comments-end), который может содержать следующую информацию: автор скрипта, что выполняет скрипт, каковы параметры ввода и вывода, история изменений (по желанию), а также ссылка на документы (например, спецификация требований в случае, если в скрипте реализован автоматический тест для проверки определенного требования. В результате улучшается прослеживаемость и упрощается внесение изменений).

Хорошо:
Код:
#comments-start
 Author  
Tom Brown
-----
What the test should do
It should install Google Chrome on the machine
-----
Parameters
Input: Path to installation package
#comments-end


Плохо:
Код:
#comments-start
#comments-end


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

Линейный комментарий может находиться выше, ниже и в одной строке с закомментированной конструкцией. На мой взгляд, удобнее разместить комментарий над выражением.

Хорошо:
Код:
;Print all numbers from 1 to 10 except number 7
For $i = 1 To 10
    If $i = 7 Then ContinueLoop
        MsgBox(0, "The value of $i is:", $i)
Next


Плохо:
Код:
For $i = 1 To 10
    If $i = 7 Then ContinueLoop
        MsgBox(0, "The value of $i is:", $i)
Next




Статический анализ и обзор кода как инструменты улучшения кода
Соответствие кода определенному стандарту можно проверить с помощью двух методов статического анализа: с помощью технического обзора или использования специальных утилит (статических анализаторов), надстройки которых помогают добавлять стандартные правила и проверять соответствие им. (для получения дополнительной информации о методах статического тестирования см. [Graham, Van Veenendaal, Evans, Black “Foundations of Software testing”]).

К сожалению, статические анализаторы языка AutoIt не были найдены в процессе работы и написания этой статьи. Вот почему единственное возможное решение на данный момент - это внедрение практики проверки кода.

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

В процессе проверки ответственный специалист использует внутренний стандарт кодирования и контрольный список, созданный на его основе. Все найденные недостатки исправлены и отправлены автору для исправления.

В результате анализа кода:
  • Качество кода повышается за счет обнаружения и исправления отклонения от стандарта (что делает код более читабельным, простым для понимания и поддержки)
  • Навыки автора кода улучшаются



Пример
Кусок кода, разработанный без использования каких-либо стандартов:
Код:
#include <FTPEx.au3>
$server = '192.168.0.202'
$port = '300'
$username = ''
$pass = ''
$Open = _FTP_Open('FTP')
$Conn = _FTP_Connect($Open, $server, $username, $pass, '1',$port)
$Remote = '/Storage/Utilites/GoogleChrome7/'
_FTP_DirSetCurrent($Conn, $Remote);
$a= _FTP_ProgressDownload($Conn, @DesktopDir & '\ChromeSetup.exe', 'ChromeSetup.exe')
MsgBox(4096,"Warning!","Close opened Firefox and IE browser windows to continue installation or they will be closed automatically in 5 sec. If Google Chrome is installed - it will be reinstalled",5)
If @OSVersion = "Win_7" Then
DirRemove(@UserProfileDir & '\AppData\Local\Google',1)
EndIf
If @OSVersion = "Win_XP" Then
DirRemove(@UserProfileDir & '\AppData\Local\Google',1)
EndIf
if ProcessExists("firefox.exe") Then
ProcessClose("firefox.exe")
EndIf
if ProcessExists("iexplore.exe") Then
ProcessClose("iexplore.exe")
EndIf
if ProcessExists("chrome.exe") Then
ProcessClose("chrome.exe")
EndIf
Run(@DesktopDir & '\ChromeSetup.exe')
WinWaitActive("Google Chrome installer")
WinWaitClose("Google Chrome installer")
WinWaitActive("Welcome to Google Chrome")
ControlClick("Welcome to Google Chrome", "Choose","[Class:Button; INSTANCE:4]")
WinWaitActive("Google - Google Chrome")
WinClose("Google - Google Chrome")
FileDelete(@DesktopDir & '\ChromeSetup.exe')
_FTP_Close($Open)


Кусок кода, разработанный с использованием стандарта, описанного в текущей статье:
Код:
#comments-start
Author  
Tom Brown
-----
What the test should do
Test automates Google Chrome installation on local machine
-----
Creation Date
2011-03-26
#comments-end
#include <FTPEx.au3>
$sServer = '192.168.0.202'
$sPort = '300'
$sUsername = ''
$sPass = ''
; Get Chrome installation package from a common location
$vOpen = _FTP_Open('FTP')
$vConn = _FTP_Connect($Open, $server, $username, $pass, '1',$port)
$vInstallationLocation = '/Storage/Utilites/GoogleChrome7/'
_FTP_DirSetCurrent($Conn, $Remote);
$vStatus= _FTP_ProgressDownload($Conn, @DesktopDir & '\ChromeSetup.exe', 'ChromeSetup.exe')
MsgBox(4096,"Warning!","Close opened Firefox and IE browser windows to continue installation or they will be closed automatically in 5 sec. If Google Chrome is installed - it will be reinstalled",5)
; Delete previously installed Google Chrome temp file
If @OSVersion = "Win_7" Then
    DirRemove(@UserProfileDir & '\AppData\Local\Google',1)
EndIf
If @OSVersion = "Win_XP" Then
    DirRemove(@UserProfileDir & '\AppData\Local\Google',1)
EndIf
if ProcessExists("firefox.exe") Then
    ProcessClose("firefox.exe")
EndIf
if ProcessExists("iexplore.exe") Then
    ProcessClose("iexplore.exe")
EndIf
if ProcessExists("chrome.exe") Then
    ProcessClose("chrome.exe")
EndIf
Run(@DesktopDir & '\ChromeSetup.exe')
WinWaitActive("Google Chrome installer")
WinWaitClose("Google Chrome installer")
WinWaitActive("Welcome to Google Chrome")
ControlClick("Welcome to Google Chrome", "Choose","[Class:Button; INSTANCE:4]")
WinWaitActive("Google - Google Chrome")
WinClose("Google - Google Chrome")
FileDelete(@DesktopDir & '\ChromeSetup.exe')
_FTP_Close($Open)




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