jump to navigation

Five latest trends that every software engineer ought to know December 15, 2011

Posted by Sapna Sumanth in Software Engineering.
trackback

It’s fascinating to know and learn about how new trends in software engineering is emerging. The following are the 5 trends that I feel is very important that every software engineer ought to know.

  1. DevOps
  2. Agile Development Methodology
  3. Project Management
  4. Software Development Process
  5. Cloud Computing/Mobile Computing

1. Devops

DevOps is a huge shift in the current industry. According to Wikipedia.org, DevOps “is a set of processes, methods and systems for communication, collaboration and integration between departments for Development (Applications/Software Engineering), Technology Operations and Quality Assurance (QA).”

DevOps is basically about people, particularly developers and operations. DevOps is a way of working. The idea behind DevOps is that, if Dev & Ops work together from the early stages of the project, then the boundaries between the teams are reduced and also obtain a one-team feel. It’s about the culture of trust and a feeling of fellowship among different teams in an organization. Through DevOps, every part of the development process becomes visible to everyone, including operations, involved in the project. Hence if there are any changes introduced, everyone gets the visibility of the change and if there are risks associated, it allows everyone to collaborate efficiently.

DevOps also emphasizes the use Automation, which minimizes the human errors. For example, automating deployment, eliminating human errors that could occur in manual deployments. Manual deployments can get repetitive, expensive and also demanding (E.g. time consuming, exhilarating, involves late night builds etc.) Hence automating the deployments, allows the people involved in manual deployments to concentrate on other higher value activities.

It’s good to follow DevOps in any organization irrespective of their development practice as DevOps encourages good communication between development and operations team, which would result in smooth deployment & hence better service to the customer.

2. Agile Development Methodology

Agile is a time-boxed software development methodology that focuses on delivering quality software using iterative incremental approach. “Agile is a culture and
 not a process”

In recent years, many organizations have adopted Agile development methods and have been successful in delivering many quality products to the customers. Agile methods can accommodate frequently changing requirements as opposed to traditional methods; they reduce development time, they produce quality products and thus providing high customer satisfaction. Examples to Agile methods include feature driven development, extreme programming, test driven development, dynamic system driven development, lean software development, crystal development etc. Agile Manifesto (Agile Alliance 2001) set out the central elements of agility. “We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to values:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

That is, while there is value in the items on the right , we have the items on the left more.” [agilealliance.org]

3. Project Management

“Scrum is an iterative, incremental framework for project management often seen in agile software development, a type of software engineering”

As a process framework, scrum is used to manage complex projects. The framework consists of scrum teams and associated roles, meetings, artifacts & rules.

The term sprint refers to a time-box, during which shippable/releasable product is developed. The Sprint period typically varies between 2 to 4 weeks which may be referred to as a cycle. This way the product is developed in an iterative and incremental manner.

At the beginning of each sprint, the work to be performed during that sprint is planned in a meeting called Sprint Planning. There will be daily scrum/stand-up meetings, to create a plan for the work to be done for that day. At the end of the sprint, there will be Sprint Review meeting in order to review the work that was completed and not completed. Finally there will be sprint Retrospective meeting, during which main focus would be on learning the mistakes from the previous sprint and making appropriate improvements to it.

When it comes to Artifacts, we have Product Backlog, which contains a list of all the tasks that must be accomplished through out the project. And then we have Sprint Backlog, which contains a list of all the tasks that should be done, during a particular sprint. A burn down chart, which is updated on a daily basis, is used to indicate the progress of the sprint by showing the remaining work to be done in a particular sprint.

Speaking of Roles, we have Scrum master, who is responsible for handling the entire scrum process. The Product backlog is maintained by the Product Owner, who is responsible for creating user stories, assigning priority and business value for each user story, in the product backlog.

4. Software Development Process

I would like to take this opportunity to introduce the concept of Test Driven Development. Test Driven Development (TDD) is a design technique that drives the development process through testing.

Key Drivers to adopt TDD:

  1. TDD produces high quality code. Developers test the functionality themselves by writing the test first and then the code. Once the test is passed it allows them to refactor the code. Refactoring cleans up the existing code without changing its external behavior. It aids in improving the non-functional attributes of the software.
  2. Developers must focus on clearly understanding the requirements first, before writing the code rather than writing the code & then doing unit testing. Clear understanding of requirements helps developers make changes with confidence.
  3. High scope for test automation, which aids in retesting the system every time a new feature is added and making sure the existing functionality is not broken & the current test, passes. Automation tools can also be used for code refactoring.
  4. Testing time reduces due to the use of automation, as compared to manually testing, although this is still required for testing non-functional requirements.
  5. By using a version control system, it reduces debugging time if a previously passed test fails unexpectedly, by reverting the code to the previous version.
  6. Tests return in the form of user stories, use cases etc. can replace writing separate requirements documents as they themselves serve as requirements document. This reduces the time & effort in producing such documents and helps in easy maintenance.

I believe there is a strong correlation between product quality and TDD, because TDD tends to implement smaller, simpler solutions, with less lines of code overall, thereby yielding better code quality.

 5. Cloud Computing

 The term cloud computing has become a buzzword in the recent days.

“Cloud computing is a computing paradigm in which tasks are assigned to a combination of connections, software and services accessed over a network. This network of servers and connections is collectively known as “the cloud.” Computing at the scale of the cloud allows users to access supercomputer-level power. Using a thin client or other access point, like an iPhone, BlackBerry or laptop, users can reach into the cloud for resources, as they need them. For this reason, cloud computing has also been described as “on-demand computing”. ”

Cloud may mean different things to different people. Some may feel that it is a way of describing IT “Outsourcing”; or as any computing service provided over the Internet or a similar network; or any bought-in computer service you use which sits outside your firewall.

Cloud computing in simple terms means a virtual hard drive that’s accessible by a network of computers. For Example, when more and more people start accessing a particular website that is hosted on a we server, the service may slow down when traffic is more, also it costs more to keep the service running, requires a lot of time to set it up in the first place and finally the service has to be maintained always even when the traffic is less. On the other hand, with cloud computing, when more computing power is required it is achieved instantly through the cloud and when it is not required, it can be released back to the cloud.

Mobile Computing

Mobile computing devices are becoming smaller and more powerful than their predecessors. The mobile computing industry has witnessed a rapid growth in the recent years due to the high demand for mobile computing devices.

It refers to the use of any kind of a computing device, which is usually small and portable, in a moving environment. Examples include, hand held devices like laptops, mobile phones, PDA’s etc. One of the important requirements is having wireless network in order to support mobility and handoff from one network to the other, based on the pedestrian or vehicular speed. It aims to provide network infrastructure and terminal capability to perform all desktop like computing functionalities even when the terminal is moving, at any place or time.

-Sapna Sumanth

Advertisements

Comments»

No comments yet — be the first.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: