Разное

Тестовые задания по java: ТОП 20 тестовых заданий на интервью для Java разработчика

Содержание

Как выполнять тестовые задания для java- джуниоров/стажеров, чтобы попасть на собеседование

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

У каждой компании своя методика поиска таких кандидатов. Мы, на сегодняшний день, придерживаемся следующей: даем небольшое тестовое задание (около часа работы, для опытного разработчика), для выполнения которого достаточно знаний java-core и просим выложить его на гитхаб. По времени выполнения не ограничиваем. Затем, качественно выполнивших задание соискателей приглашаем на собеседование.

Задание обычно содержит реализацию CRUD методов в файл через консольное меню с одной-двумя сущностями плюс валидацию некоторых полей. В качестве примера приведу классическую ситуацию с пользователем, которому нужно реализовать валидацию email и телефона, по заданному шаблону и к этому иметь возможность ввести от 1 до 3 телефонов. Откликов приходит очень много, а мест очень мало — соответственно отбор достаточно жесткий.


Начав проверять все задания подряд, выяснилось, что на проверку работоспособности с запуском и фидбеком каждого задания уходит около 30 минут, пришлось пересмотреть методику проверки и вывести критерии для быстрого отсеивания недостаточно качественного кода. К примеру, открыв решение на гитхабе я вижу, что весь код сконцентрирован в нескольких классах да еще и наваленных в одном package — быстрый отказ (как же принципы ООП?).

Многие могут счесть такой подход несправедливым, сказать что задача же решена, код работает, однако жизнь стажера и джуниора сурова и беспощадна.

В связи с этим, предлагаю свой список рекомендаций к выполнению тестового задания

  1. Ваше решение должно работать в соответствии с ТЗ

    Досконально выполняйте требования изложенные в условиях к решению задачи. Не додумывайте своих полей у сущностей, не меняйте условия валидации и тд. и тп. Это показывает насколько вы внимательны к деталям, что для разработчика очень важно.
  2. Кропотливо проверяйте выполненную задачу

    Сделали задачу — проверьте работоспособность. Сначала основной функционал, описанный в ТЗ, затем дополнительный. Постарайтесь «сломать» свое приложение: проверить или адекватно заданию себе введет приложение, если ввести не валидные данные, данные максимально похожие. Не забудьте только исправить все, что найдете.
  3. Кодировка

    Все файлы должны быть в одной кодировке, на мой взгляд в UTF-8. Настройте свою IDE для этого. Помните, если у вас Windows, то у проверяющего может быть Linux, а дополнительные приседания с кодировкой — лишняя трата времени проверяющего.
  4. Не делайте задачу в один коммит

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

    Учитывая, что вы претендуете максимум на джуна, чаще всего у вас еще недостаточно опыта, чтобы использовать чужой код. Условия задачи могут незначительно меняться и когда вы просто копируете чужое решение, оно уже может немного не соответствовать текущей задаче. А задача должна быть выполнена в точности с заданием (см. П1).
  6. Добавьте файл readme

    Добавьте в корень проекта readme.md файл. Вкратце опишите свое приложение, выложите дополнительные пояснения для запуска, если необходимо. Если у вас есть другие уже выполненные задачи — добавьте readme и туда. Я, например, если кандидат заинтересовал, могу посмотреть и другой его код. Да и если не пройдете сюда — этот код вы тоже сможете приложить в резюме.
  7. Делайте удобное меню

    Приложение должно быть user friendly. Помните, что время для проверки часто ограничено, поэтому предзагрузите приложение данными, добавьте метод показать все сущности (какая там в условиях). Переходы по меню должны быть удобными, например при помощи цифр. А то иногда реализуют так, что для удаления сущности нужно ввести в консоли «Delete». Однако здесь нельзя перестараться и выйти за рамки ТЗ.
  8. Делайте максимально хорошо, насколько вам позволяют ваши навыки

    Раз уж вы решили выполнять тестовое задание, подходите к его решению с максимальной отдачей. Даже если задача кажется тривиальной и простой, не нужно подходить к ее решению формально и писать код на коленке. И если вы не пройдете в эту компанию, то у вас на гитхабе останется выполненное решение, а это практика.
  9. Не забывайте о принципах ООП

    Пусть вам кажется, что задача небольшая не забывайте — задание тестовое, а java в первую очередь объектно ориентированный язык. И смотреть будут не только на работоспособность приложения но и на код. Качество кода — это очень важная часть решения. Не пишите спагетти код. Разложите все по классам, пакетам. Создайте где нужно интерфейсы, вынесите перечисления в ENUM, если необходимо.
  10. Постарайтесь использовать паттерны проектирования

    Удачное применение хотя бы одного паттерна проектирования покажет, что вы имеете понятие о паттернах проектирования (либо не имеете). Только прежде чем применять тот или иной паттерн — разберитесь в чем задумка, как он должен работать и для чего он был придуман. Я, если вижу паттерны в коде, потом на собеседовании могу задать вопрос о примененном паттерне.
  11. Пользуйтесь ресурсами

    Все сообщения выводимые пользователю лучше выносить в ресурсы и брать оттуда. Это покажет проверяющему, что вы умеете работать с ресурсами и понимаете для чего они используются. Сообщения лучше выводить на английском языке.
  12. Не забывайте переопределять где нужно equals & hashcode
  13. Используйте фичи java8+, такие как лямбда-выражения, стримы

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

    Если умеете, напишите тесты, но это уже на пять с несколькими плюсами. Часто, подразумевается, что любой хороший код обычно покрывают тестами. Хотя для приведенной в примере задаче, отсутствие тестов минусом не будет, так как это простое консольное приложение на знание java core.

