In this lecture, we're going to talk about some of the unique challenges and opportunities that we have when we're performing web and mobile testing, as opposed to desktop applications. So, one of the challenges that we have is diversity. On the left side we have browsers. The nice thing is that over the last five years, browsers have become more or less compatible with one another. But there are still a fairly large number of browsers that people use, and there are many different operating system and hardware configurations. So, in order to adequately test our application, we have to examine its performance on a range of different browsers and operating system configurations. When we look at the iOS and iPhone ecosystem, the thing that we start to see is a diversity in the capabilities of the device that we're using. So, there are a handful of screen sizes. The iOS, iPhone X has a certain screen aspect, the iPhone Pluses another screen aspect, and the smaller iPhone has a different one. So, when you build user interfaces, you have to look at how the user interface looks on these different screen sizes. Not only that, but they have different cameras, different processors, iOS versions, amounts of memory. So, you need to be able to test across the diversity of platforms that you have in the Apple ecosystem. When you look at Android, the situation really explodes. Now, you have lots of different manufacturers, lots of different screen sizes and form factors, lots of different cameras, processors, versions of android, sizes, and memory, different capabilities in terms of the GPS sensing and mobile sensing. So, when you're deploying on Android devices, you really have to make sure that your application is robust to many differences that can occur within the platform. The next thing is network issues. So, when we're building mobile applications, a lot of times the user experience depends a lot on the network capabilities they have. So, when you go around the world, and when you have a range of different phones from 10 years ago up until the current day, you have just this wide range of capabilities. So, there are different networking standards for wireless 2G, 3G, 4G, and soon 5G, and each of these has an order of magnitude difference in terms of speed. So, 2G is 100 times slower than 4G. Each of these is much slower than if you have a wired connection. So, when you're testing a mobile application, it's important to think about what the user experience is going to be like if you're running on a 3G network versus a 4G network, and what kinds of information you can cache locally, so that the user has a good experience even when they're running on a slow network. The next thing is that the network is unreliable. So, it just may not be there. The user goes into a tunnel and then the network goes away, or they walk away from the wireless access point and all of a sudden the network changes. So, looking at testing how the application responds with changes in the network is very important. The final thing is that bandwidth may cost the user. So, if you're sending information all the time, you may get in a situation where you have an irate user because you're actually costing them money. Finally, there are different protocols. But, for the most part, these are hidden from the application. Related to network are other kinds of resources. So, on a phone, it's important that you don't use up all the battery. So, being able to determine how much processing you are using, and how much of the battery you're using when the application is running becomes important. Other things like memory usage and data size also matter to user community. So, being able to determine how much space at runtime, and when the application is not running become things that you want to test. So, just a recap, web and mobile testing introduces additional challenges beyond desktop testing. For desktops, most of the time you don't worry so much about space or hard disk. But with mobile devices, you really care about how much memory you're using or how much of the network bandwidth you're using. When you're doing testing, you want to look at different scenarios that the application is likely to be founded. So, things like how does the application respond with unreliable networks? How does it look on different form factors? How many resources is it using up on the platform and am I going to delight the user? Finally, when I view this content, suppose I'm on the web, when I view it on an Apple computer versus a Windows machine versus Linux, is it going to look similar? Is it going to respond the same way? So, dealing with this diversity and with the different resource limitations in the mobile space becomes an integral part of your testing responsibility.