Today's technology is rapidly evolving. To keep up with consumer and market trends, both hardware and software components have seen drastic improvements.
Hardware Improvements
The 21st century has seen the rise of multi-core CPUs. Content-addressable memory (CAM) has become inexpensive enough to be used in networking. CAM is a special type of computer memory used in certain very high speed searching applications. Unlike standard computer memory (random access memory or RAM) in which the user supplies a memory address and the RAM returns the data word stored at that address, a CAM is designed such that the user supplies a data word and the CAM searches its entire memory to see if that data word is stored anywhere in it. If the data word is found, the CAM returns a list of one or more storage addresses where the word was found. Because a CAM is designed to search its entire memory in a single operation, it is much faster than RAM in virtually all search applications.
CMOS logic gates have allowed computing to become a commodity which is now ubiquitous—embedded in many forms, from greeting cards and telephones to satellites. Fiber-optic and photonic devices, which already have been used to transport data over long distances, are now entering the data center—side by side with CPU and semiconductor memory components. This allows the separation of RAM from CPU by optical interconnects.
Software Improvements
Improvements in software can largely be attributed to the implementation of software development models. One example is the waterfall model . The waterfall model shows a process where software developers are to follow these phases in order:
The Waterfall Model
A diagram laying out the steps of the waterfall model for software development.
- Requirements specification (Requirements analysis)
- Software design
- Implementation and Integration
- Testing (or Validation)
- Deployment (or Installation)
- Maintenance
Reviews may occur before moving to the next phase, which allows for the possibility of changes. Reviews may also be employed to ensure that the phase is indeed complete. The phase completion criteria are often referred to as a "gate" that the project must pass through to move to the next phase. Waterfall discourages revisiting and revising any prior phase once it's complete.
Another example is the spiral model . The key characteristic of a spiral model is risk management at regular stages in the development cycle. This model combines some key aspects of the waterfall model and rapid prototyping methodologies, but provides emphasis in deliberate iterative risk analysis, particularly suited to large-scale, complex systems. The spiral is visualized as a process passing through some number of iterations, with the four-quadrant diagram representative of the following activities:
Spiral Model
A diagram laying out the steps in the spiral model of software development.
- Formulate plans to identify software targets, implement the program, clarify the project development restrictions.
- Risk analysis or assessment of selected programs, to consider how to identify and eliminate risk.
- Implementation of software development and verification.
- Plan the next iteration.
The spiral model has some restrictive conditions, as follows:
- The spiral model emphasizes risk analysis, and thus requires customers to accept this analysis and act on it. This requires both trust in the developer as well as the willingness to spend more to fix the issues, which is the reason why this model is often used for large-scale internal software development.
- If the implementation of risk analysis will greatly affect the profits of the project, the spiral model should not be used.
- Software developers have to actively look for possible risks, and analyze it accurately for the spiral model to work.
The first stage is to formulate a plan to achieve the objectives with these constraints, and then strive to find and remove all potential risks through careful analysis and, if necessary, by constructing a prototype.
A third model is known as agile software development. Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches . Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.
Agile Software Development
A poster outlining the principles of agile software development.