Home Blog Page 4

How Dropbox leverages testing to keep up excessive stage of belief at scale | by Jose Alcérreca | Android Builders | Apr, 2025


That is half 2 of the Testing at scale collection of articles the place we requested business specialists to share their testing methods. On this article, Ryan Harter, Workers Engineer at Dropbox, shares how the form of Dropbox’s testing pyramid modified over time, and what instruments they use to get well timed suggestions.

With multiple billion downloads, the Dropbox app for Android has to keep up a top quality bar for a various set of use instances and customers. With lower than 30 Android engineers, guide testing and #yolo isn’t sufficient to keep up confidence in our codebase, so we make use of quite a lot of totally different testing methods to make sure we are able to frequently serve our customers wants.

Since Dropbox makes it simple to entry your information throughout all your units, the Android app has to help viewing as lots of these information as attainable, together with media information, paperwork, images, and all the variations inside these classes. Moreover, options like Digicam Uploads, which routinely backs up all your most essential images, require deep integration with the Android OS in ways in which have modified considerably over time and throughout Android variations. All of this wants to repeatedly work for our customers, with out them having to fret in regards to the complexity, as a result of the very last thing anybody desires is to fret that they may lose their information.

Whereas the dimensions and distribution of the Android crew at Dropbox has modified all through the years, it’s crucial that we’re in a position to constantly construct and refine options inside the app whereas sustaining the extent of belief from our customers that we’ve change into identified for. To assist underscore how Dropbox has been in a position to foster that belief, I’d prefer to share some ways in which our testing methods have modified over time.

Whereas automated testing has at all times been an essential a part of engineering tradition at Dropbox, it hasn’t at all times been simple on Android. Years in the past Dropbox invested in testing infrastructure that leaned closely on Finish-to-Finish (E2E) testing. Constructed on Android’s instrumentation assessments, we developed check helpers for options within the app following the check robotic sample. This enabled a big suite of assessments to be created that might simulate a person shifting all through the app, however got here with its personal vital prices.

Like many Android initiatives on the time, the Dropbox app began out as a monolithic app module, however that wasn’t sustainable in the long term. Work was performed to decompose the monolith right into a extra modular structure, however the E2E check suite wasn’t prioritized on this effort as a result of advanced interaction of dependencies. This left our E2E check suite as a monolith of its personal, leading to check code that didn’t exist alongside the characteristic code it exercised, permitting them to simply be missed and change into outdated.

Moreover, the lengthy construct occasions that include monolithic modules with many dependencies combined with the assessments being executed on emulators in our customized steady integration (CI) setting meant that the suggestions cycle for these E2E assessments was gradual. This resulted in engineers feeling incentivised to take away failing assessments as an alternative of updating them.

Because the Android ecosystem embraced automated testing an increasing number of, with the introduction of useful libraries like Espresso, Robolectric, and help for unit testing constructed immediately into Gradle, Dropbox saved up with these modifications by shifting from the heavy reliance on E2E assessments in direction of an increasing number of unit assessments, filling out the underside layer of the beforehand inverted testing pyramid. This was a big win for check protection inside the app, and allowed us to roll out high quality assurance practices like code protection baselines, to make sure that we frequently improved the reliability of the product because it moved ahead.

Over time, as unit testing grew to become simpler and simpler and engineers grew to become an increasing number of pissed off with the gradual suggestions cycles of E2E assessments, our testing pyramid grew to become lopsided within the different route. We had confidence in our unit assessments and the infrastructure supporting them, however our E2E assessments aged with out a lot help, changing into an increasing number of unreliable, to the purpose that we principally ignored their failures. Exams that may’t be trusted find yourself changing into a upkeep burden and supply little worth, so we acknowledged that one thing wanted to alter.

Over the previous yr we’ve doubled down on our deal with reliability. We’ve invested in our check infrastructure to make sure that engineers will not be solely in a position to, however incentivised to jot down priceless assessments throughout all layers of the testing pyramid. Along with technical funding in code and tooling, that has additionally required that we take the time to judge the issues we check, and the way we check them, and ensure your entire crew has a greater understanding of which instruments to make use of when.

Unit testing

We proceed to spend most of our efforts writing unit assessments. These are quick, targeted assessments that present fast suggestions, and function our first line of protection in opposition to regressions. We write JUnit assessments at any time when we are able to, and fall again to instrumentation assessments when we have to. Robolectric’s interoperability with AndroidX Take a look at has allowed us to maneuver lots of our instrumentation assessments to JVM-based unit assessments, making it even simpler to fulfill our check protection targets.

Talking of check protection targets, the unit testing layer is the solely layer that we use to find out our code protection. By default we goal 80% check protection, although we’ve a course of to override this goal for circumstances by which unit testing is both not priceless, or infeasible.

  • Observe: Whereas we use commonplace JaCoCo tooling to judge our check protection, its lack of deep understanding of Kotlin presents some challenges. As an example, we haven’t but discovered a strategy to inform JaCoCo that the generated accessors, toString and hashcode of behaviorless information courses don’t require check protection. We’ve been experimenting and contemplating options to make sure that we’re not writing brittle assessments that don’t present worth, however for now we’re caught with issuing protection overrides for these instances.

E2E testing

Over the previous a number of months we’ve been renewing funding in our automated E2E check suite. This check suite is ready to alert us to extraordinarily essential points that unit assessments merely can’t establish, like OS integration points or surprising API responses. Due to this fact we’ve labored onerous to enhance our infrastructure to make assessments simpler for engineers to run regionally, we’ve audited and eliminated flaky or invalid assessments, and labored on documentation and coaching to make sure that we help our engineers within the creation and upkeep of our E2E check suite.

Change in E2E check counts earlier than and after check suite enchancment effort.

As I discussed above, our E2E assessments simulate a person shifting all through the app. Which means the duty of defining our E2E check instances is greater than merely an engineering downside. Due to this fact, we developed steerage to assist engineers work with product and design companions to outline check instances that characterize true use instances.

We just lately launched a follow of utilizing a correct Definition of Completed for growth work. This quantities to a guidelines of things that should be accomplished to ensure that a challenge to be thought-about “performed”, which is outlined and agreed upon initially of the challenge. Our commonplace guidelines consists of the declaration of E2E check instances for the challenge, which ensures that we’re including check instances in a considerate method, bearing in mind the worth and objective of these assessments, as an alternative of concentrating on arbitrary protection numbers.

Screenshot testing

One other dimension of our assessments that we’ve ramped up lately is screenshot testing. Screenshot assessments enable us to validate in opposition to visible regressions, guaranteeing that views render correctly in gentle and darkish mode, totally different orientations, and totally different type elements.

In unit assessments we leverage Paparazzi for screenshot testing. This enables us to jot down quick, remoted assessments and we discover it’s greatest suited to testing particular person view or composable layouts, together with our design system parts.

We additionally discover worth executing screenshot assessments in additional full featured instrumentation assessments. For this, we use our personal Dropshots library, which helps screenshot testing on units and emulators. Since Dropshots executes screenshot assessments on actual (or emulated) units, it’s an effective way to validate system integrations like edge-to-edge show, the default window mode on Android 15 units.

Handbook testing

With all the funding we’ve made into automated testing you’d be forgiven for pondering that we do no guide testing, however even immediately that’s merely not possible. There are various workflows for which automated assessments would both be too onerous to jot down, or too onerous to validate. For instance, we’ve each unit and E2E assessments to validate that the app behaves appropriately when rendering file content material, however it may be onerous to programmatically validate file content material, and screenshot assessments can generally show too flaky.

For these instances, we use an online based mostly check case administration instrument to keep up an entire set of guide check instances, and a 3rd celebration testing service to execute the assessments prior to every launch. This enables us to catch points for which we haven’t but written assessments, or which require human judgement.

Testing has confirmed invaluable in figuring out high quality points earlier than they make it to customers, permitting us to earn our buyer’s belief. Provided that worth, we intend to proceed investing in testing to make sure that we are able to proceed to keep up prime quality and reliability. There are some things that we’re wanting ahead to sooner or later.

I’m at present within the strategy of increasing the performance of Dropshots to help a number of system configurations, which can enable us to carry out screenshot assessments throughout a broad vary of units with a single set of assessments. For the reason that Dropbox app works throughout many alternative type elements, will probably be priceless for us to concurrently run our screenshot check suite on quite a lot of units or emulators to stop regressions on much less frequent type elements.

Moreover, we’re starting to experiment with Compose Preview Screenshot Testing, which permits our Compose Preview features to serve double obligation by dashing up growth cycles whereas additionally getting used to guard in opposition to regressions.

Lastly, we intend to proceed guaranteeing that we’ve a great steadiness of the best sorts of assessments. Balancing our testing pyramid to make sure that our funding in testing serves our reliability targets as an alternative of chasing arbitrary protection targets. We’ve already seen the worth {that a} wholesome check suite can present, and we’ll proceed investing on this space to make sure that we proceed to be worthy of belief.

Starship Applied sciences surpasses 8M autonomous deliveries

0


chart illustrating Starships growth in deliveries per year.

Starship reached the 8M deliveries milestone in early 2025. | Credit score: Starship Applied sciences

Starship Applied sciences Inc. final week introduced that its methods have accomplished greater than 8 million autonomous deliveries and traversed over 10 million miles globally. The San Francisco-based firm’s sidewalk robots have change into a well-known sight for 1000’s of consumers worldwide, delivering groceries, meals, and different provides.

“Whereas many robotics corporations are nonetheless launching pilot initiatives with simply a few robots or constructing their first prototypes, we’ve confirmed ourselves as a real-world answer,” acknowledged Ahti Heinla, co-founder and CEO of Starship. “With hundreds of thousands of deliveries behind us, we’re not simply imagining the long run — we’re already working in it.”

Based in 2014 by Skype co-founders Heinla and Janus Friis, the firm has quietly established itself as a frontrunner within the sidewalk supply robotic class. Starship mentioned its newest achievement, with over 2,000 robots working at SAE Degree 4 autonomy throughout greater than 150 areas in six international locations, underscores its sustained development and technological development.

Starship is a number one autonomy supplier

Whereas most sidewalk supply robotic suppliers don’t disclose their supply volumes, Starship mentioned its scale is spectacular even when put next with leaders in adjoining sectors.

chart illustrating starships 8M deliveries vs uber and zipline.

Starship has steadily grown its fleet of autonomous robots. | Credit score: Starship Applied sciences

Supply robotic market nonetheless scaling

The worldwide marketplace for supply robots might increase at a 64% compound annual development price (CAGR) between 2022 and 2032, reaching 4.7 million energetic robots by the tip of the last decade, based on Transforma Insights.

Because the autonomous car panorama continues to evolve, Starship touted its 8 million deliveries, which contain crossing 125,000 roads and driveways per day or about two crossings per second.

The corporate additionally mentioned it has targeted on sustainability, with its electrical robots utilizing about the identical quantity of power in a mean supply as boiling a small kettle of water. Starship mentioned its robots have saved over 500 tons of CO2 from getting into the ambiance in Europe, offering a substitute for getting groceries with vehicles.


SITE AD for the 2025 Robotics Summit registration.
Register now so you do not miss out!


Cloudbrink pushes SASE boundaries with 300 Gbps information heart throughput



These core elements are functionally desk stakes and don’t actually serve to distinguish Cloudbrink towards its myriad opponents within the SASE market. The place Cloudbrink seems to be to distinguish is at a technical degree by a sequence of improvements together with:

  1. Distributed edge structure: The corporate has decoupled software program from {hardware}, permitting their platform to run throughout 800 information facilities by leveraging public clouds, telco networks and edge computing infrastructure. This strategy reduces community latency from 300 milliseconds to between 7 and 20 milliseconds, the corporate says. This density dramatically improves TCP efficiency and responsiveness.
  2. Protocol optimization: Cloudbrink developed its personal algorithms for SD-WAN optimization that deliver enterprise-grade reliability to final mile hyperlinks. These algorithms considerably enhance effectivity on shopper broadband connections, enabling enterprise-grade efficiency over customary web hyperlinks.
  3. Built-in safety stack: “We’ve been in a position to produce safe speeds at line fee on our platform by bringing safety to the networking stack itself,” Mana famous. Moderately than treating safety as a separate overlay that degrades efficiency, Cloudbrink integrates safety capabilities instantly into the networking stack.

The answer consists of three core elements: shopper software program for person gadgets, a cloud administration airplane, and non-compulsory information heart connectors for accessing inner purposes. The shopper intelligently connects to a number of edge nodes concurrently, offering redundancy and application-specific routing optimization.

Cloudbrink expands world attain

Past its efforts to extend throughput, Cloudbrink can also be rising its world footprint. Cloudbrink at present introduced a worldwide enlargement by new channel agreements and the opening of a Brazil workplace to serve rising markets in Latin America, Korea and Africa. The enlargement consists of unique partnerships with WITHX in Korea, BAMM Applied sciences for Latin America distribution and OneTic for African markets.

The corporate’s software-defined FAST (Versatile, Autonomous, Sensible and Momentary) Edges expertise allows fast deployment of factors of presence by leveraging current infrastructure from a number of telcos and cloud suppliers.

Trying ahead: Safe, versatile connectivity (not AI)

As enterprises proceed to embrace hybrid work fashions, Cloudbrink is positioning itself as a next-generation answer. The corporate plans to proceed increasing its safe entry capabilities, with a selected deal with bettering public web connection safety. Notably, the corporate takes a measured strategy to AI, utilizing it strategically for connection optimization fairly than treating it as a advertising buzzword.

“We’re a bunch of sensible folks and operators… in fact, we use all the brand new algorithms which might be at our disposal, however there’s simply an excessive amount of round generative AI, it’s a way to an finish,” Mana stated. “No level in simply throwing that buzzword round for the heck of it. In order that’s what we attempt to resist ourselves from simply taking that simple route and simply giving generative AI as a solution to all the things.”

Swift Apprentice: Fundamentals | Kodeco


This can be a guide for full inexperienced persons to Apple’s fashionable programming language — Swift.

All of the code within the guide works within Xcode’s easy-to-use playgrounds.
Meaning you may concentrate on core Swift language ideas, resembling lessons, protocols,
and generics, as an alternative of getting slowed down within the particulars of constructing apps.

This can be a companion guide to the SwiftUI Apprentice;
the SwiftUI Apprentice focuses on constructing apps, whereas Swift Apprentice focuses
on the Swift language itself.

This can be a guide for full inexperienced persons to Apple’s fashionable programming language — Swift.

All of the code within the guide works within Xcode’s easy-to-use playgrounds. Meaning you may concentrate on core Swift language ideas, resembling lessons, protocols, and generics with out getting slowed down by extraneous particulars.

This…


extra

This part tells you a number of issues you want to know earlier than you get began, resembling what you’ll want for {hardware} and software program, the place to search out the undertaking recordsdata for this guide and extra.

The chapters on this part will introduce you to the very fundamentals of programming in Swift. From the basics of how computer systems work as much as language buildings, you’ll cowl sufficient of the language to have the ability to work with information and set up your code’s conduct.

The part begins with some groundwork to get you began.
Upon getting the essential information sorts in your head, it’ll be time to do issues with that information, and eventually, you’ll find out about an important information sort, optionals, that allow you to categorical probably lacking information.

These fundamentals will get you Swiftly in your method, and earlier than you recognize it, you’ll be prepared for the extra superior subjects that observe. Let’s get began!

That is it, your whirlwind introduction to the world of programming! You’ll start with an outline of computer systems and programming after which say whats up to Swift playgrounds, the place you’ll spend your coding time for the remainder of this guide.
You’ll be taught some fundamentals, resembling code feedback, arithmetic operations, constants and variables. These are a few of the basic constructing blocks of any language, and Swift is not any completely different.

You’ll find out about dealing with differing types, together with strings that let you signify textual content.
You’ll find out about changing between sorts and get an introduction to sort inference, which simplifies your life as a programmer.
You’ll find out about tuple sorts which let you group values of any sort collectively.

You’ll discover ways to make choices and repeat duties in your packages utilizing syntax to manage the circulation.
You’ll additionally find out about Booleans, which signify true and false values, and the way you need to use these to check information.

Persevering with the theme of code not working in a straight line, you’ll find out about one other loop referred to as the `for` loop. You’ll additionally find out about swap statements which can be significantly highly effective in Swift.

Capabilities are the essential constructing blocks you employ to construction your code in Swift. You’ll discover ways to outline capabilities to group your code into reusable items.

This chapter covers optionals, a particular sort in Swift representing both a worth or the absence of a worth. By the tip of this chapter, you’ll know why you want optionals and the way to use them safely.

To date, you’ve largely seen information within the type of single components. Though tuples can have a number of items of knowledge, it’s a must to specify the dimensions upfront; a tuple with three strings is a very completely different sort from a tuple with two strings, and changing between them isn’t trivial. On this part, you’ll find out about assortment sorts in Swift. Collections are versatile “containers” that allow you to retailer any variety of values collectively.

There are a number of assortment sorts in Swift, however three necessary ones are arrays, dictionaries and units. You’ll be taught to use customized operations and loop over assortment sorts. Lastly, you’ll revisit strings, that are collections of characters.

All the gathering sorts share comparable interfaces however have very completely different use instances. As you learn by way of these chapters, preserve the variations in thoughts, and also you’ll start to develop a really feel for which sort you need to use when.

Arrays are the most typical assortment sort you’ll run into in Swift that preserve an ordered record of components of the identical sort. Alternatively, Dictionaries allow you to lookup components effectively utilizing a key. Lastly, Units preserve an unordered assortment of distinctive components. You’ll be taught all about these three sorts on this chapter.

Upon getting collections of things, you’ll want to carry out operations with them.
For instance, type them, filter them, add them up, and many others. Swift offers you a robust
language assemble, the closure, that allows you to infinitely customise the conduct
of such operations. On this chapter, you’ll find out about Swift’s commonest
assortment algorithms and customise them with closures.

Textual content processing is an important software for any pc language, and String is Swift’s powerhouse sort for textual content dealing with. Strings are bi-directional collections of Character sorts that steadiness correctness, efficiency and ease of use.

Looking for patterns in textual content is a standard job you will encounter in your programming travels. Swift offers an influence sort referred to as Regex to carry out that job. Utilizing customary syntax, you may categorical difficult matching patterns to extract data from textual content. You should utilize an all-new regex builder syntax for improved compile-time help, which maximizes readability and readability.

You’ll be able to create your personal sort by combining variables and capabilities into a brand new sort definition. Whenever you create a brand new sort, you give it a reputation; thus, these customized sorts are referred to as named sorts. Buildings are a robust software for modeling real-world ideas. You’ll be able to encapsulate associated ideas, properties and strategies right into a single, cohesive mannequin.

Swift contains 4 sorts of named sorts: buildings, lessons, enumerations and protocols. You’ll be taught right here how different named sorts use the ideas of strategies and properties, how they differ, and the place you wish to use every.

You’ll additionally find out about protocols & generics, that are sorts and strategies that take as enter different sorts as an alternative of simply strategies, in addition to customized sorts to construct bigger and sophisticated issues!

The usual library has many helpful sorts like Int, Double and String. Nevertheless, it sadly doesn’t embody a Pizza sort. Buildings are sorts that may retailer named properties and outline actions and behaviors. On this chapter, you’ll outline your customized construction sorts and start constructing a Pizza empire.

On this chapter, you’ll find out about saved and computed properties, together with some methods, resembling the way to monitor adjustments in a property’s worth and delay the initialization of a saved property.

Strategies are merely capabilities that reside in a construction. You’ll look intently at how strategies and initializers enable you to construct full-featured, customized sorts.

Buildings allow you to outline your personal named sorts with customized properties and strategies. On this chapter, you’ll get acquainted with lessons, that are very like buildings however have necessary variations that make them a useful addition to your toolbox.

This chapter continues with class sorts describing how Swift helps the standard ideas of inheritance and polymorphism. Additionally, you will find out about two-phase class initialization that you will want to construct correct class hierarchies. This dialogue will lay the inspiration for utilizing these ideas with Swift’s worth sorts.

On this chapter, you’ll find out about enumerations, a sort that teams associated, mutually unique case values. You’ll additionally find out about uninhabited sorts and eventually uncover what an non-compulsory is beneath the hood.

Protocols are a sort that may bridge widespread behaviors between structs,
lessons, and enums by defining an interface or template for an precise concrete sort. Protocols allow polymorphism throughout all sorts and overcome the only inheritance limitation you noticed with lessons.

On this chapter, you’ll be taught what generics are, the way to write generic code, and loop again and take a look at the generic sorts in Swift – dictionaries, arrays, and optionals – from this new perspective.