Introduction To Software Development

copied from:
1. What is software development? 
Software development is the process of developing software through successive phases in an orderly way. This process includes not only the actual writing of code but also the preparation of requirements and objectives, the design of what is to be coded, and confirmation that what is developed has met objectives.

Before systems development methods came into being, the development of new systems or products was often carried out by using the experienceand intuition of management and technical personnel. However, the complexityof modern systems and computer products long ago made the need clear forsome kind of orderly development process.

Typical phases of software development: 
1) Identification of required software
2) Analysis of the software requirements
3) Detailed specification of the software requirements
4) Software design
5) Programming
6) Testing
7) Maintenance

In general, the development of commercial software is usually a result of demand in the marketplace, while enterprise software developmentgenerally arises from a need or a problem within the enterprise environment.
Related Links:
Rafeeq Ur Rehman and Christopher Paul's Introduction to software development goes into more detail about the software development process.
SearchVB offers a selection of resources about design and development.

2. How is software development guided? 
The software development process is almost invariably guided bysome systematic software development method (SDM). Referred to by a numberof terms, including process models,development guidelines,and systems development life cycle models (SDLC), software development methods nevertheless generally include the same development phases:
  • The existing system is evaluated and its deficiencies identified, usually through interviewing system users and support personnel.
  • The new system requirements are defined. In particular, the deficiencies in the existing system must be addressed with specific proposals for improvement.
  • The proposed system is designed. Plans are laid out concerning the physical construction, hardware, operating systems, programming, communications, and security issues.
  • The new system is developed. The new components and programs must be obtained and installed. Users of the system must be trained in its use, and all aspects of performance must be tested. If necessary, adjustments must be made at this stage.
  • The system is put into use. This can be done in various ways. The new system can phased in, according to application or location, andthe old system gradually replaced. In some cases, it may be more cost-effective to shut down the old system and implement the new system all at once.
  • Once the new system is up and running for awhile, it should be exhaustively evaluated. Maintenance must be kept up rigorously at all times.Users of the system should be kept up-to-date concerning the latest modificationsand procedures.
The systems development life cycle model was developed as a structured approach to information system development that guides all the processesinvolved from an initial feasibility study through to maintenance of thefinished application. SDLC models take a variety of approaches to development.

Systems development life cycle models include:
· The waterfall model: This is the classic SDLC model, with a linear and sequential method that has goals for each developmentphase. The waterfall model simplifies task scheduling, because there areno iterative or overlapping steps. One drawback of the waterfall is thatit does not allow for much revision.
· Rapid application development (RAD): This modelis based on the concept that better products can be developed more quicklyby: using workshops or focus groups to gather system requirements; prototyping and reiterative testing of designs; rigid adherence to schedule; and less formality of team communications such as reviews.
· Joint application development (JAD): This modelinvolves the client or end user in the design and development of an application,through a series of collaborative workshops called JAD sessions.
· The prototyping model: In this model, a prototype (an early approximation of a final system or product) is built, tested,and then reworked as necessary until an acceptable prototype is finallyachieved from which the complete system or product can now be developed.
· Synchronize-and-stabilize: This model involves teams working in parallel on individual application modules, frequently synchronizing their code with that of other teams and stabilizing code frequently throughout the development process.
· The spiral model: This model of development combines the features of the prototyping model and the waterfall model. The spiral model is favored for large, expensive, and complicated projects.
Related Links:
Peter H. Gregory's SearchNetworking article explores "Security in the software development life cycle."
The CTG also offers a white paper on the "Systems Development Process Model."
Bender RBT provides their document on "Systems Development Life Cycle Objectives and Requirements."

3. How has the open source development process influenced software development in general?
Open source software is developed collaboratively; source code is freely available for use and modification. The open source movement arose because some developers came to believe that competition amongst vendors leads to inferior products and that the best approach to development isa collaborative one.

The OSI (Open Source Initiative) is an industry body that certifies products as open source if they conform to a number of rules:
· The software being distributed must be redistributed to anyone else without any restriction
· The source code must be made available (so that the receiving party will be able to improve or modify it)
· The license can require improved versions of the software to carry a different name or version from the original software
Despite its emphasis on the collaborative process, the biggest influence that open source has had on software development in general may be through competition: by competing with proprietary software products, open source products force vendors to work that much harder to hold their market share in the face of viable open source alternatives.
Related Links:
The OSI has a Web site.
Margie Semilof's SearchWin2000 article is called "Battening down the Windows: Open source vs. commercial tools."
Jan Stafford's SearchEnterpriseLinux article is called "Perens: IT pros must lobby for open source."

