- вебинары + самостоятельная работа над заданиями
- время 17:30 – 20:30
- ссылка на подключение доступна в приглашении в календарь
- записи вебинаров будут доступны с вечера дня вебинара на 10 дней
- после каждого вебинара будет сформулировано задание на самостоятельную практику
- срок выполнения – до следующего вебинара
- работу будут оценивать инспекторы путем проведения code review
- результаты code review будут приходить в интерфейс github и дублироваться на почту
- Убедиться, что вы в slack-чате
training-qa-automation-java-2021-08 - [Если нет] завести аккаунт на github
- Сделать форк репозитория с материалами
- Добавить в ваш новый репо своих менторов как коллабораторов
- Установить jdk ≥8 и IntelliJ IDEA (предпочтительнее Ultimate, но и Community подойдет)
В случае вопросов пишите в slack-чат и на корпоративную почту: a.roshchina
вебинар 01 от 02.08.2021
- Local repo
- Commit
- Log
- Tag
- Branch
- Remote repo
- Clone
- Push
- Pull
- Forks
- Pull Request
- PR workflow
- Известна учетка ментора на github
- Установлен git (stand-alone или как компонент IDEA)
- Заведен аккаунт на github
- Сделан fork данного репо
- Ментор добавлен как коллаборатор
and
- Создана рабочая ветка
devдля реализации заданий - Внесены тестовые изменения
- Заведен PR в
master
and
- Новые изменения из данного репо перенесены себе в
masterчерез PR
- Ментор принимает PR c тестовыми изменениями
- Вам приходит нотификация
вебинар 02 от 06.08.2021
- Java Platform definition
- Basic terms: JVM, JRE, JDK
- source
- compiling
- packaging
- running
- Sourcepath and Classpath
- Локальный клон репозитория
- Исходники двух классов
import com.tinkoff.edu.Printer;
public class MyApplication {
public static void main(String[] args) {
Printer.print("Hewllo world!");
}
}
---
package com.tinkoff.edu;
public class Printer {
public static void print(String message) {
System.out.println(message);
}
}
- Папочная структура исходников src/MyApplication.java
- Компиляция: два .class
- Разделить иcходники и бинарники:
srcиtarget - Запуск приложения
- Проект успешно собирается
- вывод
Hello world! - Ментор принимает PR в
master
вебинар 03 от 09.08.2021
- Directory layout
- Build lifecycles
- Lifecycle phases
- Plugins
- Managing plugins with pom.xml
- Dependency artifacts: JARed classes, sources, javadocs
- Artifact repositories
- Artifact identifying
- Test dependencies vs Prod dependencies
- Project settings and structure: modules, sourcepath + classpath
- Workspace
- Views
- Running application with run configuration
- Git workflow
- Maven build
- Локальный клон репозитория
- В корне репо:
- Сгенерирован maven-проект по шаблону
mvn archetype:generate com.tinkoff.edu:app:1.0.0-SNAPSHOT
- Используется тестовая зависимость JUnit5
- Выдержан стиль кодирования и соглашения
- Проект успешно собирается
- Ментор принимает PR в
master
вебинар 04 от 13.08.2021
- Learning through developing and JIT testing
- Case: Loan system mock
- Single-line comments
- Multi-line comments
- JavaDoc comments demo
- Package: why?
- Package declaration
- Import directive
- Naming convention
- Class: why?
- Class declaration
- Dynamic class loading
- Static initialization section
- Naming convention
- Encapsulation concept: behavior and state
- Method: why?
- Method declaration
- Method body code block
- Method variables
- Returning values
- Methods Overloading
- Naming convention
- Dot notation
- Call stack
- Declaration
- Initialization
- Literals
- Default initialization values for class and method variables
- Requirements for Loan Scoring application
Как клиент банка, я хочу сделать запрос на кредит и получить ответ с уникальным id для дальнейших коммуникаций
- Application designed for testability and reuse
- Controller
- Service
- Repository
- Application implemented
- Self-made tests implemented (with main class)
- Проект успешно собирается
- Выдержан стиль кодирования и соглашения
- Ментор принимает PR в
master
вебинар 05 от 16.08.2021
- Static import directive
-
finalmodifier for statics - Formal and factual arguments
- Parameters
Pass by value -
finalmodifier for locals/params
- What is state
- Variable declaration scope: static/object/local
- local, global and object state
- Object creation
- Object state initialization with constructor
- Accessors and mutators
- OOP style (rich design)
- stateful domain objects/DTO + stateless services (anemic design)
- Immutable
- Factory
- DI
- Enumerated type concept: why?
- API
- Using with
switch
- Polymorphism why's?
- Java implementation
- Interface
-
finalmodifier
- Inheritance why's?
- Java implementation
- Abstract class
- Class
- Requirements for Loan Scoring application
Как клиент банка, я хочу сделать запрос на кредит и получить ответ с уникальным id для дальнейших коммуникаций
- Application designed for testability and reuse
- non-static Controller with Service DI
- non-static Service with Repo DI
- Service with Interface
- non-static Repository with Interface
- non-static Loan Request
- non-static Loan Response with encapsulated autogenerated incremental id
- Loan Response encapsulates Response Type enum: APPROVED, DENIED
- Self-made tests implemented (with main class)
- Проект успешно собирается
- Выдержан стиль кодирования и соглашения
- Ментор принимает PR в
master
вебинар 07 от 23.08.2021
- Interfaces
- Defender methods
- Inheritance and constructors
- IoC: Framework vs Library
- JUnit as a test framework
- Task flow
- Test class and methods
- Annotations
- Assert methods
- Coverage
- Requirements for Loan Scoring application
Как клиент банка, я хочу сделать запрос на кредит и получить ответ с уникальным id для дальнейших коммуникаций
- Application covered with e2e tests
- shouldGetId1WhenFirstCall
- shouldGetIncrementedIdWhenAnyCall
- Application covered with integration tests
- Покрытие по веткам ≥ 90%
- Фикстура максимально реюзается
- Проект успешно собирается
- Выдержан стиль кодирования и соглашения
- Ментор принимает PR в
master
вебинар 08 от 26.08.2021
- Ценность фикстуры и как она определяет трассу исполнения
-
java.lang.Objectclass and reference types - Equality with
assertEquals:==vs.equals()
- Coverage types
- Coverage tool: JaCoCo
- byte
- int
- short
- long
- float
- double
- char
- boolean
- Wrapper types and main features: referenced, constants, string parsing
- Autoboxing/unboxing and performance issue
- type casting
-
instanceof
-
+, -, *, /, % - Typed operators: 1/3 vs 1./3
-
ArithmeticException - Types Overflow and solution with
BigInteger - FP precision loss and solution with
BigDecimal
- Type-safe
-
&, |, ! - Lazy and eager form:
&&, || -
==, !=, <, <=, >, >= - Reference types issue: absence of
===and.equals()
- Requirements for Loan Scoring application
Как клиент банка, я хочу сделать запрос на кредит и получить ответ с уникальным id и статусом заявки для дальнейших коммуникаций- Business rules:
| Loan Type | Amount | Months | Response status |
|---|---|---|---|
| PERSON | ≤ 10_000.0 | ≤ 12 | APPROVED |
| PERSON | > 10_000.0 | > 12 | DECLINED |
| OOO | ≤ 10_000.0 | any | DECLINED |
| OOO | > 10_000.0 | < 12 | APPROVED |
| OOO | > 10_000.0 | ≥ 12 | DECLINED |
| IP | any | any | DECLINED |
- Application covered with e2e tests:
shouldGetErrorWhenApplyNullRequest(-1 return value)shouldGetErrorWhenApplyZeroOrNegativeAmountRequest(-1 return value)shouldGetErrorWhenApplyZeroOrNagativeMonthsRequest(-1 return value)- tests covering business rules
- tests covering corner cases for business rules
- Покрытие по веткам ≥ 90%
- Фикстура максимально реюзается
- Проект успешно собирается
- Выдержан стиль кодирования и соглашения
- Ментор принимает PR в
master
вебинар 09 от 30.08.2021
- Boxing/unboxing API
- point of static methods
- Auto Boxing/unboxing
- Все объекты заменяемы и с ними можно работать унифицированно
-
toString() -
equals()andhashCode()contract
-
if - Ternary operator
-
switchand its limitations
- Declaration
- Initialization
- empty
- literals
- "Immutability"
- API: indexing operator, length
- Exceptions
- "foreach" cycle
- Why?
- Declaration
- Using
- Limitations
- "foreach" loop
-
for -
doandwhile -
breakandcontinueoperators
- Declaration
- Initialization with literal and constructor
- "Immutability" vs StringBuffer/StringBuilder
- Strings equality:
==vs.equals() - String API
-
StringBufferandStringBuilder -
StringBufferandStringBuilderAPI
- Changed requirements for Loan Scoring application
Как клиент, я хочу сделать заявку на кредит, чтобы получить ответ с уникальным случайным UUID- Заявка включает ФИО
- Added requirements for Loan Scoring application
Как клиент, я хочу запросить статус заявки по ее UUIDКак менеджер, я хочу изменить статус заявки по ее UUID
- Made research for
UUIDclass API - Business rules code switching refactored to
switch - Array used Repository back
- Application covered with e2e tests
- tests covering feature scenarios
- tests covering corner cases
- Покрытие по веткам ≥ 90%
- Фикстуры максимально реюзается
- Проект успешно собирается
- Выдержан стиль кодирования и соглашения
- Ментор принимает PR в
master
вебинар 10 от 02.09.2021
- Type information
- Object data information
- Methods call stack information
- creating exception instance
-
throwoperator - Methods call stack tracing
-
trysection -
catchsection -
finallysection
- multi-catch
- try-with-resources
- Built-in types
- Errors vs Exceptions
- Checked vs Runtime exceptions
- How JUnit5 handle exceptions in tests: new test states
- failure
- error
- skipped (+assumes)
- JUnit5
assertThrows
- Changed system NFRs and inner quality model for Loan Scoring application
- Для всех операций всех компонентов добавлены проверки на null и пустоту с исключениями
- Приложение не падает при возможных системных ошибках (арифметика, выход за границы, etc) - опциональная задача
- Added requirements for Loan Scoring application: Data Validation Rules leading to business exceptions. Реализовать хотя бы одну валидацию своим кастомным checked exception:
- ФИО не короче 10 и не длиннее 100 символов
- ФИО содержит только буквы и
- - Сумма не менее 0.01 и не более 999 999.99
- Срок не менее 1 и не более 100 месяцев
- Made research for
StringandCharacterAPI - Application covered with e2e tests
- tests covering feature scenarios
- tests covering corner cases
- Покрытие по веткам ≥ 95%
- Фикстуры максимально реюзается
- Проект успешно собирается
- Выдержан стиль кодирования и соглашения
- Ментор принимает PR в
master
вебинар 11 от 06.09.2021
-
Iteratorandforloop -
foreach
-
SetAPI -
ListAPI -
MapAPI
-
equals -
hashCode
-
Collections -
Comparable,Comparator
- Declaring lambdas
- Compiler types inference
- Functional interface
- Method reference
- Functions composition
- Terminal and non-terminal operations
- Remaining requirements for Loan Scoring application
-
Как клиент, я хочу запросить статус заявки по ее UUID -
Как менеджер, я хочу изменить статус заявки по ее UUID - Added new requirements for Loan Scoring application
- Map-backed repository
-
Как менеджер, я хочу найти все заявки от ООО -
Как менеджер, я хочу найти сумму всех заявок от ООО
- Made research for appropriate assertions from Hamcrest or AssertJ libraries
- Application covered with e2e tests
- tests covering feature scenarios
- tests covering corner cases
- Покрытие по веткам ≥ 95%
- Фикстуры максимально реюзается
- Проект успешно собирается
- Выдержан стиль кодирования и соглашения
- Ментор принимает PR в
master
вебинар 12 от 09.09.2021
-
FileandPath - File IO with Stream API
- Simple file operations with utility class
Files
- Исключения
- Таймауты
- Параметризованные тесты
- Test suites
- Теги
- Static inner classes
- Когда и сколько раз создается объект тестового класса?
- Как максимально реюзать фикстуры?
- Методы жизненного цикла теста
- Fixture Builders
- Threads
- Parallelism with ThreadPools
- Concurrency issues
- Data Race
- Visibility and reordering
- Thread synchronization
- critical section / monitor
- locks
- Atomics
вебинар 13 от 13.09.2021
- Обзор Retrofit
- Обзор REST Assured
вебинар 15 от 20.09.2021
- На каких уровнях можно замещать БД
- Утилиты работы с JDBC
- Управление транзакциями
- На каких уровнях можно замещать внешний сервис
- Тестовые дублеры для внешних веб- и REST-сервисов: WireMock
вебинар 16 от 23.09.2021
- Командная работа над проектом
- Фидбек от инспекторов
вебинар 17 от 27.09.2021
- Командная работа над проектом
- Фидбек от инспекторов