Резюме

Решение задачи без ошибок присылает большая половина соискателей, а добротный код — единицы, которые и проходят естественный отбор и попадают в следующий тур. Все исполнители получают фидбек. Те кто написал добротный код, который дошел до запуска — персональный фидбек, те, что прислали спагетти, написанное на коленке — более обобщенный.

P.S.: Надеюсь мои советы помогут вам, уважаемые соискатели лучше выполнять ваши тестовые задания, а проверяющим реже плакать кровавыми слезами. Удачи вам в поисках и хорошего стартового места работы!

Тест с ответами: «Java» | Образовательный портал

1. Какое утверждение относительно класса java.lang.Object верно:
а) у этого класса нет полей +
б) нельзя явно переопределять методы этого класса
в) нельзя явно наследовать этот класс

2. Какое утверждение относительно класса java.lang.Object верно:
а) нельзя явно переопределять методы этого класса
б) у этого класса нет суперкласса +
в) нельзя явно наследовать этот класс

3. Какое утверждение относительно модуля компиляции верно:
а) в модуле компиляции может быть больше одного объявления пакета
б) объявления верхнего уровня позволяют обращаться к типам из других пакетов по их простым именам
в) если объявление пакета отсутствует, то модуль компиляции будет принадлежать безымянному пакету +

4. Какое утверждение относительно модуля компиляции верно:
а) import-выражения необязательны +
б) в модуле компиляции может быть больше одного объявления пакета
в) хранится в текстовом .class-файле

5. Какой из следующих адресов относится к подсети класса B:
а) 224.0.0.10
б) 194.80.20.1
в) 172.16.0.1 +

6. Какой из следующих адресов относится к подсети класса B:
а) 224.0.0.10
б) 140.150.160.1 +
в) 194.80.20.1

7. Какое утверждение относительно java.util.Random корректно:
а) void nextBytes(byte[] arr) — заполняет массив arr нулями
б) последовательный запуск приложения, генерирующего последовательность псевдослучайных чисел, никогда не вернет одинаковых последовательностей
в) используется для получения последовательности псевдослучайных чисел +

8. Какое утверждение относительно java.util.Random корректно:
а) double nextGaussian()— возвращает случайное число в диапазоне от 0.0 до 1.0 распределенное по нормальному закону +
б) void nextBytes(byte[] arr) — заполняет массив arr нулями
в) последовательный запуск приложения, генерирующего последовательность псевдослучайных чисел, никогда не вернет одинаковых последовательностей

9. Одно из ключевых слов языка Java:
а) false
б) null
в) default +

10. Одно из ключевых слов языка Java:
а) null
б) protected +
в) false

11. Какой из следующих адресов относится к подсети класса С:
а) 219.40.80.33 +
б) 184.80.20.1
в) 14.80.22.5

12. Какой из следующих адресов относится к подсети класса С:
а) 184.80.20.1
б) 194.15.40.6 +
в) 14.80.22.5

13. Сколько объектов порождается при инициализации массива new int[3][]:
а) 1 +
б) 3
в) 2

14. Какое утверждение относительно класса String верно:
а) является абстрактным
б) содержит только статические методы
в) обладает свойством неизменяемости +

15. Какое значение может принимать переменная булева типа:
а) true +
б) 0
в) 1

16. Какое значение может принимать переменная булева типа:
а) null
б) false +
в) 1

17. Отметьте верное утверждение относительно языков Java и JavaScript:
а) JavaScript является синонимом Java
б) их спецификации являются закрытыми
в) оба языка кроссплатформенны +

