Software Development Life Cycle and the Need for Testing Software

When designing an application with an access control component, or software to configure and run an access control device such as a programmable lock or biometric device, it is not enough to simply test the finished product. Testing should be built into the entire software development life cycle. Why put such an emphasis on testing, rather than features or bugs? Tests are the only way for software developers to really know how their software will perform under various circumstances, such as a range of good and bad inputs, or normal and high numbers of users connected concurrently.

Writing test cases also forces the developer to think like an attacker and anticipate all the possible data an attacker could put into the software in an attempt to break through the access control system. By thinking like an attacker, the developer can build checks into the codebase so that it handles bad data correctly instead of crashing or responding unpredictably. Not every system crash is the result of a malicious attack. Sometimes, bad data are the result of a legitimate user who simply mistypes his or her password. Regardless of the reason behind bad data, access control software should handle it gracefully. Writing test cases early and often during the entire development life cycle helps ensure that the software is robust enough to handle a wide variety of normal and abnormal situations.

There are seven distinct phases in the software development life cycle:

  • Planning
  • Requirement analysis
  • Software design
  • Development or coding
  • Testing and integration
  • Release and training
  • Support

Agile software development methods make extensive use of automated testing throughout the development life cycle. When developing in an agile method, you write the test suite for your software first, during the early stages. During the planning, requirements analysis, and software design phases, tests are a tool for accurately defining requirements. During the development phase, tests are used as a coding tool—when the tests pass, you know you’re finished. Tests are also run frequently during development to ensure that new code does not break existing parts of the application. Because functional tests have been run continuously throughout the cycle, the testing and integration phase is reserved for user acceptance training, although the automated test suite is usually still run periodically, just to be safe. Finally, during the release and training phase and the support phase, automated tests that run hourly in the background help pinpoint problems with the software and will often alert developers to issues before the users encounter them.

The software development life cycle is shown in FIGURE 12-1. The figure depicts the cycle as a continuous, looping process. Once software is developed and released, future refinements and upgrades require the cycle to start again.

A flow diagram explains the software development life cycle

FIGURE 12-1 The software development life cycle.

Security features should be an integral part of each phase in the cycle, as you will see in the following sections.

Planning

The planning stage is where the stakeholders in any given software project meet to brainstorm what the software should do. It is important that the stakeholders have an awareness of security issues and access controls so that the project does not begin with an inherently insecure concept.

During the planning stage, high-level requirements are defined, and an initial project plan is worked out. At this stage, the project plan will not be very fleshed out, except for plans for the requirements analysis stage.

Requirements Analysis

Once the high-level goals for a software project are defined, those goals need to be translated into formal requirements. Formal requirements list each of the major functions of the software product as well as its inputs and outputs.

The deliverables for this stage will be a formal requirement document and an updated project plan. At this stage, areas that should be considered from a security point of view, such as user authentication and authorization, should be noted.

Software Design

Once formal requirements have been laid out, system architects and software engineers can begin to design the low-level functions that will make up the final product. At this stage, specific access control measures should be designed into the software.

At the end of the software design phase, all the major questions surrounding the implementation of the product should be answered.

Development

During the development phase, programmers write and test the actual code that makes up a piece of software. This is the stage where security features are implemented and sometimes flaws or weaknesses make their way into the final product. To prevent unintended security flaws, unit testing should be done continuously throughout the development stage.

Testing and Integration

In the testing and integration phase, the finished software should undergo full system integration testing to ensure that all of the pieces of the software work together properly. The software must also be tested to ensure that it works well with the rest of the system—the operating system, other applications, and back-end database. The primary goal during this phase is to make sure the new software doesn’t break any existing system.

During this phase, the system should also undergo load testing, which measures how the software will perform with an average number of users, as well as how it will perform under extreme load conditions. For example, if the organization estimates that 50 users will use the access control system concurrently, it should be load tested with 50 users, 100 users, or even 190 users. This proves that the system can handle both an average load and double or triple that load. Load testing is normally performed using specialized load testing packages that simulate the activity of normal users. If an organization does not use load testing often enough to justify purchasing and configuring a load testing system, it is possible to obtain load testing services from consulting firms as needed.

Release and Training

During the release and training phase, the software is deployed to production servers, and employees are trained on how to use it. This is an important opportunity to educate them on the importance of security and access controls in their workday.

Support

The support phase of any software project is where most security flaws come out. When the software is in production and being used every day, weaknesses and flaws will begin to surface. During the support phase, you will begin the cycle again as you plan for upgrades and security patches. Although upgrades and patches will not have the same scope as the initial development, they still follow the same basic software life cycle.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.17.186.247