Test Engineer
800+ Test Engineer Interview Questions and Answers
Q1. 1. What is the frame work u have worked and explain the framework with folder structure? 2. purely based on testing, different testing types like functional and non functional tests 3. real time scenarios like...
read moreTest Engineer interview questions on frameworks, testing types, bug tracking, and regression testing.
Worked with Selenium framework with folder structure of test cases, test data, and page objects
Functional testing includes smoke, sanity, and regression testing while non-functional testing includes performance and security testing
Real-time scenario: prioritize and fix critical bugs first, communicate with stakeholders, and perform thorough testing before release
Integration te...read more
Q2. Consecutive Characters Problem Statement
Given a matrix of lowercase characters with dimensions 'N' rows and 'M' columns, and a string 'STR', your goal is to find the longest consecutive character path length f...read more
Find the longest consecutive character path length for each character in a matrix given a string.
Iterate through the matrix and for each character in the string, find the longest consecutive path in all 8 directions.
Keep track of the current path length and update the maximum path length found so far.
Ensure that the characters in the path are consecutive in alphabetical order.
Return an array of the longest consecutive path lengths for each character in the string.
Test Engineer Interview Questions and Answers for Freshers
Q3. What problems did we face in the old generation video game console?
Old generation video game consoles faced various problems.
Limited processing power and memory
Low-quality graphics and sound
Limited game storage capacity
Lack of online connectivity
Compatibility issues with newer TVs
Limited multiplayer options
Q4. what is a type of testing? What are the principles?
A type of testing is functional testing which tests the functionality of the software.
Functional testing checks if the software meets the requirements and specifications
It involves testing individual functions or features of the software
Examples include unit testing, integration testing, system testing, and acceptance testing
Q5. Remove Duplicates Problem Statement
You are given an array of integers. The task is to remove all duplicate elements and return the array while maintaining the order in which the elements were provided.
Example...read more
Remove duplicates from an array of integers while maintaining the original order.
Use a set to keep track of unique elements while iterating through the array.
Add elements to the set if they are not already present, and add them to the result array.
Return the result array with unique elements in the original order.
Q6. What is sdlc,stlc,smoke,sanity, regression,test strategy,test plan, Rtm, defect density, defect life cycle, functional, load testing, analytical questions,
Answering common questions related to software testing
SDLC - Software Development Life Cycle
STLC - Software Testing Life Cycle
Smoke testing - preliminary testing to check if the software is stable enough for further testing
Sanity testing - quick testing to check if the major functionalities are working as expected
Regression testing - testing to ensure that changes made to the software do not affect existing functionalities
Test strategy - a plan for how testing will be carried...read more
Share interview questions and help millions of jobseekers 🌟
Q7. #Introduction 1. What is White box testing, Black box testing, Grey box testing? 2. Explain Bug Life cycle? 3. What is Deferred? 4. Open Flipkart application, Search for Some product eg, phone, Write the test c...
read moreInterview questions for Test Engineer position covering topics like testing types, bug life cycle, constructors, locators, and priority/severity.
White box testing is testing the internal structure of the application, black box testing is testing the functionality without knowledge of internal structure, and grey box testing is a combination of both.
Bug life cycle includes stages like new, open, assigned, fixed, verified, and closed.
Deferred means postponing the bug fix to a l...read more
Q8. What are the different types of automation testing?
The different types of automation testing include unit testing, functional testing, integration testing, regression testing, and performance testing.
Unit testing focuses on testing individual components or units of code.
Functional testing verifies that the software meets the specified functional requirements.
Integration testing checks the interaction between different components or modules of the software.
Regression testing ensures that changes or updates to the software do n...read more
Test Engineer Jobs
Q9. In a transformer, if the primary side current is 50A and the voltage is 400V, what is the secondary side current if the secondary voltage is 10V?
The current through the secondary side of a transformer can be calculated using the turns ratio.
The turns ratio of a transformer is the ratio of the number of turns in the primary winding to the number of turns in the secondary winding.
The current in the primary and secondary windings of a transformer is inversely proportional to the turns ratio.
To calculate the current in the secondary winding, use the formula: I2 = (I1 * V1) / V2, where I1 is the current in the primary wind...read more
Q10. Explain the difference between ArrayList and LinkedList in Java. ArrayList is implemented as a dynamic array, while LinkedList is a doubly linked list. ArrayList provides fast random access (O(1) complexity) bu...
read moreArrayList offers fast access and is memory efficient, while LinkedList excels in insertions and deletions.
ArrayList uses a dynamic array, allowing O(1) access time for elements.
LinkedList uses a doubly linked structure, enabling O(1) insertions/deletions at both ends.
Example: Use ArrayList for a list of user IDs where frequent access is needed.
Example: Use LinkedList for a playlist where songs are frequently added or removed.
Memory overhead is higher in LinkedList due to extr...read more
Q11. How is game testing different from software testing?
Game testing differs from software testing in terms of scope, complexity, and user experience.
Game testing involves testing the functionality, performance, and usability of video games.
Software testing focuses on testing the functionality and performance of software applications.
Game testing requires specialized knowledge of game mechanics, graphics, audio, and user interactions.
Software testing typically involves testing business logic, data processing, and user interfaces.
G...read more
Q12. How would you initiate a test with limited knowledge of the requirements?
Initiating a test with less knowledge in requirement
Start by analyzing the available information and identifying the critical areas to be tested
Collaborate with the development team to gain a better understanding of the system
Use exploratory testing techniques to uncover potential issues
Create test cases based on the information gathered and execute them
Continuously learn and update your knowledge as you test
Q13. Can you explain the difference between method overloading and method overriding in Java? Method overloading allows multiple methods with the same name but different parameters. It occurs within the same class a...
read moreMethod overloading allows multiple methods with the same name but different parameters, while overriding changes a parent method's implementation.
Method Overloading: Same method name, different parameters (e.g., `int add(int a, int b)` and `double add(double a, double b)`)
Method Overriding: Subclass provides a specific implementation of a method defined in its superclass (e.g., `void sound() { System.out.println('Dog barks'); }` in Dog class overriding Animal class's `sound()...read more
Q14. Explain the difference between ArrayList and LinkedList in Java. Which one would you choose in a real-world scenario, and why?
ArrayList is dynamic and index-based, while LinkedList is node-based and allows efficient insertions/deletions.
ArrayList: Uses a dynamic array to store elements. Example: String[] arr = new ArrayList<>();
LinkedList: Uses a doubly linked list structure. Example: String[] arr = new LinkedList<>();
ArrayList provides faster random access (O(1)) due to index-based access.
LinkedList provides faster insertions/deletions (O(1)) when adding/removing elements at the beginning or end.
Ar...read more
Q15. Describe the differences between checked and unchecked exceptions in Java. Checked exceptions must be handled using try-catch or declared with throws. Unchecked exceptions (RuntimeException and its subclasses)...
read moreChecked exceptions require handling; unchecked exceptions do not. Custom exceptions can be either based on use case.
Checked exceptions must be declared or handled (e.g., IOException).
Unchecked exceptions do not require explicit handling (e.g., NullPointerException).
Checked exceptions are used for recoverable conditions, while unchecked indicate programming errors.
Custom exceptions can be created for specific application needs.
Custom exceptions can be checked or unchecked base...read more
Q16. Explain the concept of immutability in Java and its advantages. An immutable object cannot be changed after it is created. The String class is immutable, meaning modifications create new objects. Immutable obje...
read moreImmutability in Java ensures objects cannot be modified after creation, enhancing safety and consistency in multi-threaded environments.
Immutable objects cannot be changed once created, e.g., String class in Java.
Thread-safe: Since they cannot be modified, they prevent issues in multi-threaded applications.
Prevent unintended side effects, making code easier to understand and maintain.
To create an immutable class, use final fields and avoid setter methods.
Collections can be ma...read more
Q17. Explain the Singleton design pattern in Java. Singleton ensures that only one instance of a class exists in the JVM. It is useful for managing shared resources like database connections. A simple implementation...
read moreSingleton pattern ensures a class has only one instance, providing a global access point for shared resources.
Private constructor prevents instantiation from outside the class.
Static instance variable holds the single instance of the class.
Lazy initialization creates the instance only when needed.
Eager initialization creates the instance at class loading time.
Thread safety can be achieved using synchronized methods or blocks.
Double-checked locking reduces synchronization over...read more
Q18. AUTOMATION - Explain the Singleton design pattern in Java. Singleton ensures that only one instance of a class exists in the JVM. It is useful for managing shared resources like database connections. A simple i...
read moreSingleton pattern ensures a class has only one instance, providing a global point of access to it.
Private constructor prevents instantiation from outside the class.
Static instance variable holds the single instance of the class.
Lazy initialization creates the instance only when needed.
Eager initialization creates the instance at class loading time.
Thread safety can be achieved using synchronized methods or blocks.
Double-checked locking reduces synchronization overhead for per...read more
Q19. Explain the concept of immutability in Java and its advantages. How does immutability relate to the Flyweight design pattern?
Immutability in Java ensures objects cannot be modified after creation, enhancing thread safety and consistency.
Immutable objects cannot be changed after creation, e.g., String class.
Thread-safe: Multiple threads can access immutable objects without synchronization issues.
Prevents unintended side effects in multi-threaded applications.
To create an immutable class, use final fields and avoid setters.
Collections can be made immutable using Collections.unmodifiableList().
Useful ...read more
Q20. How do Java Streams handle parallel processing, and what are its pitfalls? What techniques can be used to optimize parallel stream performance?
Java Streams enable parallel processing but have pitfalls like overhead and shared state issues. Optimization techniques exist.
Java Streams can be parallelized using the 'parallelStream()' method, which splits tasks across multiple threads.
Pitfall: Overhead from thread management can outweigh benefits for small datasets.
Pitfall: Shared mutable state can lead to race conditions and unpredictable results.
Use 'ForkJoinPool' to manage parallel tasks more efficiently.
Optimize by e...read more
Q21. What are functional interfaces in Java, and how do they work with lambda expressions? A functional interface is an interface with exactly one abstract method. Examples include Runnable, Callable, Predicate, and...
read moreFunctional interfaces in Java enable lambda expressions for concise code, supporting API evolution with default methods.
A functional interface has exactly one abstract method, e.g., Runnable, Callable.
Lambda expressions provide a shorthand way to implement functional interfaces.
Functional interfaces can include multiple default or static methods.
The @FunctionalInterface annotation ensures only one abstract method is present.
Method references (::) allow referencing existing me...read more
Q22. What are Java annotations, and how are they used in frameworks like Spring? Annotations provide metadata to classes, methods, and fields. @Override, @Deprecated, and @SuppressWarnings are common built-in annota...
read moreJava annotations provide metadata for classes, enhancing code readability and maintainability, especially in frameworks like Spring.
Annotations serve as metadata, providing additional information about classes, methods, and fields.
Common built-in annotations include @Override, @Deprecated, and @SuppressWarnings.
Spring framework uses annotations like @Component and @Service for defining beans and @Autowired for dependency injection.
Annotations reduce boilerplate code compared ...read more
Q23. What are the main features of Java 8? Java 8 introduced lambda expressions, enabling functional-style programming. The Stream API allows efficient data processing with map, filter, and reduce operations. Defaul...
read moreLambda expressions enhance Java code readability and maintainability by simplifying syntax and promoting functional programming.
Concise Syntax: Lambda expressions reduce boilerplate code. For example, instead of writing an anonymous class for a Runnable, you can use: `Runnable r = () -> System.out.println("Hello");`
Improved Readability: Code becomes easier to read and understand. For instance, using `list.forEach(item -> System.out.println(item));` is clearer than using a for...read more
Q24. What is a Java Stream, and how does it differ from an Iterator? Streams enable functional-style operations on collections with lazy evaluation. Unlike Iterators, Streams support declarative operations like filt...
read moreParallel streams enhance performance but come with trade-offs like complexity and overhead in multi-threaded environments.
Increased complexity: Debugging parallel streams can be more challenging than sequential streams.
Overhead: Parallel streams introduce overhead due to thread management and context switching.
Data contention: Shared mutable data can lead to race conditions and inconsistent results.
Performance gains: For large datasets, parallel streams can significantly redu...read more
Q25. What is the difference between == and .equals() in Java? == checks for reference equality, meaning it compares memory addresses. equals() checks for value equality, which can be overridden in user-defined class...
read more== checks reference equality; .equals() checks value equality, can be overridden for custom comparison.
== compares memory addresses, while .equals() compares actual object content.
Example: new String("hello") == new String("hello") returns false, but "hello".equals("hello") returns true.
For wrapper classes like Integer, small values (-128 to 127) are cached, affecting == behavior.
Override equals() when logical equality is needed, especially in collections.
When overriding equa...read more
Q26. What is the difference between final, finally, and finalize in Java? final is a keyword used to declare constants, prevent method overriding, or inheritance. finally is a block that executes after a try-catch,...
read morefinal, finally, and finalize serve different purposes in Java: constants, cleanup, and garbage collection respectively.
final: Used to declare constants. Example: final int MAX_VALUE = 100;
finally: Block that executes after try-catch. Example: try { ... } catch { ... } finally { cleanup(); }
finalize(): Method called by garbage collector. Example: protected void finalize() { ... }
final variable cannot be reassigned. Example: final String name = 'John'; name = 'Doe'; // Error
fin...read more
Q27. What is the Java Memory Model, and how does it affect multithreading and synchronization? The Java Memory Model (JMM) defines how threads interact with shared memory. It ensures visibility and ordering of varia...
read moreThe Java Memory Model defines thread interactions with memory, ensuring visibility and ordering in multithreaded environments.
JMM specifies how threads read and write shared variables, ensuring visibility and ordering.
Volatile keyword ensures that changes to a variable are visible to all threads immediately.
Synchronized blocks provide mutual exclusion, preventing multiple threads from accessing critical sections simultaneously.
Without synchronization, threads may read stale o...read more
Q28. AUTOMATION - What are Java annotations, and how are they used in frameworks like Spring? Annotations provide metadata to classes, methods, and fields. @Override, @Deprecated, and @SuppressWarnings are common bu...
read moreJava annotations provide metadata for classes, enhancing code readability and maintainability, especially in frameworks like Spring.
Annotations like @Component and @Service simplify bean management in Spring.
Dependency injection is streamlined with @Autowired, reducing boilerplate code.
Custom annotations can encapsulate common behaviors, improving code clarity.
Annotations like @Transactional manage database transactions declaratively.
Retention policies ensure annotations are ...read more
Q29. AUTOMATION - What is the difference between final, finally, and finalize in Java? final is a keyword used to declare constants, prevent method overriding, or inheritance. finally is a block that executes after...
read morefinal, finally, and finalize serve different purposes in Java: constants, cleanup, and garbage collection respectively.
final: Used to declare constants. Example: final int MAX_VALUE = 100;
finally: A block that executes after try-catch. Example: try { /* code */ } catch { /* handle */ } finally { /* cleanup */ }
finalize(): A method called by the garbage collector. Example: protected void finalize() { /* cleanup code */ }
final variable: Cannot be reassigned after initialization...read more
Q30. How does the Java garbage collector work? Garbage collection in Java automatically reclaims memory occupied by unused objects. The JVM has different types of GC algorithms, including Serial, Parallel, CMS, and...
read moreJava's garbage collector reclaims memory from unused objects, optimizing performance and managing memory regions.
Garbage collection is automatic, freeing developers from manual memory management.
The heap is divided into Young Generation (short-lived objects) and Old Generation (long-lived objects).
Minor GC occurs in the Young Generation, while Major GC (Full GC) affects the Old Generation, causing longer pauses.
CMS (Concurrent Mark-Sweep) minimizes pause times by performing s...read more
Q31. What are the advantages and disadvantages of using Java’s synchronized keyword for thread synchronization? The synchronized keyword ensures that only one thread can access a block of code at a time. It prevents...
read moreJava's synchronized keyword offers simplicity for thread safety but can lead to performance issues and deadlocks.
Prevents race conditions by allowing only one thread to access a block of code at a time.
Can lead to performance bottlenecks due to thread blocking and context switching.
May cause deadlocks if multiple threads are waiting on each other for locks.
Starvation can occur if a thread is perpetually denied access to a resource.
ReentrantLock offers more control with method...read more
Q32. AUTOMATION - How do Java Streams handle parallel processing, and what are its pitfalls? Parallel streams divide data into multiple threads for faster processing. The ForkJoin framework handles parallel executio...
read moreJava Streams enable parallel processing using ForkJoin framework, but have pitfalls like race conditions and debugging challenges.
Use parallel streams for CPU-intensive tasks to leverage multiple cores effectively.
Avoid using parallel streams for small datasets as overhead may outweigh benefits.
Be cautious of shared mutable state to prevent race conditions; prefer immutable data structures.
Use forEachOrdered() for order-sensitive operations, but be aware it may negate paralle...read more
Q33. How do Java Streams handle parallel processing, and what are its pitfalls?
Java Streams enable parallel processing using ForkJoin framework, but have pitfalls like race conditions and debugging challenges.
Use parallel streams for CPU-intensive tasks to leverage multiple cores effectively.
Avoid using parallel streams for small datasets as overhead may negate performance benefits.
Be cautious with shared mutable state to prevent race conditions; prefer immutable data structures.
Use forEachOrdered() for order-sensitive operations, but be aware it may re...read more
Q34. How do Java Streams handle parallel processing, and what are its pitfalls? Parallel streams divide data into multiple threads for faster processing. The ForkJoin framework handles parallel execution internally....
read moreJava Streams enable parallel processing using ForkJoin framework, but have pitfalls like race conditions and performance issues with small datasets.
Use parallel streams for CPU-intensive tasks to leverage multiple cores.
Avoid shared mutable state to prevent race conditions; use immutable data structures.
Consider using 'collect()' with a concurrent collector for thread-safe operations.
Use 'forEachOrdered()' for order-sensitive operations, but be aware of performance trade-offs...read more
Q35. 1.How does quality control differ from quality assurance? 2. What is Software Testing? 3. Why is Software Testing Required? 4. What are the two main categories of software testing? 5. What is quality control? ....
read moreA Test Engineer should know the difference between quality control and quality assurance, the importance of software testing, its categories, and types of manual testing.
Quality control is the process of identifying defects in the final product, while quality assurance is the process of preventing defects from occurring in the first place.
Software testing is the process of evaluating a software product to detect differences between existing and required conditions and to eval...read more
Q36. What are the different types of waits in Selenium?
Different types of waits in Selenium include implicit wait, explicit wait, and fluent wait.
Implicit wait: Waits for a certain amount of time before throwing an exception if an element is not immediately available.
Explicit wait: Waits for a specific condition to be met before proceeding with the next steps.
Fluent wait: Waits for a certain condition to be satisfied with a defined polling frequency.
Examples: Thread.sleep(5000) for a static wait, WebDriverWait for explicit wait, ...read more
Q37. What should be the test cases for a music player?
Test cases for a Music Player
Test playback of different file formats
Test volume control functionality
Test shuffle and repeat options
Test playlist creation and management
Test search functionality
Test interruption handling (e.g. phone call)
Test compatibility with different headphones/speakers
Test battery consumption
Test user interface and user experience
Q38. Different Annotations in TestNG, Collections in java, Xpath for a check box in a table which is before the username, what is Maven, Jenkins CI/CD tool, Different browsers on which you automated
The question covers TestNG annotations, Java collections, Xpath, Maven, Jenkins, and browser automation.
TestNG annotations include @Test, @BeforeTest, @AfterTest, etc.
Java collections include ArrayList, HashMap, HashSet, etc.
Xpath is used to locate elements in XML or HTML documents.
Maven is a build automation tool used for Java projects.
Jenkins is a CI/CD tool used for continuous integration and delivery.
Different browsers for automation include Chrome, Firefox, Safari, etc.
To measure 4 liters using a 3-liter mug and a 5-liter mug, fill the 3-liter mug, pour it into the 5-liter mug, refill the 3-liter mug, pour it into the 5-liter mug until it is full, leaving 1 liter in the 3-liter mug.
Fill the 3-liter mug and pour it into the 5-liter mug.
Refill the 3-liter mug and pour it into the 5-liter mug until it is full, leaving 1 liter in the 3-liter mug.
Q40. What is Regression and will you do it on every release ?
Regression is retesting of previously tested functionality to ensure that changes made to the software have not affected it.
Regression testing is done to ensure that new changes or fixes have not introduced new bugs or issues.
It is not necessary to do regression testing on every release, but it should be done on critical functionality or areas that have been changed.
Regression testing can be done manually or through automation tools like Selenium.
Examples of regression testin...read more
Q41. If a ticket you tested results in a production issue, how would you handle that situation?
I would analyze the root cause of the production issue, communicate with the team, and work on a solution to fix the problem.
Analyze the root cause of the production issue
Communicate with the team to understand the impact and collaborate on a solution
Work on fixing the problem and retesting the solution before deploying it to production
Q42. What is a string? How to make "Zycus" string to "Zycus Infotech" in Java?
A string is a sequence of characters. To make 'Zycus' string to 'Zycus Infotech' in Java, concatenate the two strings.
Use the '+' operator to concatenate the two strings.
Create a new string variable and assign the concatenated value to it.
Example: String str1 = 'Zycus'; String str2 = ' Infotech'; String result = str1 + str2;
Q43. What is RPA and how do you expect to solve the issues other than RPA if it's not in your skills list?
RPA stands for Robotic Process Automation. It is a technology that uses software robots to automate repetitive tasks.
RPA can help reduce errors and increase efficiency in tasks such as data entry and report generation.
If RPA is not an option, other solutions such as process optimization or manual task delegation may be considered.
As a test engineer, I would work with the development team to identify the root cause of any issues and propose appropriate solutions.
For example, i...read more
Q44. Do you know about agile methodology? What is your strength? Do you use Jira
Yes, I am familiar with agile methodology and use Jira. My strength lies in test automation.
I have experience working in agile teams and following agile principles
I am comfortable using Jira for project management and issue tracking
My strength is in test automation, where I have expertise in tools like Selenium and Appium
I am also skilled in manual testing and have experience in creating test plans and test cases
Q45. Defect lifecycle, moratorium, what is NTC Customer, What is NPA, WHEN LOAN BECOMES NPA, Regression testing, Functional testing, corporate loan.
Questions related to defect lifecycle, moratorium, NTC Customer, NPA, regression testing, functional testing, and corporate loan.
Defect lifecycle refers to the stages a defect goes through from discovery to resolution.
Moratorium is a temporary suspension of an activity.
NTC Customer refers to a customer who has been declared as 'Not Traceable, Customer' by the bank.
NPA stands for Non-Performing Asset, a loan that has not been serviced for a certain period of time.
Regression te...read more
Q46. How will you plan the testing for the released build?
I will plan testing by analyzing the requirements, identifying test scenarios, creating test cases, and executing them.
Analyze the requirements and identify test scenarios
Create test cases based on the identified scenarios
Execute the test cases and report defects
Perform regression testing to ensure the fixes do not break existing functionality
Collaborate with the development team to resolve issues
Ensure the testing is completed within the given timeline
Q47. How would you handle a defect leakage?
Defect leakage can be handled by identifying the root cause, fixing the issue, and implementing preventive measures.
Identify the root cause of the defect leakage
Fix the issue causing the defect leakage
Implement preventive measures to avoid future defect leakage
Conduct thorough testing to ensure the defect has been resolved
Communicate the resolution and preventive measures to the team and stakeholders
Q48. Tell in detail about the telecom technologies
Telecom technologies refer to the various technologies used in the telecommunications industry to transmit and receive information.
Telephony: The technology of transmitting voice signals over long distances.
Wireless Communication: The transmission of information without the use of physical connections.
Internet Protocol (IP): The protocol used for transmitting data packets over the internet.
Fiber Optics: The use of thin strands of glass or plastic to transmit data as pulses of...read more
Possible test cases for a login page
Verify valid username and password combination
Verify invalid username and password combination
Verify login with empty username field
Verify login with empty password field
Verify login with special characters in username or password
Verify login with incorrect case sensitivity in username
Verify login with incorrect case sensitivity in password
Q50. What are the phases involved in Software Testing Life Cycle? What are the different methods of testing? What are the different levels of testing? Explain Bug Life Cycle or Defect life cycle. What is a test case...
read moreSoftware Testing Life Cycle involves phases like planning, designing, executing, and reporting. Different methods and levels of testing are used.
Phases in Software Testing Life Cycle: Planning, Test Design, Test Execution, Test Reporting
Different methods of testing: Unit Testing, Integration Testing, System Testing, Acceptance Testing
Different levels of testing: Unit Testing, Integration Testing, System Testing, Acceptance Testing
Bug Life Cycle or Defect Life Cycle: New, Assi...read more
Interview Questions of Similar Designations
Top Interview Questions for Test Engineer Related Skills
Interview experiences of popular companies
Calculate your in-hand salary
Confused about how your in-hand salary is calculated? Enter your annual salary (CTC) and get your in-hand salary
Reviews
Interviews
Salaries
Users/Month