18. Если вызвать write(0x02468101) у экземпляра OutputStream, то в каком порядке и какие байты будут записаны в выходной поток:
а) 0x01,0x81,0x46,0x02
б) только 0x01 +
в) 0x02,0x46,0x81,0x01

19. Вы создали класс Animal в пакете ru.animal. Где будет хранится исходный код класса в файловой системе:
а) ru\animal\Animal.class
б) ru\Animal.java
в) ru\animal\Animal.java +

20. Может ли массив основываться на абстрактных классах? Интерфейсах:
а) да, нет
б) да, да +
в) нет, да

21. Что такое приоритет потока:
а) качественная характеристика, обеспечивающая распределение процессорного времени между потоками: чем выше приоритет, тем в среднем чаще будет выделяться процессорное время для такого потока +
б) процессор сначала выполняет все задачи с более высоким приоритетом, затем – с менее высоким
в) порядковый номер потока в очереди на исполнение

22. Какое преимущество предоставляет интерфейс Runnable по сравнению с классом Thread:
а) позволяет более гибко работать с приоритетами потоков
б) позволяет классу, содержащему логику работы, наследоваться от других классов +
в) позволяет обойтись без класса Thread

23. Какая кодировка используется классом OutputStreamWriter по умолчанию:
а) UTF-8 независимо от системы, где запущена Java-машина
б) UTF-16 независимо от системы, где запущена Java-машина
в) используемая кодировка зависит от системы, где запущена Java-машина +

24. Какое утверждение относительно методов класса верно:
а) к методу, объявленному с модификаторами public final, нельзя обратиться из класса-наследника
б) метод, объявленный с модификатором native, должен быть написан на другом языке программирования +
в) методы не могут иметь модификатор доступа default

25. Какое утверждение относительно методов класса верно:
а) идентификатор метода при объявлении становится составным именем метода
б) к методу, объявленному с модификаторами public final, нельзя обратиться из класса-наследника
в) метод, объявленный с модификатором final, не может быть переопределен в классе-наследнике +

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

27. Какой из перечисленных ниже классов имеет наибольшее сходство с классомVector:
а) ArrayList +
б) LinkedList
в) AbstractCollection

28. Какой класс соответствует классу CharArrayReader, но работает только с байтовыми данными:
а) FilterInputStream
б) BufferedInputStream
в) ByteArrayInputStream +

29. Какой метод нужно переопределить, чтобы реализовать отрисовку внешнего вида компонента:
а) paint +
б) repaint
в) show

30. От какого класса наследуются InputStream иOutputStream:
а) AbstractStream
б) Object +
в) IOWriter

Тестовое задание Crossover Java — urvanov.ru

Обычно я не делаю тестовых заданий, так как это зачастую просто пустая трата времени. Но тот один человек уговорил, хотя описание компании и вакансии было какое-то мутное. Я бы отсеял.

Текст задания:

Assignment

Your objective is to perform a set of tasks described below. Please try to complete as much as possible within given time-frame, even if you do not finish the assignment.

Tools and Technologies

Problem Description

Create the back-end for Sales Order Application which contains:

  • Product: The Inventory products that organization sell.
  • Customer: The buyers of products from organization.
  • Sales Order: The process of selling product to customer. Each sales order consist of one or more order lines.
  • Order Lines: The actual products and quantities that a customer need to buy.

The back end will validate the following information with each sales order

  • Quantities that have been requested are less than or equal current inventory balance.
  • Total price of sales order is less than or equal (Customer Credit Limit — Customer Current Credit).

If Sales Order is valid, your back end  will reduce Inventory Quantities and increase current credit.

Your back end should also handle delete and update of sales order

Requirements

  • All Project(s) you will create will be under maven control.
  • You will use web services to implement communication between your backend & our front-end .
  • You will use tomcat as your web container.
  • You will use hibernate as an ORM implementation.
  • You will use MySQL as your database.
How to integrate your code:
  • Your code will replace marker //TODO by the candidate (You can list them by opening Markers view in eclipse then expand Java Task it should be 15 Item)
  • Every Marker has a comment of what should you do.
  • Don’t waste your time in improve or refactor the front end code

Build, Deployment and Testing

  • Provide full details of how to build, deploy and run the application (this should be in howto file).
  • Create JUnit for all basic operations (e.g. validations, sales order CRUD operations ..).
  • Application should be built using a single command.
  • Execute unit tests should be done using a single command.

To be evaluated

  • Functionalities and output.
  • Database design.
  • Code quality (style, documentation and performance).
  • Fulfilment of running and deployment Instructions.

Readme Document

