You are on page 1of 7

5/31/2015

CampusCommune

2.1.OverviewofSoftwareDevelopment
Softwaredevelopmentisadisciplineinthecomputersciencefieldthatfocusesonthecreationofprograms
thatcontrolcomputerhardware.Theseprograms,alsoreferredtoas'softwareapplications'orinshort'apps',
aregroupsofinstructionsthattellacomputerwhatistobedone.Thesoftwaredevelopmentfieldconsistsof
several computer programming languages, each designed to fulfill various requirements depending on the
projectathand.
It is almost unbelievable to think that a few decades back, the programmers did not even have desktop
computerstoworkon.Insteadtheypunchedinstructionsintopapercardswhichwereinputintoamainframe
computercentrallylocatedina"machineroom".Inthosetimes,theseinstructionswerewritteninassembly
languageormachinecode,thenativelanguageusedbyhardwareofthecomputer.Assoftwaredevelopment
evolved, 'higher level' languages were developed patterning natural languages and better reflecting the
human problemsolving process. Even today, assembly language is still used, especially by lowlevel
engineers developing computer components and embedded systems. But, most of the desktop and web
baseddevelopmentisdoneusinghighlevellanguageslikeASP,C++,C#,Java,Perl,etc.
Ifhundredprogrammerswereasked,'Whatdotheythinkisthebestprogramminglanguageforbeginners?'
youmightgetonehundredandoneanswers.Eachindividualhasanopinion.Thequestionisakintoasking
what is the best vehicle to drive there is simply no right or wrong answer. Fortunately, some general
guidelinesexisttogetthenoviceprogrammerofftoagoodstart.However,thosewhoarecompletelynewto
computersandunsureofwhethertheyareuptothetask(orwhethersoftwaredevelopmentwillbeofinterest
tothem)shouldstartwithalanguagethatisdesignedtoteachbasicprincipleswithveryminimalcomplexity.
TheBASICandLOGOprogramminglanguageswereearlyattemptstobringcomputerprogrammingtothe
masses.TodayalanguagelikeMicrosoft'sVisualBasicwouldbeidealforabeginner.VisualBasichelpsyou
tomakepracticalapplicationswithavisualinterfaceinamatterofhourswithoutgettingboggeddownbythe
technical details. Unlike BASIC and LOGO, Visual Basic has practical applications that can be used in both
casualandcommercialenvironments.
Those who are technically inclined or already have a fair amount of experience with computers may be
prepared for more advanced programming concepts. For many years, Pascal was considered the entry
language for such people, and was generally used in schools and universities to teach programming at a
professional level. Nowadays more "practical" languages like C++, C#, and Java are taught for the reason
that they provide a more direct approach to learning how to develop software with tools that are more
commerciallyviablethanPascal.
LifeCycleofaSoftwareDevelopmentProject
Software development is a complicated process comprising different stages. Each stage requires a lot of
paperworkanddocumentationinadditiontotheprocessofdevelopmentandplanning.Thisisincontrastto
the common thinking of newcomers to the software industry who believe that software development is just
writingcode.
data:text/htmlcharset=utf8,%3Cdiv%20class%3D%22row%22%20id%3D%22doc%22%20style%3D%22boxsizing%3A%20borderbox%3B%20margin

1/7

5/31/2015

CampusCommune

