• Метрики на службе у QA

      Апрельская статья из цикла «Календарь тестировщика» посвящена метрикам. Кирилл Раткин, тестировщик Контур.Экстерна, расскажет как повысить эффективность тестирования с их помощью и не уйти в крайности.



      Как часто вам приходится что-либо оценивать? Наверное, каждый день. Хорошая или плохая сегодня погода, сносно ли ведет себя кот, нравится ли вам эта футболка. На работе вы оцениваете свои задачи и результаты: это сделано хорошо, а тут можно было лучше. Такие оценки часто основаны на субъективном ощущении. Но эти оценки не могут повысить эффективность процессов, и нужна более высокая детализация. Тогда на помощь приходят метрики.


      Как вы можете охарактеризовать свои рабочие процессы и практики? Они хорошие? Плохие? Насколько? Почему вы так решили?


      Не удержусь и процитирую слова лорда Кельвина:


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

      Никакой процесс не может считаться зрелым пока не станет прозрачным и управляемым.


      Я видел две крайности:


      1. Люди считают, что у них все хорошо/плохо и без радаров. «Ну это же и так понятно»(с).
      2. Каждый шаг обвешан цифрами, но большая их часть лежит мертвым грузом и никак не используется.
      Читать дальше →
    • [Санкт-Петербург, анонс] SpbDotNet #30 — доклады о телеметрии .NET-микросервисов и анализаторах кода ReSharper и Roslyn


        В пятницу 20 апреля в 19:00 в Питере пройдет тридцатый митап SpbDotNet.


        В программе доклады от Контура — крупнейшего продуктового .NET-разработчика в России. Вы послушаете доклады о правильном сборе телеметрии от .NET-микросервисов, а также о применении анализаторов кода в прикладной разработке. Также узнаете, кому достанутся 4 билета на конференцию DotNext, 2 лицензии от JetBrains и другие подарки от друзей SpbDotNet. Митап пройдёт на площадке компании Selectel.

        Читать дальше →
        • +11
        • 1,5k
        • 3
      • [Екатеринбург, анонс] UralJS #7 — три доклада о React Native, удобной навигации в SPA и принципах работы с DateTime

          image


          В четверг 19 апреля в 19:00 в лофте «Титры» пройдет седьмой митап UralJS. Обсудим, как React Native открыл JavaScript-программистам мир мобильной разработки, а потом отвлечемся от конкретных технологий и порассуждаем, что такое хорошая навигация, и как разработчики на самом деле должны работать с датами и временем.


          Вот подробное описание докладов:

          Читать дальше →
        • О стримах и таблицах в Kafka и Stream Processing, часть 1

          • Перевод
          * Michael G. Noll — активный контрибьютор в Open Source проекты, в том числе в Apache Kafka и Apache Storm.

          Статья будет полезна в первую очередь тем, кто только знакомится с Apache Kafka и/или потоковой обработкой [Stream Processing].


          В этой статье, возможно, в первой из мини-серии, я хочу объяснить концепции Стримов [Streams] и Таблиц [Tables] в потоковой обработке и, в частности, в Apache Kafka. Надеюсь, у вас появится лучшее теоретическое представление и идеи, которые помогут вам решать ваши текущие и будущие задачи лучше и/или быстрее.

          Содержание:

          * Мотивация
          * Стримы и Таблицы простым языком
          * Иллюстрированные примеры
          * Стримы и Таблицы в Kafka простым языком
          * Пристальный взгляд на Kafka Streams, KSQL и аналоги в Scala
          * Таблицы стоят на плечах гигантов (на стримах)
          * Turning the Database Inside-Out
          * Заключение
          Читать дальше →
          • +19
          • 4,2k
          • 4
        • Разбор перформансных задач с JBreak (часть 4)

            Разбор последней четвёртой задачи:

                public double octaPow(double a) {
                    return Math.pow(a, 8);
                }
            
                public double octaPow(double a) {
                    return a * a * a * a * a * a * a * a;
                }
            
                public double octaPow(double a) {
                    return Math.pow(Math.pow(Math.pow(a, 2), 2), 2);
                }
            
                public double octaPow(double a) {
                    a *= a; a *= a; return a * a;
                }

            Условие (упрощённо):
            Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).
            Под катом бенчмарки, куски ассемблера и разбор оптимизаций со стороны JVM.

            Другие публикации серии: Часть 1, Часть 2 и Часть 3.
            Читать дальше →
          • Хакатон и гейм-джем в Екатеринбурге

              So popular! Much people! Wow! Регистрация закрыта 29 марта.

              Мечтаешь сделать игру с собственными правилами и бомбическим сюжетом? Надоело ждать Half-Life 3 и смотреть, как battle royale разрывают гейм-индустрию? Тогда регистрируйся на хакатон Контура и сделай что-то по-настоящему взрывное! Поторопись, 29 марта ровно в полночь (по Мск.) мы закроем превратим в тыкву регистрацию. 7 и 8 апреля тебя ждет 27 часов непрерывной работы над собственным проектом, знакомство с самыми крутыми разработчиками города и командное месилово за призы.




              Мы не будем ограничивать ни жанром, ни технологиями. Хочешь Super Mario на Марсе? Вперед! Любишь коллекционные карточные игры? Действуй! Каким бы шерстяным волчарой ты ни был, запилить крутой проект за сутки будет сложно. Даже если ты отличаешь друг от друга Defold, Corona, Unity и Unreal Engine. Поэтому тебе помогут другие разработчики, гейм-аналитики, дизайнеры — хакатон будет командным. Если у тебя есть проверенная команда — бери всех с собой. Не каждый может затусить в нашем офисе разработки на Широкой речке. А ты сможешь!



              На нашем предыдущем хакатоне было клёво.

              Читать дальше →
            • «Календарь тестировщика». Протестируй безопасность

                Продолжаем цикл статьей «Календарь тестировщика», в этом месяце поговорим о тестировании безопасности. Многие не знают с чего начать и пугаются сложностей. Иван Румак, тестировщик безопасности веб-приложений в Контуре, поделился основами в поиске уязвимостей. Новички найдут в статье базовые знания, а опытным тестировщикам будет полезен раздел про обход защиты от CSRF.

                В прошлом году Иван занял 4 место в программе поиска уязвимостей Mail.ru и вошел в призовые топ-100 соревнования Hack The World 2017.

                В феврале я решил научить коллег-тестировщиков искать уязвимости и проверять релизы на баги безопасности. Из плана обучения я вынес в статью самые основы: с чего начать, что такое HTTP, а также сделал полный разбор одной уязвимости — как искать, защищаться и обходить защиту.



                Читать дальше →
              • Разбор перформансных задач с JBreak (часть 3)

                  Публикую предпоследнюю часть разбора с третьей задачей. До этого выходил разбор первой задачи и второй задачи.

                  Код к третьей задаче:

                      public static double compute(
                              double x1, double y1, double z1,
                              double x2, double y2, double z2) {
                          double x = y1 * z2 - z1 * y2;
                          double y = z1 * x2 - x1 * z2;
                          double z = x1 * y2 - y1 * x2;
                          return x * x + y * y + z * z;
                      }
                  
                      public static double compute(
                              double x1, double y1, double z1,
                              double x2, double y2, double z2) {
                          Vector v1 = new Vector(x1, y1, z1);
                          Vector v2 = new Vector(x2, y2, z2);
                          return v1.crossProduct(v2).squared();
                      }
                  
                      public final static class Vector {
                          private final double x, y, z;
                  
                          public Vector(double x, double y, double z) {
                              this.x = x; this.y = y; this.z = z;
                          }
                  
                          public double squared() {
                              return x * x + y * y + z * z;
                          }
                  
                          public Vector crossProduct(Vector v) {
                              return new Vector(
                                      y * v.z - z * v.y,
                                      z * v.x - x * v.z,
                                      x * v.y - y * v.x);
                          }
                      }

                  Условие (упрощённо):
                  Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).
                  Читать дальше →
                  • +16
                  • 2,9k
                  • 7
                • Разбор перформансных задач с JBreak (часть 2)

                    Только поутихли страсти с первой части разбора, вышедшей на прошлой неделе, как публикую продолжение: сегодня речь пойдёт о второй задаче.

                    Код второй задачи:
                        String format(String user, String grade, String company, String message) {
                            return String.format(
                                    "Он, %s, придумал такие %s задачи. Приду на стенд %s и скажу ему %s",
                                    user, grade, company, message);
                        }
                    
                        String format(String user, String grade, String company, String message) {
                            return "Он, " + user
                                    + ", придумал такие " + grade
                                    + " задачи. Приду на стенд " + company
                                    + " и скажу ему " + message;
                        }
                    
                        String format(String user, String grade, String company, String message) {
                            return new StringBuilder("Он, ")
                                    .append(user)
                                    .append(", придумал такие ")
                                    .append(grade)
                                    .append(" задачи. Приду на стенд ")
                                    .append(company)
                                    .append(" и скажу ему ")
                                    .append(message)
                                    .toString();
                        }
                    

                    Условие (упрощённо):
                    Определить, какие методы быстрые, а какие — медленные (JRE 1.8.0_161).

                    Другие публикации серии: Часть 1, Часть 3, Часть 4.
                    Читать дальше →
                  • Как мы переняли опыт Khan Academy и сделали свой курс для тестировщиков

                      Контур ежегодно запускает бесплатные курсы по программированию для студентов в Екатеринбурге, Питере, Новосибирске, Ростове-на-Дону, Ижевске, Перми и Казани. С 2013 мы выросли до 7 городов и 13 университетов, разработали свою онлайн-платформу ulearn.me, где с февраля 2018 есть курсы не только для разработчиков на C#, но и курс для тестировщиков.


                      Именно о нем мы поговорили с Катей Чаплинской, менеджером разработки и организатором курса. Катя рассказала какие фишки ждут курсантов в этом году, как проходила подготовка и какие перспективы у курса.


                      Катя, буквально в двух словах расскажи что это за курс?


                      — Это уже пятый курс для новичков, который знакомит курсантов с основами тестирования. Традиционно в конце февраля мы набираем группу примерно из 30 студентов и молодых специалистов. Такая небольшая группа дает возможность уделить внимание каждому курсанту, да и преподаватели не утомляются, проверяя домашку. По опыту прошлых лет предполагаем, что 10-15% студентов не дойдут до конца курса, так что группа еще сократится. Занятия начались 22 февраля, все они будут проходить на Малопрудной два раза в неделю, по вторникам и четвергам. Курс закончится еще до майских праздников, потому что в середине мая курсантам становится не до занятий =)



                      Читать дальше →
                      • +12
                      • 3,6k
                      • 3
                    Самое читаемое