to be a succesful candidate for an interview
But I yet haven´t seen any academy or youtube video that teaches you how to practice daily things
There are a number of reasons why this might be true, but the biggest IMO is it’s just not as “cool” to learn this part of software engineering. Here are some examples you can start digging to go learn this stuff though
Check out https://docs.travis-ci.com/ . Combined with github you can set up a completely free and complete CI system for yourself.
Another well used alternative is Jenkins. I’ve used travis more recently, both are fine from what I remember.
Architecture and Methodologies
This one’s a bit tougher to find free info online for - partly because there aren’t too many people focused on these kinds of problems (relative to the number of people on stack overflow looking for “how do I do this?”), but also largely because the space isn’t settled yet. The architectures and methodologies being used at major companies today are literally being invented as they’re being used. Some crash and burn and some work well! Time will tell which are the good ones to be replicated.
These are also two different concepts. Architecture is more about how to put the software together - there are plenty of talks at conferences about this stuff, but here is one good resources that I’ve enjoyed: https://lethain.com/staff-plus-eng-resources/
Software Methodology tries to get at the problem of how to best organize the multiple individuals building the software. Basically it’s about project management and engineering management. As a developer, you generally learn what the team’s doing and follow the processes. If you go above and beyond and learn additional possibilities, you’ll impress the crap out of your manager(s). Or piss them off if they are shitty managers lol.
There aren’t many free resources online that I’ve found because it’s a fairly small subset of people that think about these things. Most of the info I’ve learned is in the form of books. For example, “High Output Management” by Andrew Grove is excellent. Beyond that, project or product management resources will be good as well.
Look up “testing frameworks [favorite language]” and “testing best practice” and you’ll find plenty of info.
Try googling around with a few of these keywords:
- test driven development (tdd)
- test mocks
- unit testing
- integration testing
- e2e testing (end to end)
Also check out Selenium (try “selenium webdriver”). It’s the standard for automated browser testing, in addition to creating scripts with automate tasks that would otherwise require a human user at a browser.
More recently is chrome’s puppeteer if you’d like to compare an alternative.
how really testing is done on an app ready for production in a company.
Let me know if you’d like more detail about any specific part, but here’s the speedy version:
Individual developers should be responsible for manually testing any new changes they build, if that’s practical (UI changes, simple API changes, etc).
Developers are responsible for writing code that tests smaller components of the code base. For example, does the
addTwoNumbers function add correctly? What if it’s a negative number? What if you pass in
null. Does it correctly throw an exception if you accidentally pass in an object instead of a number? And so on. These things should be written alongside the code and automatically run (with the CI system!) when a change is submitted to the repository, and certainly before deployments (in a web based system).
Someone, usually a developer (sometimes an SDET for bigger teams), is responsible for writing integration tests. This assumes that all the individual components (functions, classes, etc) all do their jobs correctly individually, but an integration tests makes sure the subcomponents play well together.
End to end testing (aka E2E test, system test, and others)
Someone, usually an SDET in bigger teams, is responsible for automating user interactions with the overall system. This could mean writing some software to simulate clicking the “purchase” button on a website, and making sure they money flows through, and the product is marked for shipping (as an example).
Bigger companies will have a variety of other system in place, for example, Netflix engineering made popular the concept of their Chaos Monkey (google-able). This is software specially designed to go around and purposely disable random servers to see how the overall system would be effected. With much modern software being composed of micro-services that coordinate together, it’s essential that no single micro-service can take down the system. Each sub-system must be robust. This kind of testing checks for that in a controlled way.
Another major thing that isn’t discussed outside of professional environments is logging systems. How do you know what’s broken when it breaks? You can’t just look at the customer’s computer, so you need excellent logging systems, along with automatic metrics, dashboards, alerts, and alarms. These are all built into the professional systems.
At amazon, most teams are paged within 5 to 15 minutes of a failure of their system, and are expected to respond within 30 minutes. Much less for the bigger money systems.
This was longer than I intended, I hope it helps haha.
Feel free to let me know if I can clarify any of these, I know I rushed a bit.