Everysoftwaredevelopmentprojecthastogothroughthefollowingstagesatleastonce:
Requirementgathering
Writingfunctionalspecifications
Creatingarchitectureanddesigndocuments
Implementationandcoding
Testingandqualityassurance
Softwarerelease
Documentation
Supportandnewfeatures
There may be many additional steps and stages depending upon the nature and the type of the software
product.Youmayhavetogothroughmorethanonecycleduringthetestingphaseassoftwaretesterstofind
problems and bugs. The developers need to fix them before a software product is officially published or
released.Letusgointothesestagesindetail.
RequirementGathering
Requirement gathering is usually the first stage of any software product. This stage officially commences
when you are thinking about developing software. In this phase, you meet customers or prospective
customers,anddoamarketanalysisoftherequirementsandfeaturesthatareindemand.Youmightaswell
findoutifthereisarealneedinthemarketforthesoftwareproductyouaretryingtodevelop.Inthisstage,
most of the work is done by the marketing and sales people, or people who have direct contact with the
customers.Thesepeopletalktocustomersandtrytounderstandwhatexactlytheirrequirementsare.
Acomprehensiveunderstandingofthecustomersneedsandwritingdownfeaturesoftheproposedsoftware
product are the keys to success in the requirement gathering phase. This phase is actually a base for the
wholedevelopmentofthesoftware.Ifthebaseisnotlaidappropriately,theproductwillnotfindaplaceinthe
market.Ifaverygoodsoftwareproductwhichisnotrequiredinthemarketisdeveloped,itdoesnotsellno
matter how well you build it. You can find many instances of software products that failed in the market
becausethecustomersdidnotrequirethem.ThemarketingpeopleusuallycreateaMarketingRequirement
Document or MRD that contains formal representation of the market data gathered. You can also consider
yourcompetitorsproducts(ifany).Thisprocessiscalledcompetitiveanalysis.
Finally, list down the features required by the product. Appropriate consideration must be given to the
economics of software creation at this point. Questions that must be asked are: is there a market? Can I
makesomeprofit?willtherevenuejustifythecostofdevelopment?
WritingFunctionalSpecifications
Functional specifications may consist of one or more documents. These documents show the behavior or
functionality of a software product on an abstract level. Assuming the product is a black box, these
specifications define its input/output behavior. The product requirements documentation put forward by
peoplewhohavecontactwiththeenduseroftheproductorthecustomers,formsthebasisofthefunctional
specifications.

data:text/htmlcharset=utf8,%3Cdiv%20class%3D%22row%22%20id%3D%22doc%22%20style%3D%22boxsizing%3A%20borderbox%3B%20margin

2/7

5/31/2015

CampusCommune

In larger products, functional specifications may consist of separate documents for each feature of the
product. For example, if the product is a router, you may have a functional specification document for RIP
(Routing Information Protocol), another for features on security, and so on. Functional specifications are
important because developers use them to create design documents. The documentation people also use
themwhentheycreatemanualsforendusers.Ifdifferentgroupsareworkingindifferentphysicallocations,
functionalspecificationsandarchitecturedocuments(discussednext)arealsoameanstocommunicate.
Keep in mind that sometimes during the product development phase you may need to amend functional
specificationskeepinginviewnewmarketingrequirements.
CreatingArchitectureandDesignDocuments
Whenyouhavealloftherequirementscollectedandarranged,itistheturnofthetechnicalarchitectsteam,
whichusuallyconsistsofhighlyqualifiedtechnicalspecialists,tocreatethearchitectureoftheproduct.This
defines different components of the product and how they interact with each other. Often, the architecture
also defines the technologies used to develop the product. While creating the architecture documents, the
teamalsoneedstoconsiderthetimelinesoftheproject.Thisisthetargetdatewhentheproductisrequired
to be on the market. Often excellent products fail because they are either too early or late to market. The
marketing and sales people usually decide a suitable time frame to release the product. Based on this
timeline, the architecture team may drop some features of the product if it is not possible to bring the full
featuredproducttomarketwithintherequiredtimeframe.Afterdecidingthecomponentsoftheproductand
definingtheirfunctionalities,interfacesaredesignedforthesecomponentstoworktogether.
Most often, no component works in isolation each one has to coordinate with other components within the
project. Interfaces are the rules and regulations that define how these components will interact with each
other. There maybe major problems down the road if these interfaces are not designed properly and
appropriatelydetailed.Differentpeoplewillworkondifferentcomponentsofanylargesoftwaredevelopment
project and if they dont fully understand how a particular component will communicate with others, major
problems arise during integration. For some products, new hardware is also required to make use of
technology advancements. The architects of the product also need to consider this aspect of the product.
Oncethearchitecture,softwarecomponentsandtheirinterfacesaredefined,designdocumentsarecreated
as the next phase of development. At the architecture level, a component is defined as a black box that
providescertainfunctionality.Atthedesigndocumentsstage,youhavetodefinewhatisinthatblackbox.
The design documents are usually created by the senior software developers and these documents define
individualsoftwarecomponentstotheleveloffunctionsandprocedures.Thisisthelastdocumentcompleted
beforedevelopmentofthesoftwarestarts.Thesedesigndocumentsarepassedontosoftwaredevelopersas
theybegincoding.ArchitecturedocumentsandMRDsusuallyneedtostayinsync,assalesandmarketing
willworkfromMRDswhileengineeringworksfromengineeringdocuments.
ImplementationandCoding
The software developers use the design documents and development tools (editors, compilers, debuggers
data:text/htmlcharset=utf8,%3Cdiv%20class%3D%22row%22%20id%3D%22doc%22%20style%3D%22boxsizing%3A%20borderbox%3B%20margin

3/7

5/31/2015

CampusCommune

etc.)andstartwritingsoftware.Thisisoftenthelongestphaseintheproductlifecycle.Everydeveloperhas
towritehis/herowncodeandcollaboratewithotherdeveloperstomakesurethatthedifferentcomponents
can interoperate with each other. A revision control system such as CVS (Concurrent Versions System) is
needed in this phase. There are many open source revision control systems as well as commercial ones
availablethesedays.Theversioncontrolsystemprovidesacentralrepositorytostoretheindividualfiles.A
normal software project may contain anywhere from hundreds to thousands of files. In larger and complex
projects,directoryhierarchymustalsobedecidedbeforehandsothatfilesarestoredinappropriatelocations.
During the development cycle, different developers may modify the files. If the rules are not followed by
everybody,thismayeasilybreakthewholecompilationandbuildingprocess.Atypicalexampleisduplicate
definitionsofthesamevariablescausingproblems.
Similarly,ifincludedfilesarenotwrittenproperly,loopsgetcreatedeasily.Otherproblemspopupwhen
multiplefilesareincludedinasinglefilewithconflictingdefinitionsofvariablesandfunctions.Coding
guidelinesmustalsobedefinedbyarchitectsorseniordevelopers.Asanexample,ifsoftwareisintendedto
beportedtosomeotherplatform,itmustbewrittenonastandardlikeANSI.Duringimplementation,
developersmustwriteenoughcommentsinsidethecodesothatifanybodystartsworkingonthecodeinthe
future,he/shewouldbeabletounderstandwhathasalreadybeenwritten.Writinggoodcommentsis
extremelyimportantasallotherdocuments,nomatterhowgoodtheyare,willbelosteventually.Tenyears
subsequenttotheinitialwork,it'sprobablethatyoumayfindonlythatinformationwhichisintheformof
comments,presentinsidethecode.Developmenttoolsalsoplayanimportantroleinthisphaseofthe
project.
Good development tools save a lot of time for the developers. They also help to save money in terms of
improved productivity. In terms of time saving the most important development tools are editors and
debuggers.Aneditorhelpsadevelopertowritethecodequickly.
Agooddebuggerhelpstomakethecodeoperationalinashortperiodoftime.Beforethestartofthecoding
process, considerable time must be spent in choosing good development tools. During the development
phase,reviewmeetingsalsoprovehelpful.Throughreviewmeetings,potentialproblemsareidentifiedearlier
in the development. Review meetings are also helpful to keep track of whether the product is on time or if
moreeffortisneededtocompleteitwithintherequiredtimeframe.Therewillbetimeswhenyoumayalso
needtomakechangesinthedesignofsomecomponentsbecauseofnewrequirementsfromthemarketing
and sales team. Review meetings are a great tool to convey these new requirements. Here, architecture
documentsandMRDsarekeptinsyncwithanychanges/problemsencounteredduringdevelopment.
Testing
Testingisprobablythemostimportantphaseforlongtermsupportaswellasforthecompany'sreputation.If
you dont control the software quality, it will not be able to compete with other products on the market. If
softwarecrashesatthesiteofthecustomer,helosesproductivityaswellmoneyandyoulosecredibility.On
most occasions these losses are huge. Unhappy customers will never buy other products from the same
vendor and will not refer other potential customers. You can avoid this situation by doing extensive testing.
data:text/htmlcharset=utf8,%3Cdiv%20class%3D%22row%22%20id%3D%22doc%22%20style%3D%22boxsizing%3A%20borderbox%3B%20margin

4/7

5/31/2015

CampusCommune

