Архив рубрики: Case Study

Case Study is a category of articles where we solving some issues, both real and imaginary. This set of topics would be interested for Test Analysts, Architects and anyone who’d like to sort out complicated things and look on them in various angles.

Как удалить встроенные приложения в Windows 10

Вместе с установкой Windows 10 приходит довольно много разнообразных пользовательских приложений, часть из них постоянно висит в фоне и отнимает ресурсы системы. Возможно, вы захотите удалить часть из этих Windows Store apps, тем более если вы не пользуетесь ими (эй, кто-нибудь знает зачем на корпоративной версии Windows 10 предустановлены приложения Xbox?)

Стандартными средствами Windows (в «Установке и удалении программ») приложения типа Photos, Feedback, Camera нельзя найти, и следовательно удалить их оттуда. Но есть другой способ.

Необходимый disclaimer: всё, что вы делаете со своей системой — на ваш страх и риск. Делайте бэкапы перед экспериментами 🙂

Собственно, процесс удаления состоит из двух шагов:

  1. Запускаем PowerShell с правами администратора
  2. Выполняем команду вида «Get-AppxPackage *photo* | Remove-AppxPackage«, где между звёздочками укажите название Windows App, которое вы хотите удалить. После нажатия Enter приложение будет удалено из системы.

Простыми словами о Big O (Time Complexity)

Есть у программистов понятие «временная сложность» (time complexity or Big O) для сравнительной оценки эффективности алгоритма.

К примеру, для некоторой структуры может быть линейное время доступа (искомый элемент либо встретится сразу, либо он может быть в самом конце, и если структура очень большая (n — это число элементов), а элемент в самом конце, то поиск может быть долгим. Обычно рассматривают время доступа в среднем и худшем случае. Big O — обозначение верхней границы, т.е. худшего случая. Для нашего примера O(n).

Также есть константное время доступа (например, когда мы знаем индекс элемента в структуре и обращаемся к элементу по его индексу), тогда где бы элемент не находился, мы всегда можем получить к нему доступ за O(1).

Так вот, поездка на машине в снежную погоду — это скорее O(n) (неизвестно за сколько доберёшься из-за пробок), а на метро — O(1) (всегда примерно одинаковое время на дорогу).

Эффективность алгоритмов варьируется от O(1) до O(n!), их полный список можно найти на вики (ссылка в конце статьи).

В своё время мне помогли «войти в тему» следующие статьи, их я очень советую прочесть:

  • Знай сложности алгоритмов — Краткая шпаргалка по сложности алгоритмов. Теперь вам будет проще выбрать наиболее эффективный тип данных и алгоритм, подходящий под ваши задачи.
  • Введение в анализ сложности алгоритмов — Лёгкий для чтения и понимания материал. Идеально, чтобы начать разбираться во всех этих алгоритмах и «читать» их сложность. Обязательно прочтите все части.
  • Big O notation — Orders of common functions — не пугайтесь длинного списка, просто запомните что сложность от O(1) до O(n) норм, а всё что больше — уже не норм.

Python: передача значения переменной в контексте экземпляра класса

Пример ниже показывает как в Python реализована передача значений между методами используя контекст экземпляра класса (т.е., когда мы порождаем переменную в выражении «c = A()», обращаясь к ней, мы обращаемся к экземпляру класса).

Как известно, в Python функции могут существовать вне класса, в этом случае в параметрах такой функции может ничего не передаваться. Однако, когда мы определяем функцию внутри класса, первым параметром идёт «self«, т.е. ссылка на контекст экземпляра класса, и такую функцию мы уже будем называть методом. Эта ссылка неявно передаётся в метод интерпретатором каждый раз когда мы вызываем метод, таким образом нам не нужно указывать это значение самостоятельно.

class A:
    list1 = []

    def method_a(self):
        self.list1 = [1, 2, 3]

    def method_b(self):
        print(self.list1)

Теперь запускаем код в интерпретаторе

   # create instance of class A() and name the instance 'c'
c = A()
   # call method_a() for instance 'c', this will set value to list1 on the instance-wide
c.method_a()
   # call mathod_b() for instance 'c', this will get value of list1 from instance
c.method_b()
>>> [1, 2, 3]
   # we can also get the value of 'list1' by calling the attribute of instance 'c'
c.list1
>>> [1, 2, 3]

Это свойство Python, как объектно-ориентированный языка, позволяет передавать значения из одного тестового метода в другой тестовый метод.

Case Study: JUnit4, Selenium WebDriver and Allure

I just recently made an example project which shows the abilities of automated testing using JUnit4, Selenium WebDriver and Allure.

This relatively simple project with code written on Java requires only Maven to run, it works on Internet Explorer, however you may tweek it to work on any Webdriver compatible browser (both desktop and mobile). Allure itself could be tuned to use most using automated testing framework, so not only JUnit is supported. Worth to note, you may import project with your Java IDE and use it as base for your experiments.

The source code, including project configuration pom.xml, as well as setup and usage guide are available on my GitHub space:
https://github.com/niki4/automated-testing-yandex-market-example

Quick start with Jupyter Notebook

Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and explanations. In fact, it’s an interactive IDE, allowing you to share your work with anyone, collaborate and review your Python code.

It’s a web-based tool, though you can run it on your local machine (just as I do). You could check how it works by opening and running through any so called notebook (a page file with .ipynb extension, at the Jupyter Project site https://try.jupyter.org/

Running your local Jupyter instance is pretty simple. After installation, just open command line in directory were you’d like to store/open your .ipynb files and hit command:

jupyter notebook

That’s it! A browser page «http://localhost:8888/tree» will shortly pop up displaying your own Jupyter local instance and you’re ready to rock.

Jupyter is widely used in Machine Learning and Data Science areas as it has not only great UI and store your computations as if you’d have in paper notebook, but also data cleaning and transformation, numerical simulation, statistical modeling, etc.

I use it to run scikit-learn, pandas, numpy and matplotlib libraries, all great for the Data Mining/Analysis and Machine Learning tasks.

Here is also «A gallery of interesting Jupyter Notebooks«, worth to visit and check it out to see loads of the examples where Jupyter Notebook can be useful.

Case Study: Non-functional testing to Android App+HW bundle

The Internet is full of articles which has description of kinds of testing, including a those where non-functional testing. However it become to hard to find a proper one, especially if we’re talking about a industry-specified devices based on common mobile OS. This kind of devices designed to be serving to specified software for the work on field. Yet it boring to read huge amount of plain text. Thank God, we have such a great tool like Mind Maps, a graphical representation of our thoughts.

Look at the mind map below (which I created using free version of XMind, but there’s plenty of alternatives), it represents (I believe) all kinds of non-functional tests that could be conducted over some Sales App+HW (Android phone+Printer+Payment Terminal) bundle. Click on the picture to see it in the full size.

case-study-mobile-app-non-functional-testing-580px