Articles related to software development

Financial Technology Software Development

Best software development practices

Most software projects fail. In reality, the Standish group reports that over 80% of jobs are unsuccessful because they’re over budget, late, missing function, or a blend. Also, 30% of software projects are so poorly executed that they are canceled before completion. In our expertise, applications projects using modern technologies like Java, J2EE, XML, and Web Services are no exception to this rule.
This article includes a summary of best practices for software development jobs. Business luminaries such as Scott Ambler, Martin Fowler, Steve McConnell, and Karl Wiegers have recorded many of these best practices online and they are referenced in this article. See the Related information section at the end of this article. The companion article, Guide to Running Software Development Projects, describes the top ten variables that help enhance the success of your project.
Best software development practices
1. Development procedure – It’s important because all other actions are derived from the procedure to pick the development lifecycle process that is proper to the software project at hand. Over a waterfall process, some kind of spiral-based methodology is used for most modern software development jobs. Having a procedure is better than not having one at all, and in many cases it’s less important than how well it is implemented on what procedure is used,. The generally used methodologies listed above all feature guidance about the best way to implement the procedure and templates for artifacts.
2. Requirements – Gathering and concurring on requirements is essential to a successful software project. This does not automatically entail that all requirements have to be fixed before any architecture, design, and coding but it really is essential for the software development team to realize what has to be built. Quality requirements are broken up into two kinds: functional and nonfunctional. A good means to record functional requirements is using Use Cases. An authoritative publication on the matter of use cases is by Armour and Miller [5]. Non-functional requirements describe the functionality and system features of the program. It’s important to collect them because they have a major impact on the software architecture, design, and functionality.
3. Architecture – Picking the appropriate design for your software  is crucial. Many times we’ve found that the software development team didn’t implement well-known architecture best practices.Practices that are tried and true are called patterns and they range from the classic Gang of Four [6] patterns, Java designs [7], to EJB design patterns [8]. The equivalent of Sun is the Core J2EE Patterns catalogue [9]. Many software projects fail as discussed in the introduction. The study of these failures has given rise to the notion of antipatterns. They’re valuable because they provide useful knowledge of what doesn’t work, and why.
4. Design – Even with a superb software architecture it really is still possible to have a lousy layout. Many programs are over-designed or under-designed. Reuse is one of the great promises of OO, but it’s often unrealized because of the added effort needed to create reusable assets. Code reuse is but one form of reuse and there are other kinds of reuse that can supply better productivity increases.
Agile teams are under pressure to deliver working. They’re additionally available to their customers for possibly radical requirements changes at any stage in the endeavor. They and their code must be capable of turning on a dime at any moment. So agile teams put tremendous value on the extensibility of their code: the extent to which they can easily maintain and expand it. Elsewhere we discuss how refactoring that is important is to keeping code extensible. The other vital component of extensibility is code design ease. Extensibility seems to be inversely proportional to design complexity.
In any agile context, straightforward design means, to paraphrase the poet Wallace Stevens, “the art of what suffices.” It means programming for today’s prerequisites that are stated, and more. It means doing more with less. But this isn’t always a natural disposition for us programmers.
But the truth about layout intricacy of all kinds is that we often find that technologies or the additional abstractions don’t become wings that free us, but rather shackles that bind us. Whatever additional stuff we add, we’re indeed clamping to our legs, to lug around then from feature to feature, from iteration to iteration, and from release to release. There are mountains of distressing old lessons behind this maxim.
5. Construction of the code – Construction of the code is a fraction of the overall software project effort, but it’s often the most observable. Requirements, architecture, analysis, design, and test are included by other work important. In endeavors with no software development process (so-called “code and fix”), these jobs are also occurring, but under the guise of programming. A best practice for building code comprises the daily build and smoke test. Martin Fowler goes one step further and suggests continuous integration that also integrates the concept of self and unit tests -testing code. Note that even though continuous integration and unit tests have gained popularity through XP, you can use these best practices on all types of endeavors. I advocate using frameworks that are standard to automate builds and testing, such as JUnit and Ant.
Which is to say, it is easier for them to keep the flaws in the code to really low levels, and hence more easy for them to add features, make changes, and still produce very low-defect code every iteration.
After experimenting with different ways to keep upward evaluation coverage at those optimum amounts, agile teams hit upon the practice of Test-First programming. Test-First programming demands creating automated unit tests for production code, before that production code is written by you. Instead of writing evaluations afterward (or, more usually, not ever writing those evaluations), you always start with an unit test. This evaluation might not even compile, in the beginning, because not all the classes and methods it requires may exist. Nevertheless, it functions as a kind of executable specification. (Occasionally you expect it to fail, and it passes, which is beneficial info.) You subsequently make just as much code as will empower that test to pass.
6. Pair Programming – It is vital that you review other people’s work. Experience has provided evidence for that difficulties are removed before this way and reviews are powerful or more effective than testing. Any artifact from the software development procedure is reviewed, including test cases, and strategies, requirements, structure, design, code. Peer reviews are helpful in trying to create software quality at top speed.
Research results and anecdotal reports seem to show that short-term productivity might fall modestly (about 15%), but because the code generated is so much better, long-term productivity goes up. And definitely it is dependent upon how you measure productivity, and over what period. In an agile context, productivity is frequently quantified in running, tested features truly delivered per iteration and per release.
Definitely as a mechanism that is mentoring, pairing is tough to beat. If pairs switch off consistently (as they should), pairing disperses knowledge throughout the team with great efficacy.
7. Testing – Testing is not cutback or an afterthought when the program gets tight. It’s also important that testing is done proactively; test cases are developed while the program is being designed and coded, and significance that test cases are planned before coding starts. Additionally, there are several testing routines which were developed.
8. Performance testing – Testing is generally the last resort to catch program flaws. It generally just catches coding flaws and is labor intensive. Design and architecture flaws may be missed. One method to get some architectural defects is to mimic load testing on the program before it is deployed and to take care of performance issues before they become problems.
9. Continuous Integration – Traditional software development approaches do’t order how frequently or regularly you integrate all the source on a software project. Programmers can work individually for hours, days, or even weeks on the same source without recognizing how many conflicts (and maybe bugs) they are creating. Agile teams, because they are producing robust code each iteration, generally find they are slowed down by the long diff- resolution and debugging sessions that frequently occur at the ending of long integration cycles. The more the code is being shared by programmers, the more problematic this is. For these reasons, agile teams frequently consequently choose to use Continuous Integration.
Agile teams generally configure CI to contain source control integration, unit test execution, and automated compilation. Sometimes CI also comprises automatically running automated approval tests for example those developed using FitNesse.
10. Quality and defects direction – It’s crucial that you establish launch standards and quality priorities for the software project so that a strategy is built to help the team achieve quality applications. As the job is coded and analyzed, fix speed and the defect coming can help measure the maturity of the code. It is important that a defect tracking system is used that is linked to the source control management system. For example, jobs using Rational ClearCase may also use Rational ClearQuest. By using defect tracking, it is not impossible to gauge when a software project is prepared to release.
11. Code Refactoring – refactoring is the process of simplifying and clarifying the layout of existing code, without changing its behavior. This is because un-refactored code has a tendency to rot. Rot takes several kinds: unhealthy addictions between classes or packages, lousy allotment of class duties, way too many duties per method or group, duplicate code, and many other varieties of confusion and clutter.
Every time code changes without refactoring it, rot worsens and spreads. Us frustrates, costs us time, and unduly shortens the lifespan of useful systems.
Refactoring code ruthlessly prevents rot, keeping the code simple to maintain and expand. This is the measure of its success and the reason to refactor. But notice that it is only “ safe” to refactor the code this widely if we’ve got wide-ranging unit test suites of the type we get if we work Evaluation-First. We run the risk of introducing bugs, without being able to run those tests after each little step in a refactoring. If you’re doing true Test-Driven Development (TDD), in which the design evolves constantly, then you’ve got no choice about regular refactoring, since that’s how you develop the layout.
12. Deployment – Deployment is the final stage of releasing an application for users. If you get this far in your software project – congratulations! However, there are still things that can FAIL. You should plan for deployment and a deployment checklist can be used by you on the Construx Web site.
13. System operations and support – Without the operations section, you cannot deploy and support a brand new program. The support area is an essential component to react and resolve user problems. To ease the flow of difficulties, the support issue database is hooked into the program defect tracking system.
14. Data migration – Most applications aren’t brand new, but are rewrites or improvements of existing applications. Data migration from the present data sources is typically a significant endeavor by itself. This isn’t a software project for your junior programmers. It is as important as the new program. Generally the new application anticipates higher quality data and has business rules that are better. Improving the quality of data is a complex matter outside the scope of this article.
15. Project management – Many of the other best practice places described in this post are related to project management and an excellent project manager is conscious of the existence of these best practices. Our recommended bible for project management is Rapid Development by Steve McConnell [14]. One method to manage a job that is difficult is through timeboxing.