Create a txt file with the following information

  1. Instructions to install and configure prerequisites or dependencies, if any

  2. Instructions to create and initialize the database

  3. Assumptions you have made — it is good to explain your thought process and the assumptions you have made

  4. Requirements that you have not covered in your submission, if any

  5. Instructions to configure and prepare the source code to build and run properly

  6. Issues you have faced while completing the assignment, if any

  7. Constructive feedback for improving the assignment

Design Document

Create a design document containing the following

  1. High level requirement analysis

  2. High level presentation of the data model

  3. Architecture diagrams describing the composition and working of the system, explaining the component interaction and process, control and data flows.

  4. Explain the breakdown of the system into components with technical implementation details of each component along with the design patterns involved and with reasons that justify your choices.

  5. Present the UI screens and how they are connected through user interactions with those screens

  6. Use both visual elements (diagrams) and text descriptions to maximise the amount of information conveyed while keeping the document as compact as possible

Delivery / What to submit

Please, read and follow this section carefully.Any delivery that does not follow this section will score much less or simply won’t be evaluated.

Delivery for this assignment should consist of:

Archive named <your_name — Java Engineer>.zip containing the following:

  • README.txt  -> containing report about work done.
  • Design.doc   -> contains your design implementation.
  • Wink Folder -> Wink video shows you application running, and perform required functionality.
  • Code Folder -> contains your solution and frontend project after modification.
  • SQL Folder   -> All SQL scripts.
  • Deployment -> all artifacts and detailed instructions to deploy your solution.

So the resulting structure of your delivery should be:

    • <your_name — Java Engineer>.zip
    • <your_name — Java Engineer>.zip \ README.txt
    • <your_name — Java Engineer>.zip \ Design.doc
    • <your_name — Java Engineer>.zip \Code\
    • <your_name — Java Engineer>.zip \SQL\
    • <your_name — Java Engineer>.zip \Deployment\
    • <your_name — Java Engineer>.zip \Wink\

ATTENTION! YOUR APPLICATION WILL BE REJECTED IF IT:

— Does not compile

— Does not contain unit tests

— Unit tests are failing

Выполнение

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

У меня получилось следующее:

Код на GitHub.

Я воссоздал обычную структуры Spring приложения. Возможно, стоило воспользоваться Spring Roo и сэкономить немного времени, но я в принципе и без него довольно быстро создаю структуру. Общается клиентская и серверная часть с помощью Spring HTTP Invoker. Используется Hibernate, MySQL и т. д.

Они там запрашивают видео работы, документацию и прочее. У меня особо времени создавать документацию и видео не осталось, поэтому не столь подробное было. Но было.

Особо здесь расписывать не буду.

Архив, который я им отправил:

crossoverassignmentjava

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

Их ответ

Dear Urvanov,

Thank you for taking the time to apply for the Java Software Engineer position at Crossover.

The application process has been extremely competitive, and we greatly appreciate your contribution to that competition. After carefully considering your application, we are sorry to inform you that your Project Evaluation did not score high enough to proceed. You can see our evaluator’s comments at the end of this email.

Although we are unable to continue with your application, we want to thank your for your interest in Crossover and for the valuable time and effort you have invested in this process.

We wish you the best in your professional endeavors!

Here are some good points in your submission:
— Readme with instructions
— Demo show all features
— Script for database creation
— Application compiles and run without problems
— Code well organized with good separation between server and client code
— Minimal static code analisys issues
— Good modularity
— Application layered
— Have dependency injection
— All unit tests passing (with mocks and average coverage)
— Some level of patterns usage
— Good level of code abstractions usage

We have found some issues with your application:
— Important requirement missing: Web service integration
— Design document missing information about architecture and high-level decisions
— Design document with few diagrams
— Demo without voice
— Poor exception handling
— Minimal code comments/docs
— Server validation incomplete

These have affected negatively your overall score.

Thank you,
The Crossover Team

В начале пара стандартных абзацев, из шаблона письма, видимо. Потом плюсы и минусы. Большая часть получена анализатором кода, похоже. В принципе, я знаю, что у меня мало документации и описания. Времени просто не хватило. Были и другие дела, однако. А вот с отсутствием веб-сервиса я не согласен. Spring HTTP Invoker — это тоже веб-сервис. Или в их понимании веб-сервисом можно назвать только SOAP и REST?

Результат тестового задания: куча потерянного времени и никаких плюсов, однако.

