Wednesday, August 19, 2015

Software Development Methodologies


Hi everyone, you all know it is important to "Follow a plan" when doing something. So as well when it is comes to software development it is really important to plan each and every step.

A software development methodology is a framework that is used to plan and control the process of developing software systems. There are several different approaches to software development in the industry: with their own recognized strengths and weaknesses. One system development methodology is not necessarily suitable for use by all projects; Each of the available methodology is best suited to specific kind of projects, based on various technical, organizational, project and team considerations.
Most methodologies share some combination of the following stages of software development:
  •     Analyzing the problem
  •     Market research
  •     Gathering requirements for the proposed business solution
  •     Devising a plan or design for the software-based solution
  •     Implementation (coding) of the software
  •     Testing the software
  •     Deployment
  •     Maintenance and bug fixing
So in this article I'm going to introduce some of the popular software development methodologies in the current industry.

1. Agile Software Development Methodology


















Agile software development is a conceptual framework for undertaking software engineering projects. There are a number of agile software development methodologies such as, Crystal Methods, Dynamic Systems Development Model (DSDM), and Scrum. Most agile methods attempt to minimize risk by developing software in short time boxes, called iterations, which typically last one to four weeks. Each iteration is like a miniature software project of its own, and includes all the tasks necessary to release the mini-increment of new functionality: planning, requirements analysis, design, coding, testing, and documentation. While iteration may not add enough functionality to warrant releasing the product, an agile software project intends to be capable of releasing new software at the end of every iteration. At the end of each iteration, the team reevaluates project priorities. Agile methods emphasize real time communication, preferably face-to-face, over written documents.
Agile methodology is basically depend on some principles. They are,

  •     Customer satisfaction by early and continuous delivery of useful software
  •     Welcome changing requirements, even late in development
  •     Working software is delivered frequently (weeks rather than months)
  •     Close, daily cooperation between business people and developers
  •     Projects are built around motivated individuals, who should be trusted
  •     Face-to-face conversation is the best form of communication (co-location)
  •     Working software is the principal measure of progress
  •     Sustainable development, able to maintain a constant pace
  •     Continuous attention to technical excellence and good design
  •     Simplicity
  •     Self-organizing teams
  •     Regular adaptation to changing circumstance

There are many advantages of using agile methodology.
  • Customer satisfaction by rapid, continuous delivery of useful software.
  • People and interactions are emphasized rather than process and tools. Customers, developers and testers constantly interact with each other.
  • Working software is delivered frequently (weeks rather than months).
  • Face-to-face conversation is the best form of communication.
  • Close, daily cooperation between business people and developers.
  • Continuous attention to technical excellence and good design.
  • Regular adaptation to changing circumstances.
  • Even late changes in requirements are welcomed
Whenever in a project with new changes needed to be implemented, project group with some experienced people or when the project requirements are more likely to change frequently, it is advised to go with agile software development methodology.

2. Dynamic Systems Development Model (DSDM)























The Dynamic Systems Development Model(DSDM) is the evolution of rapid application development (RAD) practices. DSDM boasts the best-supported training and documentation of any of the agile software development techniques. There are basically nine principles to follow when it comes to DSDM.
  •     Active user involvement.
  •     Empowered teams that the authority to can make decisions.
  •     A focus on frequent delivery of products.
  •     Using fitness for business purpose as the essential criterion for acceptance of deliverables.
  •     Iterative and incremental development to ensure convergence on an accurate business solution.
  •     Reversible changes during development.
  •     Requirements that is baselined at a high level.
  •     Integrated testing throughout the life cycle.
  •     Collaboration and cooperation between all stakeholders.

There are many advantages in DSDM methodology, some of them are,
  •     Users are highly involved in the development of the system so, they are more likely to get a grip on the software development project.
  •     In this model basic functionality is delivered quickly, with more functionality being delivered at frequent intervals.
  •     This method provides an easy access by developers to end-users.
  •     In this kind of development approach projects are delivered on time and within a specific budget.

3. Extreme Programming Methodology (XP)

XP is a methodology for creating software within a very unstable environment. It allows flexibility within the modelling process. The main goal of XP is to lower the cost of change in software requirements. With traditional system development methodologies, like the Waterfall Methodology, the requirements for the system are determined and often “frozen” at the beginning of the development project. This means that the cost of changing the requirements at a later stage in the project - something that is very common in the real-world can be very high. It advised that Extreme Programming should only work in small teams of fewer than 12 persons. However, XP has been used successfully on teams of over a hundred developers. Some of the main advantages of using XP as a software development methodology are, 
  •     Extreme programming methodologies emphasis on customer involvement.
  •     This model helps to establish rational plans and schedules and to get the developers personally committed to their schedules which is surely a big advantage in the XP model.
  •     This model is consistent with most modern development methods so, developers are able to produce quality software.

4. Feature Driven Development Methodology

Jeff De Luca and Peter Coad were both greatly involved in developing the Feature Driven Development methodology. Peter describes FDD as having just enough process to ensure scalability and repeatability while encouraging creativity and innovation.
More specifically, Feature Driven Development asserts that:
  •     A system for building systems is necessary in order to scale to larger projects.
  •     A simple, but well-define process will work best.
  •     Process steps should be logical and their worth immediately obvious to each team member.
  •     “Process pride” can keep the real work from happening.
  •     Good processes move to the background so team members can focus on results.
  •     Short, iterative, feature-driven life cycles are best.

5. Joint Application Development Methodology(JAD)






















JAD is a requirements-definition and user-interface design methodology in which end-users, executives, and developers attend intense off-site meetings to work out a system's details. So the Joint Application Development (JAD) methodology aims to involve the client in the design and development of an application. This is accomplished through a series of collaborative workshops called JAD sessions. JAD focuses on the business problem rather than technical details. It is most applicable to the development of business systems, but it can be used successfully for systems software. It produces its savings by shortening the elapsed time required to gather a system's requirements and by gathering requirements better, thus reducing the number of costly, downstream requirements changes. Its success depends on effective leadership of the JAD sessions; on participation by key end-users, executives, and developers; and on achieving group synergy during JAD sessions. Advantages are,
  •     This methodology allows for the simultaneous gathering and consolidating of large amounts of information.
  •     This software development mode effectively produces large amounts of high-quality information in a short period of time.
  •     In this methodology differences are resolved immediately with the proper assistance of the organizer.
  •     This model provides a forum to explore multiple points of view regarding a topic.

6. Lean Development Methodology(LD)















There are 12 principles of Lean Development:
  • Satisfying the customer is the highest priority.
  • Always provide the best value for the money.
  • Success depends on active customer participation.
  • Every LD project is a team effort.
  • Everything is changeable.
  • Domain, not point, solutions.
  • Complete, don't construct.
  • An 80 percent solution today instead of 100 percent solution tomorrow.
  • Minimalism is essential.
  • Needs determine technology.
  • Product growth is feature growth, not size growth.
  • Never push LD beyond its limits.
The Advantages of Lean Development are,
  •     The early elimination of the overall efficiency of the development process certainly helps to speeds up the process of entire software development which surely reduces the cost of the project.
  •     Delivering the product early is a definite advantage. It means that development team can deliver more functionality in a shorter period of time, hence enabling more projects to be delivered.
  •     Empowerment of the development team helps in developing the decision making ability of the team members which created more motivation among team members.

7. Rapid Application Development Methodology (RAD)








“Rapid-development language” is a general term that refers to any programming language that offers speedier implementation than do traditional third-generation languages such as C/C++, Pascal, or Fortran. Rapid-Development Languages (RDLs) produce their savings by reducing the amount of construction needed to build a product. By using RAD Methodology the products can be developed faster and higher quality by,
  •     Using workshops or focus groups to gather requirements.
  •     Prototyping and user testing of designs.
  •     Re-using software components.
  •     Following a schedule that defers design improvements to the next product version.
  •     Keeping review meetings and other team communication informal.
The main advantages of using RAD are,
  •     Rapid Application development model helps to reduce the risk and required efforts on the part of the software developer.
  •     This model also helps client’s to take quick reviews for the project.
  •     This methodology encourages customer feedback which always provides improvement scope for any software development project.
But when using RAD methodology, it is important to identify the exact requirements of the system to be developed. This method is not applicable for the developer to use in small budget projects as cost of modeling and automated code generation is very high. And also this methodology requires to have highly skilled developers and designers teams, and the system to be developed should be able to modularized.

8. SCRUM Methodology






















The Scrum process is suited for projects with rapidly changing or highly emergent requirements. Scrum software development progresses via a series of iterations called sprints, which last from one to four weeks. The Scrum model suggests each sprint begins with a brief planning meeting and concludes with a review. Scrum is facilitated by a scrum master, whose primary job is to remove impediments to the ability of the team to deliver the sprint goal. The scrum master is not the leader of the team (as they are self-organizing) but acts as a productivity buffer between the team and any destabilizing influences.
The main roles in SCRUM are, Scrum Master, Scrum Team, Product Owner and Stakeholders.
The main artifacts are, Product backlog, Sprint backlog and Burn down chart.
The main meetings are, Iteration plan meeting, Daily scrum, product release meeting and scrum retrospective.
The main advantages are,
  •     In this methodology decision-making is entirely in the hands of the teams.
  •     This methodology enables project’s where the business requirements documentation is not consider very significant for the successfully development.
  •     It is a lightly controlled method which totally empathizes on frequent updating of the progress therefore project development steps is visible in this method.
  •     A daily meeting easily helps developer to make it possible to measure individual productivity. This leads to the improvement in the productivity of each of the team members.

9. Spiral Model






















The Spiral Model is sophisticated model that focuses on early identification and reduction of project risks. In this model, developers starts on a small scale then explores the risks involved in the project, makes a plan to handle the risks, and finally decides whether to take the next step of the project to do the next iteration of the spiral. The success of any Spiral Life-cycle Model depends on reliable, attentive, and knowledgeable management of the project.
Advantages of Spiral model:
  •     High amount of risk analysis hence, avoidance of possible risk is certainly reduced.
  •     This model is good for large size and critical projects.
  •     In the spiral model additional functionality can be added at a later date.
  •     It is more suited for high risk projects, where business needs may differ from time to time basis.
Disadvantages of Spiral model:
  •     It can certainly costly model to use in terms of development.
  •     The success of entire project is dependent on the risk analysis phase thus, failure in this phase may damage entire project.
  •     It is not appropriate for low risk projects.
  •     The big risk of this methodology is that it may continue indefinitely and never finish.

10. Waterfall Model






















The waterfall model is the traditional and commonly used software development life cycle model for software engineering. This model is often considered as the classic style of old method in software development life cycle. This model clarifies the software development process in a linear sequential flow that means that any phase in the development process begins only if the earlier phase is completed. This development approach does not define the process to go back to the previous phase to handle changes in requirements.
Advantages of waterfall model:
  •     Waterfall model is very simple and easy to understand and use method that is why it is really beneficial for the beginner or novice developer.
  •     It is easy to manage, because of the rigidity of the model. Moreover, each phase has specific deliverable and individual review process.
  •     In this model phases are processed and completed are at once in a time thus it saves significant amount of time.
  •     This type of development model works more effectively in the smaller projects where requirements are very well understood.
  •     The testing is easier as it can be done by reference to the scenarios defined in the earlier functional specification.
Disadvantages of waterfall model:
  •     This model can only be used when very precise up-front requirements are available.
  •     This model is not applicable for maintenance type of projects.
  •     The main drawback of this method is that once an application is in the testing stage, it is not possible to go back and edit something.
  •     There is no possibility to produce any working software until it reaches the last stage of the cycle.
  •     In this model, there is no option to know end result of the entire project.
  •     This model is good for small project but not ideal suitable for long and ongoing projects.
  •     Not ideal for the projects where requirements are very moderates, and there is great scope for modification.


Saturday, August 8, 2015

Most Popular Programming Languages 2015



Java










Java is a general purpose programming language, used for building server side applications(desktop applications) to video games and mobile applications. Java is considered as the perfect language for the developers to learn. Java was developed by Sun Microsoftsystems and first released in 1995. Java is an object oriented language(OOP) and it is hardware and operating system independent. Java is one of the most popular languages all the time.

JavaScript












A scripting language used to add interactivity to web pages. And javaScript support all major web browsers including Firefox, Internet Explorer and Safari. JavaScript can be found basically in everywhere. Developers can use JavaScript library called JQuery to make JavaScript work even easier. JavaScript is a client side scripting language used for front end development.

C#












C# is used for web development, game development, XML Web services, distributed components, client side applications, database applications, and general Microsoft development. C# is syntactically nearly identical to java, but not completely.

PHP









PHP is a well known server side scripting language and it is known as a beginner friendly language. Mainly PHP is specialized for web applications and it is open source. PHP is a flexible and easy to use language.
Used in Facebook, Wikipedia, Yahoo!, Tumblr and WordPress.

C++












A general purpose, powerful language based on C. It is designed for programming system software, but also can be used to build games, game engines, desktop applications, mobile applications and web applications. This is a very good language for beginners to start with. C+= is a fast programming language, therefore an ideal selection for strong desktop applications as well as mobile applications. Since this language is known to be the strongest language, It is used in vital operating systems, such as Windows.

Python










Python is a general purpose, object oriented language and known as the easiest programming language to learn because of its simple and straightforward syntax. Therefore, python is highly recommended for beginners. Python can be used to develop desktop applications and web applications, and also has great tools for data mining. Also python can be used for web application expanding and data analysis.
Used in Google, Dropbox, Pinterest, Instagram and BitTorrent.

C












C is the predecessor for many complex programming languages line C# and Java. C can be used when a developer want to work small and is dealing with low level applications. Widely used for embedded systems, working with system kernels, computer operating systems.It is not that easy to learn C, since it takes more complex code to perform a simple task, but it is really important to learn C as a programmer.

SQL










SQL is a database query language which used to communicate with databases. Although SQL alone cannot used to build applications; it is used to manage the data in applications that uses a database management system. This is a most in demand language now a days.

Ruby












Ruby is one of the easiest language to learn. Heavily used for web programming. Ruby knowledge is in high demand these days because it is a powerful language and people learn Ruby as their first programming language these days. Used mostly for back end development.
Used in Shopify, Bloomberg, Slideshare, Airbnb and Huly.

Objective C











Objective-C is a super set of C programming. It is a primary language used for wiring software for OS X and iOS. So, Objective-C is the programming language behind iOS applications. Can used for static and dynamic both typing. Developers can produce iOS applications that can be noticeable in App Store quickly using objective-C.
   

Friday, August 7, 2015

Want To Improve Your Coding Skills???


Hello everyone, as you can already see on the upper right corner, I'm Bhagya Silva... and I am reading a degree on software engineering right now.. And  of course LEARNING PROGRAMMING....so there is no limit for our knowledge..I hope this article will help you to get some tips on how to improve your programming knowledge and coding skills.Here are some suggestions:
  • Master the programming language(s) that you are using.
  • Work on different types of projects. Do not stick to a single pattern;it can be easy but use the chances to learn something new.
  • Do not hesitate to get some help or advises from your seniors or experienced people around you.
  • Try our more and more new codes and coding patterns.
  • Just be thoughtful to focus on your direction, and we should not try to learn each and everything there ever is to learn about programming: actually we can't. So first of all we should concentrate about more relevant parts.
  • Once you know the direction, it is not that hard to get materials to help you with.
  • Choose small projects first to work on. It is easy to start from the basics. And it is a great opportunity to improve most of your skills.
  • Do your own code reviews and check for guidelines.
  • Always try to be aware of coding standards of the languages you are using.
  • Get used to your always available tools. You don't need to learn about thousand IDEs at once. Just try to be familiar with the one you are currently using.
  • Learn something new. Other than the main programming language you are using, try to add some more functionality to the project using something else, such as get the use of scripting languages.
  • Nail the basics. It is important to know about the core.
  • Learn new programming concepts. Not all at once; learn one and get used to it then so on.
  • Refer other peer programmers codes and try to understand the logic and concepts they have used.
  • Finally i must say..... Keep coding. :)