Galvanizing a Definition
We polled some of the top influencers in software development and asked them how they would define these key industry terms. If you disagree or have input on any of the below statements we encourage you to email us to chime in! We'll include your definition on the site.
"Unit testing is an isolated verification of a single component within a larger system. The first verification ensures that the component works under all possible inputs, without relying on other components functionality. The second verification ensures that the component's API is well designed and easy to integrate into the larger system."
"If you want to sleep well, write quality software with unit tests. It's a great tool to get you to the next level as a software engineer."
"Unit testing: code that executes production code in a way that ensures its functionality and prevents regressions. The best unit tests adhere to the Right-BICEP principle defined by Dave Thomas and Andy Hunt. When an engineer writes unit tests before writing the corresponding production code, that code is said to be "test-driven." In addition to the aforementioned benefits of unit testing, test-driven development (TDD) can also help produce more readable, concise, and robust production code."
Unit testing is testing the singular components of your system in insolation from the system. It helps to verify that given a certain input, a predictable and expected output is received. Using TDD with unit tests to drive out functionality of a component will help ensure that the final code is not only correct but also readable and not overly complex.
Unit testing is the building block of test driven development. It involves testing functionality within the scope of a single class or component. All public interfaces for a class should be tested, though specifics about their implementations need not be.
Agile: great products are created by collaborative, empowered teams that work with their customers, utilizing value-driven delivery, adaptive planning and continuous improvement techniques.
Alternatively... Agile: See where you are. Figure out the next small step. Go.
"I always tend to look at any methodology or tool set as an attempt to help solve problems, potentially serious problems. So my definition starts with what problems are we trying to solve by using an agile methodology. At our company, Menlo Innovations, we specifically wanted to address the problem of "human suffering as it relates to technology". We see three broad forms of suffering that agile approaches can help with:
1st: The suffering of people (we call them sponsors & champions) who pay for software to be built and have regularly suffered because they have had little hope of steering their projects to successful conclusion before money and executive patience are exhausted. Too often, loads of money is spent and there is no tangible result that solves some important business problem. Just as often, projects are cancelled with no results delivered whatsoever. Sometimes a project is delivered, but the resulting effort makes thing worse than before the project began. By engaging sponsors more actively and responsibly, giving them frequent check-in points, demonstrating incremental results, and involving them in the decision-making process for prioritization of feature design and development, agile can greatly increase the chance of success of any project.
2nd: The suffering of end users of software, who far too often, have no voice at all in the user experience design and yet must suffer every day with the decisions of people they will never meet. We have created at our company, a parallel agile design process, which we call High-tech Anthropology®, that relies on the Lean principle of "Gemba walks" to study users in their native environment and using the same incremental approach to user experience design that broader agile practices use for software development. The result can be user experiences that delight rather than increase suffering.
3rd: The suffering of the people who make up software teams who typically labor under years of overtime, missed vacations, and unrealistic expectations only to hear one day that the project they've worked so hard to complete has been cancelled. W. Edwards Demming said it best when he said "all anyone ever asked for is a chance to work with pride". We believe agile practices, when adhered to, believed in, and supported throughout an organization, from CEO on down, create a sustained opportunity to deliver incredible quality on a sustained and consistent basis. In our 15 years of adhering to and believing in our agile approach, we have suffered exactly ONE software emergency. This stuff really works."
"Agile: a set of best practices that, when employed by highly skilled individuals have been proven over time and across many team configurations to produce quality software on time and within budget."
"The world is constantly changing and our software needs to change with it. Refactor as a habit and your software will be easy to change."
"Refactoring is a constant conversation between the team in order to balance the ease of extensibility of the application, and the need to complete features. In general they are driven by various code "smells." As with any smells, they may not be a sign of an actual problem, but they maybe symptoms nonetheless. It is up to the team to identify particularly egregious code smells, and gauge whether or not they pose a true problem to extensibility, new engineer understanding, performance, or any of the myriad of other goals, both personal, and business facing that a developer wants to fulfill."
"Refactoring: the process of improving one's code in structure, length, organization, or design without changing the underlying functionality of that code. Refactoring must be done in a test-driven manner to achieve best results."