Limited number of testing tools

One of the limitations to the growth of serverless architectures is the limited number of testing and deployment tools. This is anticipated to change as the serverless field grows, and there are already some up-and-coming tools that have helped with deployment. I anticipate that cloud providers will start offering ways to test serverless applications locally as services. Azure has already made some moves in this direction, and AWS has been expanding on this as well. NPM has released a couple of testing tools so you can test locally without deploying to your provider. Some of these tools include node-lambda and aws-lambda- local. One of my current favorite deployment tools is the serverless Framework deployment tool (https://serverless.com/framework/). It is compatible with AWS, Azure, Google, and IBM. I like it because it makes configuring and deploying your function to your given provider incredibly easy, which also contributes to a more rapid development time. 

Integration testing of your serverless applications is hard. As with the FaaS environment, you depend on external resources to maintain state. You need to make sure your integration tests cover these scenarios as well. Typically, as there are not a lot of solutions out there where you can run these external resources locally, people stub these external resources for the purpose of integration testing. The challenge will be in making sure that the stubs that you create are always in sync with the implementation of the external resources and some vendors may not even provide a stubbed implementation for their resources.

To ensure that your functions works, integration tests are usually run on production-like environments with all the necessary external resources in place. As our functions are very small compared to traditional infrastructure, we need to rely more on integration testing to ensure that our functions run optimally.