Сама фирма мне не очень нравилась с самого начала. Слишком мутное описание вакансии. Я обычно такие отфильтровывал. А судя по отзывам в интернете они заставляют устанавливать на свой компьютер специальное приложение для слежения, которое в любой момент может использовать камеру, записывать нажатия клавиш, движения мышки и делать скриншоты. Это означает, что для работы с ними вам нужен будет отдельный физический компьютер и отдельный уголок комнаты, чтобы в их данные не попали ваши фотографии в труселях и без, пароли от банков, соцсетей, блогов, хостингов и почты. Источники: раз,  два. Люди там пишут, что в туалет лучше лишний раз не ходить. Да и вакансии как спам по всем сайтам появляются. Странно это.


Поделиться:

Тестовое задание на Java Junior

Подготовительный этап перед «Full Stack: Angular and Spring Boot».

В скобочках указаны номера лекций в разделе.

  • Вступление (обзор и установка ПО) (1,2,3)

  • Инверсия управления (4)

  • Внедрение зависимостей (5)

  • Область видимости и цикл жизни бина (6)

  • Конфигурация с помощью аннотаций и Java кода (7,8,9,10)

  • Spring MVC (11,12,13,14,15,16,17)

  • Hibernate(18,19,20,21,22,23,24,25,26,27)

  • Создание приложения с базой данных (28,29,30,31,32,33)

  • Аспектно-оринтированное программирование (34,35,36,37,38,39,40,41,42,43,44,45)

  • Maven (46)

  • Spring Security (47,48,49,50,51,52,53,54,55,69)

  • Spring REST (56,57,58,59,60,61,62)

  • Spring RESR CRUD Database Real-Time Projec (63,64,65,66,67,68)

  • Spring BOOT (70,71,72,73,74,75,76,77,78,79,80,81)

  • Заключение (82,83,84)

  • Тестовое задание на java по написанию юнит тестов. Нужно ревью — java

    Классное задание, где такие дают?

    Имхо, сдесь видно несколько компонентов.
    Сервер — Склад-Магазин, назовем его GroceryStore
    Клиент — PointOfSaleTerminal

    GroceryStore, хранит состояние, но т.к. персистентность не нужна, то он по факту хранит только цены и бесконечное число товаров.
    PointOfSaleTeminal общается с GroceryStore, путем атомарных операций самого API, scan(x) и calculateTotal()… что должно делать setPricing — не понятно. Для атомарного взаимодействия создадим Session, в перспективе чекаут товаров сессии еще и проверяет наличие товара в самом магазине. (хотя с учетом что это гросери, врядли имея на руках товар скажут “извините этот товар закончился”)

    В принципе у GroceryStore может быть несколько терминалов. (иметь магазин с одной кассой не очень удобно)

    //scala-like code, compatible with JVM
    
    object GroceryStore {
      def connect(): Session = new Session()
      
      //todo: it is better for prices use Currency type...
    
      val prices = {
        Map("A"-> 1.25, "B" -> 4.25, "C" -> 1, "D" -> 0.75)
      }
      val discounts = {
        Map("A" -> (3->3), "C" -> (6->5)) //this is first what came to my mind :(, map of maps is not clear and really not useful for end user.
      }
      val sum(products) = {
       products.map(???) //wierd logic to calculate sum
      }
    
    }
    class Session {
      //Session works on Server side
      private var products:mutable.Map[String, Int] = Map()
      def scan(product:String) = {
        val count = products.get(product).orElse(0)
        products ++= Map(produc -> count+1) //these to lines create or update Map item
      }
      def calculateTotal = {
        GroceryStore.sum(products)
      }
    }
    
    class PointOfSaleTerminal {
      //each new customer has its own
      val session = GroceyStore.connect()
      def scan(product:String) = {
        session.scan(product)
      }
      def calculateTotal = session.calculateTotal
    }
    

    дальше пишем тесты (ну или наоборот TDD, ATDD все дела):

    1. моки что PointOfSale делегирует вызовы сессии. моки что сессия делегирует сумирование магазину с подстановкой продукта
      … tbd
    2. базовые кейсы, которые были предложены клиентом для GroceryStore или какие посчитаем нужными, лучше price и дискоунт мокать, с тем расчетом что в реалии они идут из персистетного хранилища.
      … tbd
    3. Интеграционные тесты
    
    class PointOfSaleIntegrationTest extends ScalaTest.FreeSpec{
      class Fixture {
        //this fixture converts string of products to scan actions
        val toScan:String //abstract
        val expectedPrice:BigInteger //abstract
        val terminal = new PointOfSaleTerminal()
        toScan.toChars.foreach(terminal.scan(_))
        expectedPrice should be (terminal.calculateTotal)
      }
      "ABCDABA costs 13.25" in new Fixture {
        val toScan = "ABCDABA"
        val expectedPrice = 13.25
      }
      "CCCCCCC costs 6.0" in new Fixture {
        val toScan = "CCCCCCC"
        val expectedPrice = 6
      }
      "ABCD costs 7.25" in new Fixture {
        val toScan = "ABCD"
        val expectedPrice = 7.25
      }
    }
    

    P.S. Я не понял зачем вы конвертируете дабл в стринг, это может быть не безопасно и под некоторыми локалями ваш тест просто упадет.

    P.P.S Пересмотрел ответ, прошу прощение за scala (jvm быстрее мне на нем на бросать), все мэпится на чистую java. Для облегчения чтения val — константы; типизация есть — просто не нужно явно везде писать; object — это встроенная нотация для синглтона; return неявно есть везде, возвращает последнее выражаение. Тесты по факту создают абстрактные классы, и вызов происходи в “конструкторе” (частый прием для скалы).

    Где я могу найти java-задания / проекты для проверки знаний

    Переполнение стека

    1. Около
    2. Продукты

    3. Для команд
    1. Переполнение стека
      Общественные вопросы и ответы

    2. Переполнение стека для команд
      Где разработчики и технологи делятся частными знаниями с коллегами

    3. Вакансии
      Программирование и связанные с ним технические возможности карьерного роста

    4. Талант
      Нанимайте технических специалистов и создавайте свой бренд работодателя

    5. Реклама
      Обратитесь к разработчикам и технологам со всего мира

    6. О компании

    .Операторы присваивания

    на Java — манекены

    1. Программирование
    2. Java
    3. Операторы присваивания в Java

    Автор: Дуг Лоу

    Оператор присваивания в Java использует оператор присваивания (=) для выражение в переменную. В простейшей форме вы кодируете это так:

     переменная = выражение; 

    Например:

     int a = (b * c) / 4; 

    Оператор составного присваивания — это оператор, который одновременно выполняет вычисление и присваивание.Все бинарные арифметические операторы Java (то есть те, которые работают с двумя операндами) имеют эквивалентные составные операторы присваивания:

    Оператор Описание
    + = Дополнение и переуступка
    — = Вычитание и присвоение
    * = Умножение и присваивание
    / = Отдел и назначение
    % = Остаток и уступка

    Например, выписка

     а + = 10; 

    эквивалентно

     а = а + 10; 

    Технически присваивание — это выражение, а не инструкция.Таким образом, a = 5 — это выражение присваивания, а не оператор присваивания. Он становится оператором присваивания только тогда, когда вы добавляете точку с запятой в конце.

    Выражение присваивания имеет возвращаемое значение, как и любое другое выражение; возвращаемое значение — это значение, присвоенное переменной. Например, возвращаемое значение выражения a = 5 равно 5. Это позволяет вам создавать некоторые интересные, но нецелесообразные выражения, используя выражения присваивания в середине других выражений.Например:

     int a;
    int b;
    а = (б = 3) * 2; // a равно 6, b равно 3 

    Использование операторов присваивания в середине выражения может затруднить понимание выражения, поэтому не рекомендуется.

    Об авторе книги

    Дуг Лоу начал писать книги по программированию еще до того, как была изобретена Java. Он является автором бестселлеров более 30 книг для чайников, в том числе Java All-in-One For Dummies .

    .

    Как тестировать приложения JAVA (с примерами тестовых случаев для различных типов тестирования)

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

    Это серия из трех частей серии по тестированию приложений JAVA.

    1. В этой статье мы изучим компоненты J2EE и подход к ручному тестированию для приложения J2EE.
    2. Во втором мы рассмотрим подход к автоматическому тестированию для тестирования приложений J2EE, а
    3. В третьем мы рассмотрим исчерпывающий список инструментов, доступных для тестирования приложений J2EE.

    Давайте начнем с обзора приложений J2EE

    Веб-приложение Java состоит из нескольких компонентов, каждый из которых служит важной цели. MVC, что означает Model View Controller, является наиболее популярным и часто используемым шаблоном архитектурного проектирования.

    Прежде чем научиться тестировать, давайте кратко рассмотрим различные компоненты приложения J2EE.

    • Клиент / браузер запрашивает веб-адрес с URL.
    • JSP (Java Server Pages) — JSP — это серверная технология, предназначенная для представления данных пользователю. Он поддерживает отображение динамического содержимого с помощью специальных тегов, называемых тегами JSP, которые помогают вставлять код Java в страницы HTML. [Статический HTML всегда отображает одно и то же содержимое]. Во время выполнения JSP преобразуется в сервлет. Бизнес-логика здесь обычно не пишется.
    • JSF (Java Server Faces) — JSF — это структура компонентов представления для эффективного проектирования пользовательского интерфейса.
    • Javascript / JQuery — — это языки сценариев, используемые для проверки на стороне клиента представления / экрана.
    • Сервлет — Сервлет проверяет данные, полученные от входа, выбирает соответствующий код бизнес-логики и передает значения коду Бина.
    • Enterprise Java Bean (EJB) — Здесь обычно пишется и обрабатывается вся бизнес-логика. Затем компонент вызывает код для чтения, записи или обновления базы данных.После завершения операций с базой данных ответ передается обратно сервлету, который, в свою очередь, выбирает соответствующий JSP для отображения результатов.
    • WebServices — Webservices — это компоненты приложения, которые работают на отдельном сервере и обмениваются данными по протоколу HTTP.
    • База данных — хранит все данные приложения.

    Обратите внимание, что не все веб-приложения следуют JSP -> Сервлет -> EJB -> Модель базы данных .Большинство приложений J2EE в настоящее время написано с использованием таких фреймворков, как Struts, Spring или Hibernate. Дизайн приложений варьируется для каждого требования в зависимости от размера приложения, стоимости, времени разработки, ресурсов и размера команды.

    Тестирование приложения JAVA / J2EE

    Теперь перейдем к тестированию всего приложения J2EE. Это делается в несколько этапов. Например, предположим, что у нас есть трех экранов:

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

    Пользовательский интерфейс (пользовательский интерфейс) для этих трех экранов разработан с помощью JSP / HTML, а проверки выполняются с помощью JavaScript. Поскольку это пример приложения, логика находится в сервлете и DAO (объекте доступа к данным). DAO — это класс для подключения к базе данных.

    Ниже приведены примеры экранов:

    Ручное тестирование приложений Java:

    Во время ручного тестирования JAVA тестировщик готовит тестовые примеры из подробного проектного документа и пытается охватить каждый сценарий и фрагмент кода возможное.

    # 1) ТЕСТИРОВАНИЕ БЛОКА JAVA

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

    Давайте рассмотрим пример экрана входа в систему. Экран входа в систему имеет два текстовых поля: имя пользователя и пароль, а также две кнопки: отправить и отменить.

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

    Ниже приведен пример формата тестового примера для экрана входа в систему.

    В то время как в таблице перечислены некоторые из тестовых случаев, ниже представлен полный список:

    • Проверить любые исключения, включая исключение указателя NULL
    • Проверить, не разрешены ли NULL для имени пользователя и пароля
    • Проверить, если имя пользователя / пароль имеет правильный формат
    • Проверьте, не разрешены ли числа для имени пользователя
    • Проверьте, не разрешены ли специальные символы в имени пользователя
    • Убедитесь, что введена правильная комбинация имени пользователя и пароля, затем приложение перейдет к следующему экрану, я.е. Экран информации о сотруднике
    • Проверить правильность длины введенного имени пользователя
    • Проверить, допускает ли текстовое поле имени пользователя только максимальное количество символов, указанное для этого поля
    • Проверить, отображается ли поле пароля, если оно указано в требованиях, как * while ввод
    • Проверить, чувствительны ли пароли к регистру
    • Проверить, не чувствит ли имя пользователя к регистру
    • Проверить, не запоминает ли страница входа имя пользователя или пароль, даже после выхода
    • Проверьте, работают ли кнопки «Отправить» и «Отмена» в соответствии с требованиями
    • При первом использовании приложения проверьте, есть ли у имени пользователя разрешение на вход в приложение
    • Удалите комбинацию имени пользователя и пароля из базы данных и проверьте, не может ли эта комбинация повторно войти в систему
    • Для всех вышеуказанных случаев проверьте, отображаются соответствующие сообщения об ошибках проверки
    • Убедитесь, что метки и кнопки находятся в нужном месте на экран и правильность отображения текста
    • Проверьте, соответствует ли внешний вид экрана требованиям
    • Проверьте, обрабатываются ли исключения
    • Проверьте, ведется ли ведение журнала для требуемых действий

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

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

    Читайте также => Образцы готовых к использованию тестовых случаев и тестовых сценариев для тестирования веб-приложений.

    # 2) ТЕСТИРОВАНИЕ ИНТЕГРАЦИИ

    При тестировании интеграции отдельные модули интегрируются и тестируются вместе на правильность.

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

    Вот несколько примеров тестовых случаев интеграции для примера приложения Employee:

    • Проверьте, совпадают ли вход в систему и сеанс на всех других новых интегрированных экранах.
    • Проверьте, не обновляются ли / удаляются другие модули. / вставка любой записи в базу данных не требуется
    • Пусть будет поле статуса сотрудника, в котором написано «Новый» при добавлении, «Обновлен» при изменении и «Удален» при удалении.Хотя два или три экрана могут использовать одно и то же поле состояния, важно убедиться, что это поле не обновляется неправильно.
    • Проверить, соответствуют ли заголовок, нижний колонтитул, размер экрана и внешний вид требованиям после интеграции
    • Убедитесь, что при нажатии на кнопку «Отправить» управление передается на следующий экран
    • Убедитесь, что при нажатии на кнопку «Отмена» выполняется действие отменено

    Кроме того, общие тестовые примеры интеграции для приложения J2EE могут быть такими:

    • Проверить поток данных, объектных, XML или сеансовых, от конца до конца.Проверить правильность.
    • Проверьте, правильно ли управляет сеанс каждым из модулей
    • Если задействованы внешние приложения (веб-службы), проверьте, может ли ваше приложение выполнять вызовы и получать данные обратно из приложения

    # 3) СИСТЕМА ТЕСТИРОВАНИЕ

    При тестировании системы все приложение проверяется на функциональность и полноту в соответствии с требованиями. Вероятно, было бы проще спросить, когда выполняется модульное тестирование каждого компонента, а компоненты кода также объединяются и тестируются вместе во время интеграционного тестирования, что может отличаться в тестировании системы? Не будет ошибкой сказать, что идея системного тестирования состоит в том, чтобы сломать приложение 🙂

    Сценарий № 1: Вы разрабатываете новое приложение для сотрудников с помощью фреймворка; например, Struts.Есть также несколько других приложений, работающих на разных серверах в вашей организации. Однако все они вызывают одну и ту же существующую веб-службу для получения адреса и номера телефона любого конкретного человека.

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

    Сценарий № 2 : Ваше заявление сотрудника заполнено. Вы добавляете сотрудника, и он генерирует номер сотрудника # 1001. Вы изменяете, удаляете, обновляете, добавляете, изменяете, удаляете, добавляете, добавляете, добавляете, изменяете, удаляете и, наконец, добавляете еще один. Что делать, если номер нового сотрудника снова # 1001?

    Сценарий № 3 : Предположим, что два пользователя используют приложение одновременно.Оба они начинают работать с одним и тем же сотрудником, один удаляет. Что, если другой пользователь сможет продолжить изменение тех же сотрудников, которые хранятся в сеансе?

    Ниже приведены некоторые важные аспекты тестирования системы:

    • Обеспечение правильности потока данных и контроля от конца до конца
    • Обеспечение безопасности данных транзакций
    • Обеспечение соответствия приложения всем бизнес-функциям
    • Убедитесь, что приложение хорошо работает как конечный продукт — проверьте неработающие ссылки, управление сеансом, файлы cookie, ведение журнала, обработку ошибок, обработку исключений, проверку и поток транзакций.

    # 4) ТЕСТИРОВАНИЕ ПРОИЗВОДИТЕЛЬНОСТИ

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

    • Если несколько пользователей входят в систему одновременно, проверьте, что приложения не зависают / не завершаются
    • Если в базе данных доступен большой объем данных — проверьте, что экран поиска сеткам не требуется много времени для выполнения запросов до тайм-аута сеанса
    • В многопоточной среде проверьте, что приложение способно хорошо обрабатывать все потоки
    • В приложениях, где создается большое количество объектов, проверьте, достаточно ли выделено памяти , выполняется сборка мусора и отсутствуют исключения из-за нехватки памяти

    Заключение

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

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

    Об авторе: Это гостевая статья Падмавати С. Обладая более чем 7-летним опытом тестирования программного обеспечения, она имеет обширный опыт тестирования Java, J2EE, MVC и фреймворка Struts.

    Сообщите нам, если вы работаете над тестированием приложений JAVA. Поделитесь своим опытом и вопросами в комментариях ниже.

    PREV Tutorial | СЛЕДУЮЩИЙ Учебник

    .Модульное тестирование

    — Как протестировать метод печати в Java с помощью Junit

    Переполнение стека

    1. Около
    2. Продукты

    3. Для команд
    1. Переполнение стека
      Общественные вопросы и ответы

    2. Переполнение стека для команд
      Где разработчики и технологи делятся частными знаниями с коллегами

    3. Вакансии
      Программирование и связанные с ним технические возможности карьерного роста

    4. Талант
      Нанимайте технических специалистов и создавайте свой бренд работодателя

    5. Реклама
      Обратитесь к разработчикам и технологам со всего мира

    6. О компании

    Загрузка…

    1. Авторизоваться
      зарегистрироваться

    2. текущее сообщество

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *