I’m working as a QE Automation Engineer for a retailer on a mobile app. We use cucumber/rspec for automating tests. The “framework team” designs and maintains the basic structure that we use for building and running our tests. Our QE team builds our own classes to access the various services that we use to get data from the retailer’s backend. For example, getting promotion data, signing on/off the site, adding/updating the shopping cart, etc.
A new group recently started managing the framework and mandated a change which I believe is fundamentally flawed and I’d like to know if I’m off-base or not. Here’s the deal.
We used to maintain our service classes in a single directory, something like
If the backend changed, we would restructure the class to take the changes into account. We would do this even if the backend service itself changed, such as being replaced by a new service providing equivalent data.
Now we are required to move our service modules to a new location (and thus redefine the calling signature) if the backend service changes. So if we go from service ‘AAA’ to service ‘BBB’, we now have to move
to recognize the new service as well as the version that this service is currently on!
Note that these new services are often internal to the retailer – not outside services. They are simply upgrading their capability and offering new features… constantly.
The framework guy says things like:
- This new structure is easier for newbies to use
- If they change the basic service then we should change our QE interface
- We can only protect against breaking changes at the minor level, not the major level
I say that this new structure guarantees we will have to accept breaking changes under almost every conceivable change in the backend. And newbies should first use the service and then – if there’s a problem – go digging for more information. And what about documentation (e.g., Yardoc) which we should but don’t have…
In my mind, this way lies madness. I’ve already seen three major version changes in one service (in 16 months) and now that service is going away and being replaced by other services. And this discussion is only about the basic API structure, we haven’t scratched the surface regarding “true” data hiding by wrapping the calls and returning s “standard” data structure where ever possible.
Am I just not understanding this issue?