ThistestingisoftencalledasQualityAssurance,orQA,inthesoftwareworld.Generallytestingstartsassoon
astheinitialsoftwarecomponentsareavailable.Therearemultipletypesoftesting.Eachofthesehasitsown
importance.
1.UnitTestingUnittestingistestingonepartoronecomponentoftheproduct.Thedevelopergenerally
does this when he/she has completed writing code for that part of the software. This makes sure that the
componentisdoingwhatitisintendedtodo.Thisalsohelpsthesoftwaretestersaswellasdeveloperssave
time by eliminating many cycles of software being passed back and forth between the developer and the
tester.Whenadeveloperisreadywithaparticularpartofthesoftware,he/shecanwritetestcasestotestthe
functionalityofthispartofthesoftware.Thecomponentisthenpassedontothetesterswhoruntestcasesto
makesurethattheunitisworkingproperly.
2.SanityTesting Sanity testing is a very basic check to see if all the software components compile with
each other without any problems. This is to ensure that developers have not defined conflicting or multiple
functionsorglobalvariabledefinitions.
3.RegressionorStressTestingRegressionorstresstestingisaprocessdoneinsomeprojectstocarry
outatestforalongertimeperiod.Thistypeoftestingisusedtodeterminethebehaviorofaproductwhen
usedcontinuouslyoveraperiodoftime.Itcanexposesomebugsinsoftwareliketheonesrelatedtomemory
leakage. In some cases, developers allocate memory but forget to release it. This is usually referred to as
memory leakage. When testing goes on for many days or weeks, it often results in allocation of all of the
available memory until no memory is left. This is the point where your software starts showing abnormal
behavior. Another potential problem in longterm operation is counter overflow. This happens when you
incrementacounterbutforgettodecrementitresultinginanoverflowwhentheproductisusedforlongtime.
Theregressiontestingmaybestartedassoonassomecomponentsareready.Thistypeoftestingrequires,
byitsverynature,averylongperiodoftime.Theprocessshouldbecontinuedasmorecomponentsofthe
product are integrated. The process of integration and communication through interfaces may create new
bugsinthecode.
4.FunctionalorSystemTestingFunctionaltestingiscarriedouttomakesurethatthesoftwareisdoing
exactlywhatitissupposedtodo.Thismustbedonebeforeanysoftwareisreleasedtocustomers.Functional
testingisdonebytesterswhoseprimaryjobissoftwaretesting,andnotthedevelopersthemselves.Insmall
software projects where a company cant afford dedicated testers, other developers may also do functional
testing.Thekeypointtokeepinmindisthatthepersonwhowroteasoftwarecomponentshouldnotbethe
personwhotestedit.Adeveloperwillalwayshaveatendencytotestthesoftwarethewayhe/shewroteit.
He/she may easily miss any problems in the software. The testers need to prepare a testing plan for each
componentofthesoftware.Atestingplanwouldcontaintestcasesthatarerunonthesoftware.Thetester
canpreparethesetestcasesusingfunctionalspecificationsdocuments.Thetestermayalsogetassistance
from the developer to create test cases. Each test case must include methodology used for testing and
expectedresults.Additionally,thetestermayalsoneedtocreatecertaininfrastructureorenvironmenttotest
thefunctionalityofapieceofcode.Forinstance,youmaysimulateanetworktotesttheroutingalgorithms
thatmaybepartofarouter.Thenextimportantjobofthetesteristocreateaservicerequestifananomaly
data:text/htmlcharset=utf8,%3Cdiv%20class%3D%22row%22%20id%3D%22doc%22%20style%3D%22boxsizing%3A%20borderbox%3B%20margin

5/7

5/31/2015

CampusCommune