4. What are some generally accepted best practices common to all or most development models?
Here's a collection of some of the top tips from a variety of industry sources:
· Make sure that you've chosen a systems development life cycle model that suits your project, because every one of the processesinvolved depends on the model. That said, however, implementing any modelis better than none -- much of the success of a project depends upon howscrupulously the model is adhered to.
· Reuse software components when it's appropriate, but don't use code that doesn't work perfectly for its intended purpose just because you have it on hand.
· Be very thorough in gathering requirements, ensuring that all parties agree on what they are -- and make sure you document them.
· Don't promise the moon, if you can't deliver it. Avoidletting someone who isn't fully informed negotiate with the client.
· Make sure that the architecture you've chosen is appropriate for the application you're building. To retain perspective, you might want to look at the smaller picture and plan the architecture incrementally.
· Change is part of life, including software development. You have to accept that various things -- requirements, for example -- are likely to change throughout the life of the project. Keep control of them, but not too rigidly.
· Set up peer review processes for every element of the project.
· Design thoroughly and with care, but remember the KISSprinciple: Keep it simple.
· In your project plan, split big projects into manageable chunks, with concrete milestones and deadlines.
· Ensure accountability: make sure that deadlines are clear and that people have to report on whether they made them, and explain why not if they don't.
· Implement quality control procedures throughout the project.
· Test exhaustively -- there's no point in doing a cursory run through only to have an application fail when you run it for the client.
· After the project is completed, conduct a thorough post-mortem, with everyone involved. You'll see what worked well and what should havebeen differently, and your future projects will benefit.
Related Links:
The IBM Web site offers Mike Perk's article, "Best Practices for Software Development Projects."
IEEE Software promotes the "Daily Build and Smoke Test" as a development best practice.
The Standish group provides a "Recipe for Success."
W. Edwards Deming offers more advice in his list, 14 Points for Software Development.
Johanna Rothman advises developers to write out goals inplain English to help managers, team members and stakeholders find consensusin this Software Development Magazine article. (requires free registration)

5. What are some common mistakes in software development?
According to a Standish Group report, corporations in the United States spend over $275 billion every year on software development projects, many of which are doomed to failure. Research by the group found that over 80% of projects fail for various reasons, and that fully 30% of projectswere cancelled prior to completion because of poor execution.
David B. Stewart, at the University of Maryland, set out to document the 10 most common mistakes of software development. He found, however,that the sheer number of errors that were commonly practiced made it impossible to keep the number to ten. He ended up calling his article "Twenty-FiveMost Common Mistakes with Real-Time Software Development." Even so, afterthe title had been established, he found another five errors so common thathe felt compelled to add them.
According to Dr. Michael Stovsky, of Stovsky and Associates, the most common project problems are due to failure to manage project elements successfully:
· Requirements are not clearly and accurately defined, and agreed upon by all concerned.
· Resources are not adequately planned and allocated.
· Threats to project success are not clearly detected, identified, and protected against.
· Critical path analysis is omitted, or poorly executed.
· The project's progress is not tracked adequately.
· Quality management is not carried out well enough throughout the life of the project.
· Too little data is collected, or data is ignored or poorly understood.
Correcting flaws identified during software security audits is expensive and time consuming. Worse, vast resources are spent on containing and recovering from exploits. Fortunately, providing development staff with the knowledge and tools to avoid many of these pitfalls is easy and inexpensive.

Related Links:
In this paper, Dr. Michael P. Stovsky explores Common Mistakes in Software Project Management.

6. Given a particular process model, is there a set of tools(a development environment) to support it?
In general, a process model usually begins as a philosophy of "who does what development when" rather than a rigid methodology complete with tools. For example, rapid application development (RAD) is an approach that can make use of existing development tools. In general, tools for supporting all or part of a process model tend to arrive later, if at all.

Historically, development tools have focused on the code-building, code archive management, documentation, testing, and packaging parts ofthe process, sometimes offered as a suite. Such a suite is generally knownas an integrated development environment (IDE).

A set of tools for managing or supporting a development project is generally known as a computer-assisted software environment (CASE). A number of companies offer products that support early stages of development such as requirements gathering, design prototyping, and data modeling. A number of these provide tools that support data modeling with the Unified Modeling Language. Overall, there is a trend toward providing all or most of the tools for a development project in a single product or related set of products.

Today, the main code-building development environments or program suites come from Microsoft with its Visual Studio and Visual Studio .NET, providing support for Visual Basic, Visual C#, Visual C++, and Visual J#; Sun Microsystems with its Java 2 Enterprise Environment; and numerous software vendors such as Borland who repackage these environments with some value-added features. Recently, almost all providers of software development environments have added features that enable the software to be used on the Web.
Related Links:
Microsoft provides a case study of a company that created an accounting system with its VisualBasic .NET product and additional products from PDSA.

The Caldera OpenLinux Workstation describes several different integrated development environments it provides for Linux and Unix systems.

Knowledgestorm lists many products that describe themselves as integrated development environment products.

Carnegie-Mellon Software Engineering Institute answers the question "What is a CASE Environment?"

7. How do you choose the "right" programming language for your project?

For most projects, the right language is easy to choose. Your company may have standardized on a particular development environment and language (and you may have been hired because you were already familiar with the language). Or you may be updating or enhancing an existing program; it's almost always best to use the same language the existing program is written in. In some cases, however, someone will need to select the best (or, since the best may be somewhat arguable, at least an appropriate language). In somecases, you or your team of developers may need to know several languages fordifferent purposes.

General truisms about programming languages are that:
  • Perl or a similar script language is most suitable for small tasks and sometimes acting as a program that goes between other, largerprograms.
  • Visual Basic is most suitable for relatively novice programmers and relatively simple programs.
  • Java, C++, or comparable languages like Python and Tcl aremost suitable for larger applications using object orientation as a designmodel.
  • C is most suitable for programs where efficiency and performance are the primary concern.
  • The appropriate assembler language is most suitable where the program is relatively short and high performance is critical.
Where constraints permit, some programmers may favor one object-oriented language over another (for example, Java, C++, Python, or Tcl). A programmer with skills in C is likely to prefer C++, which combines the proceduraland other concepts and syntax of C with object-oriented concepts.
Related Links:
Outback Software compares three object-oriented languages: C++, Smalltalk, and Java.

Kuro5hin compares three Visual Studio languages: C#, C++, and Java.

Jason Voegele's table compares 21 features of nine pure or hybrid object-oriented languages, including Perl and Basic.

The Open Directory Project offers a list of links relating to programming language comparisons.

8. What are some trends regarding the future of software development? 
Blogs  - A growing number of big-name softwaredevelopers are finding they can make better software applications if theyshare information with potential customers from the start and incorporate customer feedback into development decisions. While developers of gamessoftware have used this method for years, business software makers are nowalso catching on and using blogs (Web logs) as an important part of the development process.
Big-name support for independent software vendors (ISVs) -  Big players like Microsoft, IBM, and Sun have recognized that they cannot fill every niche industry's software demands, so they have begun to activelyseek partnerships with small ISVs, in hopes that by encouraging ISVs to focuson nichy vertical industry applications, everyone will benefit.
Component-based development - In this approach, softwareis developed in modules that are linked dynamically to construct a completeapplication. Charles Simonyi (creator of the WYSIWYG editor) believes thateventually, software development will become so modular that  even lay-peoplewill be able to assemble  components effectively to create customizedsoftware applications.
Continued improvements in refactoring tools - Eric Raymond,a leading philosopher about program development, maintains that the conceptof refactoring is consistent with the idea of get-something-working-now-and-perfect-it-laterapproach long familiar to Unix and open source programmers. The idea is alsoembodied in the approach known as Extreme Programming. As software applicationsbecome larger, better refactoring tools will be required to maintain codebases and diagnose bugs.
Outsourcing - Using this approach, software companies hire employees around the world to take advantage of time zone and labor/cost differences.Proponents say that in effect, software development teams now have a 24-hourwork day, and are able to provide fast turn-around. Detractors say that outsourcingparts of a project leads to sloppy coding and only works if there is a highdegree of coordination regarding modularized tasks, and above-average communicationwithin the team.
Related Links:

Rormer CNET developers Dan Seewer and Kevin Cobb discuss the future of software development.

Charles Simonyi, creator of the WYSIWYG, is in the process of designing programming tools for the future that are so simple that even laypeople can use them.
Developers are using blogs to get closer to their users.
IBM DeveloperWorks is one of many free resources available for developers


10. Software Development Words-to-Go Glossary:

Browse through instant messaging vocabulary in a handy printable glossary.

11. Self-assessment:

After you've looked at the glossary, quiz yourself to see what you've learned about software development terms.

Post a Comment