November 20, 2010

Relevance of the issues and solutions addressed in Brooks classic paper on No Silver Bullet Essence and Accident in Software Engineering

In this article, Brooks has mentioned several problems related to software engineering and the traditions that can be taken to implement and resolve the issues arise. He believes the hard part in the construction of the software is not the labor of representing it and testing the fidelity of the representation, it is the specification, design, and testing of the conceptual construct.

Further more he has classified in-built properties of modern software systems into four sections.
  • Complexity

According to Brooks, expanding of a software unit is an increase in the number of different elements, not just a reiteration of the equal elements in larger sizes. In most scenarios, all the elements interact with each other in a non-linear manner and the complication of all the elements as a whole boost much more than linearly.

Below table depicts the set of problems and the effects arise from the complexity of a software.
Problem
Effect
Communication
  • Product flaws
  • Cost overruns
  • Schedule delays
Understanding all possible states of a program
  • Unreliability
Functional complexity
  • Less usability of the program
Complexity of structure
  • Difficulty in extending programs to new functions
  • Creates side effects
  • Un-visualized states constitute security trapdoors
Management problem
  • Makes overview hard
  • Impede conceptual integrity
  • Learning and understanding burden makes personnel turnover a disaster

Above areas mentioned by Brooks are still applicable in today’s context. In the software development industry earlier many products failed due to the complexity issues. Further more the complexity of the structure will also affect to the system maintenance as well. Currently, these complexity problems are decreased by using agile development methodology concepts. For example, in some agile development methodologies uses small teams which is manageable and effective communication with the customers. So it may reduce most of the communication problems mentioned by Brooks. And also functional complexity and the complex structure of the software are reduced by providing weekly or twice a week releases as per agile concepts in today’s context.

  • Conformity

Brooks says other fields must conform because they are perceived as the most conformable, but the software must conform since it is the most recent arrival on the scene. In all cases, much complexity comes from conformation to other interfaces and this complexity cannot be simplified out by any redesign of the software alone. This conformity is still applicable to today’s context.

  • Changeability

Brooks also states that software is constantly subject to force for transform whereas manufactured possessions are infrequently altered after manufacture. When software product is found useful, people try to use it in different ways and also in different domains, so this needs changeability of the software. Further more he points out that according to the construction of new computers, disks, and printers, the existing software should also needs to be changed to adapt to the change of the hardware’s.

This changeability is also still applicable to today’s context. Most of the time customers do not know what they exactly needs. So they keep changing the requirements. And also after a product is developed and if it is not usable, there is no point in developing such software, so changing gives more value to the product.


  • Invisibility


Software products mainly differ from the real world products from its un-visualizability. Brooks states that the software has no ready geometric representation like land has maps; silicon chips have diagrams, and computers have connectivity schematics. When we try to diagram software structure we generally constitute general directed graphs which mainly represent the flow of data, dependency pattern, time sequence and name-space relationships. These graphs are less hierarchical. Indeed, one of the ways of establishing conceptual control over such structure is to enforce link cutting until one or more of the graphs becomes hierarchical. As per my understanding this point that Brooks has mentioned is applicable to any time, either for today’s context as well as the future.

Next, we will identify the three steps in software development which hit difficulties in building software, which is accidental, not essential in past years described by Brooks.

  • High-level languages

One technology that has made significant improvement in the area of accidental complexity was the invention of high-level languages. The progressive use of high-level languages will increase software productivity, reliability, and simplicity. High-level language frees a program from much of its accidental complexity. High-level language can also furnish all the constructs that the programmer imagines in abstract program. And also the language development approaches are closer and closer to the complexity of users.

Today's languages, such as C, C++, C# and Java, are considered to be improvements, but not of the same order of magnitude as stated by Brooks. These languages are being more portable across platforms. Greater abstraction and hiding of details is generally intended to make the language user-friendly, as it includes concepts from the problem domain instead of those of the machine used. With the growing complexity of modern microprocessor architectures, well-designed compilers for high-level languages frequently produce code efficiently.

  • Timesharing


Even though this doesn’t give a large effect as high-level language, but this provides a major improvement in the productivity of programmers and in the quality of their products. Time-sharing preserves immediacy, and enables one to maintain an overview of complexity.

Internet has brought the general concept of time-sharing back into popularity in today’s world. Expensive corporate server farms costing millions can host thousands of customers all sharing the same common resources. As with the early serial terminals, websites operate primarily in bursts of activity followed by periods of idle time. This bursting nature permits the service to be used by many website customers at once, and none of them notice any delays in communications until the servers start to get very busy.

  • Integrated Program Development Environments (IDE)

This provides a platform for individual programs together, by providing integrated libraries unified file formats, and pipes and filters which improves productivity by essential factors.

In today’s context, there are improvements occur to the IDE’s. There is growing interest in visual programming. Visual IDEs allow users to create new applications by moving programming building blocks or code nodes to create flowcharts or structure diagrams which are then compiled or interpreted. These flowcharts often are based on the Unified Modeling Language. Some IDEs support multiple languages, such as Eclipse or NetBeans; both are based on Java or based on C#.

This article also describes several solutions to the problems that were discussed above. Brooks has identified the below technical developments as solutions that are most often advanced as potential silver bullets.

·        Ada and other high-level language advances
·        Object Oriented programming (OO programming)
·        Artificial Intelligence (AI)
·        Expert systems
·        Automatic programming
·        Graphical programming
·        Program verification
·        Environments and tools
·        Workstations

These solutions have major impact in addressing software engineering issues during past 20 years.
The 1980s brought advances in programming language implementation like Ada and other high-level language advances. In 1990’s many "rapid application development" (RAD) languages emerged, which usually came with an IDE, garbage collection, and were descendants of older languages. All such languages were object-oriented. These included Object Pascal, Visual Basic, and Java and C #. Java in particular received much attention. More radical and innovative than the RAD languages were the new scripting languages. Many consider these scripting languages to be more productive than even the RAD languages, but often because of choices that make small programs simpler but large programs more difficult to write and maintain. Nevertheless, scripting languages came to be the most prominent ones used in connection with the Web.

OO Programming was not commonly used in mainstream software application development until the early 1990. Many modern programming languages now support OOP. Most commercially important recent object-oriented languages are Visual Basic.NET (VB.NET) and C#, both designed for Microsoft's .NET platform, and Java, developed by Sun Microsystems. Both frameworks show the benefit of using OOP by creating an abstraction from implementation in their own way. VB.NET and C# support cross-language inheritance, allowing classes defined in one language to subclass classes defined in the other language. Java runs in a virtual machine, making it possible to run on all different operating systems. VB.NET and C# make use of the Strategy pattern to accomplish cross-language inheritance, whereas Java makes use of the Adapter pattern.

In the 1990s and early 21st century, Artificial Intelligence achieved its greatest successes. The success was due to several factors: the incredible power of computers today, a greater emphasis on solving specific sub-problems, the creation of new ties between AI and other fields working on similar problems, and above all a new commitment by researchers to solid mathematical methods and rigorous scientific standards.

Expert systems are most valuable to organizations that have a high-level of know-how experience and expertise that cannot be easily transferred to other members. They are designed to carry the intelligence and information found in the intellect of experts and provide this knowledge to other members of the organization for problem-solving purposes.

Automatic programming is successful in addressing the software engineering issues in past 20 years. IDEs such as Eclipse, Interface Builder and Microsoft Visual Studio have more advanced forms of source code generation, with which the programmer has the ability to interactively select and customize "snippets" of source code, which increases the productivity of the programmer.

Current developments try to integrate the graphical programming approach with dataflow programming languages to either have immediate access to the program state resulting in online debugging or automatic program generation and documentation. Dataflow languages also allow automatic parallelization, which is likely to become one of the greatest programming challenges of the future.

At present, program verification is used by most leading hardware companies, but its use in the software industry is still languishing. This could be attributed to the greater need in the hardware industry, where errors have greater commercial significance. Because of the potential subtle interactions between components, it is increasingly difficult to exercise a realistic set of possibilities by simulation.

Workstations have changed within past 20 years. Workstation has included class PC with some of the following features: support for ECC memory, a larger number of memory sockets which use registered (buffered) modules, multiple processor sockets, sophisticated CPUs (for Intel CPU it will be server derived Xeon instead of typical for PCs Core), multiple displays, run reliable operating system with advanced features and high performance graphics card (i.e. Nvidia's professional Quadro instead of games-oriented GeForce)

Moreover Brooks describes the attacks that address the essence of the software problem, the formulation of these complex conceptual structures.

  • Buy versus build

Many project teams have faced the time when they need to make a major decision. Should one try to custom build a solution or buy an off-the-shelf product and customize it? Frequently, a wrong decision can result in cost overruns, project delays, or a solution that does not fit business needs very well. In my experience, I have seen two extremes of behavior among teams charged with making the "build vs. buy" decision. One believes that they can build everything needed and that no off-the-shelf solution will fit their needs. The other side of the coin is a belief that an off-the-shelf package will be much cheaper and will be able to fit one's needs. Unfortunately, both paths frequently can lead to disappointments if not carefully considered.
  • Requirement refinement and rapid prototyping

Brooks states that the most important function that the software builder performs for the client is the iterative extraction and refinement of the product requirements. He also states that the customer also doesn’t know what he exactly needs, so its better have requirement refinement with rapid prototyping. Rapid prototyping is now entering the field of rapid manufacturing and it is believed by many experts that this is a "next level" technology

  • Incremental developments – grow, don’t build software

Brooks says that the brain alone is powerful, because it is grown not build. He says that the developers should start from the basic functions of the development and move forward incrementally. This increases the enthusiasm of the developer.

  • Great designers

To improve the software art centers as it always has, on people he proposes the organizations should reward and nurtured the great designers.

The below table depicts the exciting vs. useful but unexciting products developed by great designers.


 
Existing Products
Unexciting Products
LINUX
MS-DOS
WIN 7
APL
SharePoint
Pascal
Vista
Fortran

 
Even though Brooks stated the above possessions in late 1980’s, his perceptions are still applicable. As a whole the report highlights the problems and issues related to the software engineering process and products mentioned by the Brooks, the solutions presented to overcome those difficulties and how successful have these methods been during last 20 years. Though Brooks has defined several solutions for the problems he has mentioned that no silver bullet can be found among them.

 

No comments:

Post a Comment