Monday, 29 February 2016

Leveraging feedback to improve software quality



Feedback can be said to be the cheapest, but still the most under used software management tool at our disposal. It  is the information that is required to achieve both, effectiveness and productivity. Feedback helps to clarify one's understanding and see things in new ways. It helps correct the course of action, learn and work better. Early feedback is the most critical aspect of being successful. The Agile methodology has feedback as the core component of all its principles in one form or another. 


Feedback can be taken at each step of the development cycle used for improving the performance.
Feedback on Requirement Priority: This is all about making sure that the client and the development organization are both aligned with the requirements and the deliverables. 

Design Feedback of Software Design: A feedback on design identifies more clearly what the customer actually requires and not what the designers feel good about. Any difference in design and the requirement is a symptom of  gaps in conceptualization and communication between the client and the analyst. 

Feedback on Software Functionality: This feedback is associated with the working of the software. A continuous and iterative feedback on the developed software is the main change in Agile practice. It is built in small consumable increments and submitted for feedback early and often. Although it may seem time consuming and tiresome early on, but it saves cascading errors and time required for testing and debugging later on. 

Feedback on Software Code: This involves collaboration with the developers. It helps in getting a fresh perspective on the developed code and makes sure that nothing is overlooked. It is a good way of understanding the code and the related changes.

Feedback is used to gauge a system, program  and properly operate it. Broadly, feedback can be categorized into three forms – Coaching, Evaluation and Appreciation. It works best when it relates to a specific goal. Its timeliness is equally important.  The sooner the feedback is given, the sooner that problem can be corrected. Feedback, most of the time, needs to be provided in a positive manner. This is mainly because, people respond to feedback which is provided in a positive manner. However, it needs to be factual, complete and accurate. Also, it is most effective when it identifies the  hard work and clearly states what is required to be done in future.

Some feedbacks occur naturally, while some feedbacks need to be carefully planned and managed. Self evident feedbacks can be formed by the developers as they work. Planned feedback runs the system through a measurement system and the developer receives it automatically. Effective feedback  improves the performance of the employees and the organization as a whole. 

Conclusion:

Soliciting feedback early and repeatedly forms a critical component of the software development process. It brings transparency into the system and incorporating the feedback in the system helps to improve it further with respect to the customer.

Wednesday, 24 February 2016

The Agile Context Exploratory Testing



Exploratory testing is a rigorous investigative practice. It is test design and test execution at the same time.  Unlike scripted test cases, they are not pre-defined and are not carried out as per any plan. It may be confused with ad-hoc testing as well, which is an improvised form of bug detection.





Exploratory testing is a sophisticated and thoughtful approach to ad-hoc testing. It helps softwaretesters keep up with the rapid development speed of the Agile methodology. It is a core testing practice in Agile. Continuous Integration in Agile, execute typically automated scripted regression tests. However, all such automation is not enough to ensure that the system is built and functions perfectly. Hence, manual tests are still required. These are not those repeatable scripted tests.This manual testing refers to an approach that is adaptable and gives out a lot of information quickly. This refers to exploratory testing.

Here, instead of documenting stepwise instructions, simple questions are chartered which needs to be answered through testing. Then, using these charters, testing moves through the software, poking it to reveal unintended sequences and risks of design decisions which were not considered earlier. 

A test charter for exploratory testing may include the following:

-          The intended user of the program.
-          The objective of the user, i.e., the test conditions.
-          The test environment.
-          The relative importance of the charter with respect to the user level.
-          Data gathered during the test.
-          Test activities
-          Input and output evaluation notes
-          Alternative evaluations  for  results of the test activities.

Exploratory test results should include the following :

-          Test Coverage
-          Notes of evaluation, observations, stability and features of the system.
-          The risk matrix and its coverage.
-          Issues and anomalies related to the efficiency of the test approach,  test environment, test data, functional misinterpretation and the test script.
-          Actual behavior of the system.

Further, exploratory testing uses the results from the last test  to form the next. If some vulnerability or risk is noticed, the testing approach is adapted accordingly. As this testing type does not follow a test script, it focuses on what actually important at that time.

Exploratory testing is more of a practice characterized by the following aspects:

-          Emphasizes the  skill, creativity and autonomy of the tester.
-          It recommends the performing of test activities throughout the development life cycle rather than in a fixed sequence or phase.
-          Emphasizes on diverse test approaching rather than following one single scripted technique.

Exploratory Testing is suitable in situations when very little is known about the product or the involved test scripts. It is called for at the time when the next test to be performed is not obvious or when it is required to go beyond the obvious.

Conclusion

Exploratory testing is required to make the testing relevant in order to manage the constant changes in an Agile Project. This requires understanding of the risks and the areas to focus the test coverage.

Wednesday, 10 February 2016

Accelerating DevOps Processes through Agile.



DevOps makes a faster delivery of software or software products. It is now the main differentiator of competitiveness. Agile plays an important role to meet the urgent goal of accelerating the development process of an application through its very effective iterative development process. By promoting this concept of iterative and incremental changes, Agile development in turn accelerates the DevOps process. 



Very few people can understand the guidance in the Agile Manifesto. Valuing employees and individuals as well as processes and tools are critical for being able to successfully implement the principles of DevOps. It highlights effective communication and collaboration. 

Many organizations suffer from dysfunctional communication between employees which in turn affects the success of the organization. Also, many people do not want to waste time in creating project documentations that possibly may not be used by anyone. But they fail to recognize the struggle of the new people when project managers move to different locations without leaving enough documentations for reference.

Another challenging area is managing change. Developers do not realize the importance of interacting with the operations for the required infrastructure. Similarly, the operations may not be able to predict the performance of new technologies. A strong teamwork is required to overcome this and identify potential risks.

Clients and product owners often change their requirements in the middle of the ongoing development phase. This is mainly because as they see the processes being developed, they get a better insight of what they actually require. These changes may also be induced due to competitive pressure or change in regulatory laws. 

Successful  teams practice the agile principles utilize its concepts to work as a well collaborated team.DevOps is based on Agile and hence enables merging of new code with the main code base. With such fluid characteristics, it empowers the present day developer to be a curious, innovative and business oriented risk taker. DevOps is the logical consequence after years of improvement in IT processes to respond faster and better to business requirements.

DevOps brings order into the complex world of development, testing and deployment. By implementing the Agile methodology, it minimizes the distance between the independent teams and unifies the approach to software development and delivery. It strives for more collaborative and productive relationship between the development and the operations team.

Implementing DevOps to accelerate and innovate the development methodologies requires adopting the Agile methodologies.  For this the Agile infrastructure is also required to provide the dynamism for the various stages of continuous delivery and continuous integration. For being a true Agile, teams have to develop and test faster as well as deliver products and enhancements faster. Agile and DevOps are thus two sides of the same coin. 

Conclusion:

DevOps has emerged from the collision of the agile operations and an extensive collaboration and communication between the development and the operations team. DevOps shares a very strong affinity with Agile. Agile principles lay the foundation for DevOps which further channelizes it beyond the code into the entire product delivery service.