isfound.Thetestermustincludeasmuchinformationintheservicerequestaspossible.
Typicalinformationincludedinreportingbugsincludes:
Testcasedescription
Howthetestwascarriedout
Expectedresults
Resultsobtained
Adescriptionofthatenvironment,ifaparticularenvironmentwascreatedfortesting
Thebugshouldbeforwardedtothedevelopersothatthedevelopermaycorrecttheproblem.Manysoftware
packagesareavailableinthemarkettotrackbugsandfixproblemsinsoftware.
SoftwareReleases
Anysoftwareproductisofficiallyreleasedbeforeyoustartsellingit.Thismeansthatyoucreateastateofthe
softwareinyourrepository,ensurethatithasbeentestedforfunctionalityandthecodeisfrozen.Aversion
numberisassignedtothereleasedsoftware.Afterreleasing,developmentmaycontinuebutitwillnotmake
anychangeinthereleasedsoftware.Thedevelopmentisoftencarriedoninanewbranchanditmaycontain
newfeatures.Thereleasedsoftwareisupdatedonlyifabugfixedversionisreleased.Generallycompanies
assignincrementalversionnumbersfollowingsomeschemewhenthenextreleaseofthesoftwareissentto
market.Theversionnumberchangedependsonwhetherthenewsoftwarecontainsamajorchangetothe
previousversionoritcontainsbugfixesandenhancementtotheexistingfunctionality.Softwarereleasesare
alsoimportantbecausetheyaretypicallycompiledversionsofaparticularcodeversion,andthusprovidea
stablesetofbinariesfortesting.
1. Branches In almost all serious software development projects, a version control system is used. This
systemkeepsarecordofchangesinsourcecodefilesandisusuallybuiltinatreelikestructure.Duringthe
release of the software, the state of each file that is part of the release should be recorded. By creating
branchestothisstate,futuredevelopmentscanbemade.Sometimesspecialbranchesmayalsobecreated
thataresolelyusedforbugfixing.
2.ReleaseNotesEverysoftwareversioncontainsreleasenotes.Thesearepreparedbypeoplereleasing
the software version with the help of the developers. Release notes show what happened in this software
version.
Typicallytheinformationincludes:
Bugfixes
Newfunctionality
Detailsofnewfeaturesaddedtothesoftware
Anybugsthatarenotyetfixed
Futureenhancements
Ifauserneedsachangeintheconfigurationprocess,itisalsomentioned
Generallyausermustbegivenenoughinformationtounderstandthenewreleaseenhancementsanddecide
whetheranupgradeisrequiredornot.
data:text/htmlcharset=utf8,%3Cdiv%20class%3D%22row%22%20id%3D%22doc%22%20style%3D%22boxsizing%3A%20borderbox%3B%20margin

6/7

5/31/2015

CampusCommune

Documentation
Therearebroadlythreecategoriesofdocumentationrelatedtosoftwaredevelopmentprocesses:
Technicaldocumentationdevelopedduringthedevelopmentprocess,suchasthearchitecture,
functionalanddesigndocuments.
Technicaldocumentationpreparedfortechnicalsupportstaff,includingtechnicalmanualsthatsupport
staffusetoprovidecustomersupport.
Endusermanualsandguides.Thisisthedocumentationforuseoftheenduser.Itassiststheuserin
gettingstartedwiththeproductandusingit.
All three types of documents are necessary for different aspects of the support of the product. Technical
documents are necessary for future development, bug fixes, and adding new features. Documentation for
technical support staff contains information that is too complicated for the end user to understand and use.
Thesupportteamneedsthisinformationinadditiontousermanualstoprovidebettersupporttocustomers.
Finallyeachproductshouldhavetheusermanuals.Technicalwritersoftendevelopusermanualswhichare
based on functional specifications. In the timelines of most software development projects, even before the
start of code development, functional specifications are prepared. So the technical writers can start writing
user manuals while developers write the code. So when the product is ready, the user manual is almost
completed.
SupportandNewFeatures
Yourcustomersneedsupportwhenyousellaproduct.Thisistrueregardlessofthesizeoftheproduct,and
evenfornonsoftwarerelatedproducts.
Themostcommonsupportrequestsfromcustomersarerelatedtooneofthefollowing:
Helpininstallationandgettingstarted
Toreleaseapatchorupdatetothewholeproduct
Anewfeaturerequiredbythecustomer
In addition to these, you may also want to add new features to the product for the next release because
competitor products have other features. Better support will increase your customer loyalty and will create
referral business. You may adopt two strategies to add new features. You may provide an upgrade to the
current release as a patch, or wait till you have developed a list of new features and make a new version.
Boththesestrategiesareusefuldependinghowurgenttherequirementfornewfeaturesis.

data:text/htmlcharset=utf8,%3Cdiv%20class%3D%22row%22%20id%3D%22doc%22%20style%3D%22boxsizing%3A%20borderbox%3B%20margin

7/7

You might also like