The choice of tools to be used in the software development process can literally make or break a project.
Once the target environment and programming language(s) is chosen, and the requirements and end
goals are well-enough understood, the next task in starting the work of a software
development project is to choose the tools that will be used throughout the process.
It's important to be aware of the types of tools that are available for use,
the benefits each can provide as well as the implications for using them.
There are a variety of tools available to aid in the software development process.
While this is by no means an exhaustive list of all the tools available in all environments,
some of the most important categories of tools are:
Integrated Debugging Environment (IDE)
The IDE is where most developers spend the majority of their day working.
It serves as a combination code editor and debugging interface. The IDE is also
an integration point for many other types of tools.
Build tools include not just the compiler and link editor that translates
the human-readable programming language statements into machine-executable
instructions, but also the capabilities of managing dependencies.
Tools to Support Methodology
Some software development methodologies lend themselves to tools that
make it easier to conform to the rules and guidelines imposed by the methodology.
For example, tools exist that allow teams to organize use cases or user stories
into time-bracketed sprints and track progress in addressing them over time.
Managing access to the source code of the project is critical in the
day-to-day work of any programming team. Concurrency must be managed so that one developer's changes don't overwrite other developers' work. Also, source control is extremely useful for creating branches/variations of the source, and merging changes between the branches. It also provides versioning and archive access to the source code as it changes over time.
Bug tracking is essential to ensuring that defects found during (and after) the development process are addressed and then re-tested. Bug trackers are often used as a primary interface with Quality Assurance.
A variety of tools exist to report on the resource utilization of a program. Profilers can analyze memory usage, input/output, and processor usage in order to help developers detect and react to problems in the way their code is executing.
Automated Deployment/Continuous Integration Tools
Modern applications can be complex to deploy. Automating (or partially-automating) this function can reduce errors and save time. By employing a policy of continuous integration, problems in integrating the various components and features worked on by each developer can be spotted quickly and then addressed while it's still fresh in the developer's mind.
Testing a software product is a key activity in assuring that it meets the requirements and is free of defects. Often it is desirable (or even policy) to create a test for every function in the program, and to run that test each time the function is modified to ensure that it produces the expected output and is free from any harmful side effects. In addition to this low-level "unit testing", testing of the program at the user interface level is necessary. Tools exist to assist in many different types of testing, and can often automate or partially-automate the task of performing each test.
There are several factors to consider when deciding which tools to utilize to aid in the development of a software project. Not all tools are necessarily appropriate for a given project, while others might be critical. Each team should consider a number of factors when deciding on the tools to use in the software development of each project.
The primary factor when deciding on whether to use a type of tool, and which implementation of that tool is the usefulness it will provide to the overall completion of the project.
Applicability to Environment
Not all tools apply to all environments. For example, a Windows desktop application will have no use for a web deployment tool.
In larger organizations, and often in smaller ones as well, use of certain tools will be mandated in order to achieve goals or to comply with established policy. Standardization of tools can help an organization move developers easily between projects as needed, and gives management an assurance that similar processes are followed among different project and project teams resulting in homogeneous product quality.
Prior Team Experience with Tool
To some degree, almost all software has a learning curve. The selection of specific tools can be influenced by the level of experience developers may already have with it. That specific experience can also be used as a resource in deciding whether a tool might be useful in the project or not, as developers usually form strong opinions on such matters and are usually not shy about expressing them.
How well a tool integrates into other tools can greatly impact the value it adds to the team and the project.
Some Integration takes the form of "convenience" integration (i.e., the source control utility integrates with the IDE such that a developer automatically causes a file to be checked out once he begins editing it). Other deeper integration merges information and responds to events between tools to deliver high value to the team and to other groups within the organization. An example of this deeper integration is where source control integrates with bug tracking which in turn integrates with incident (or customer problem) tracking. A code change checked in to source control can signal the bug tracker that a fix is available for a reported bug; that bug may be associated with an incident report, which can then be updated with the status of the work that has been done that could (eventually) resolve that incident.
All software has a learning curve, to one degree or another. Complex tools can also require time and effort to deploy with the team and integrate into existing development software. In addition to initial deployment and learning curve, many tools take some amount of time and effort to use. This overhead should be taken into account when evaluating the overall value of the tool.
The selection of tools is a critical step in the development of a software project. There is a wide variety of types of tools available — many more than have been discussed here. Within each type or category, there are many specific products to choose from. Careful selection can have a tremendous impact on the efficiency and ultimate success of the software development project.