Subscribe by Email


Showing posts with label software engineering. Show all posts
Showing posts with label software engineering. Show all posts

Wednesday, April 10, 2013

How not to put all your eggs in one basket - ensure some amount of knowledge sharing

Every software team has some great engineers, and some not so great ones. Typically, when you are doing a project, you would take your list of features and categorise them into a breakdown of how difficult or how easy they are. Once you have done this, you would get into the process of estimating these tasks and assigning them to different members of the team. One somewhat hidden portion of this entire exercise of estimation and assignment is that you would do the estimation based on a specific person to do the feature (for a more complicated feature, the person who is more skilled would take far less time than the mediocre engineer in your team - and every team has bright people and mediocre people). What this results in is that you have already done some amount of thinking about whom to assign to the more difficult features - typically you would look at the total time available for your skilled people and assign accordingly.
So, you have started the entire exercise of getting the work done, with different parts of the project assigned to different people and are tracking progress of these tasks. This is where I tell my example where some amount of bad planning and some assumptions landed the team in some serious trouble - we had some critical features that were very important for the ongoing version of the product, with marketing depending on these features to be the ones that would get highlighted in reviews, and these were the ones that were pulled up in stakeholder status and review sessions. In fact, part of discussion with stakeholders was about assignment of these features, and once we had presented the assignment of these features to the more skilled engineers, there was approval to proceed.
Now, how many of you have heard of Murphy's Law ? If something can go wrong, it will. And guess what, it did. We were deep into task assignment, and since the engineer doing the most complicated feature was skilled but a bit moody, we had neglected to do periodic sharing of the code and design with a buddy engineer. And of course, we ran into an issue where the engineer ran into some sudden health issues with his daughter, which caused him to take leave for a period of 2 weeks, causing him immense emotional stress. It landed us in a tricky situation. Given that he was already stressed and was already out to take care of his daughter, any kind of information sharing was very difficult. We had permission to drop a couple of features so that we could divert some engineers to this sudden issue, but the information sharing was proving to be a big handicap.
We asked the replacement engineers to study the code intensively, but it did cause us a 6 day delay in delivery of the important features, and also caused a higher number of bugs to turn up since these replacement engineers did not have the same level of familiarity with the code. You would not want to know about the reaction of stakeholders to this delay, especially since these features were critical. And, the biggest problem was that we had a process whereby we used to get engineers to share their current status with their buddy, but for tight-scheduling reasons, we had gone a bit slow on the buddy program; and that was what hit us the most.


Thursday, January 17, 2013

What is meant by Behavior Driven Development (BDD)?


BDD or Behavior Driven Development is one of the most important development approaches in the field of software engineering and is just a modified implementation of the TDD or test driven development. It actually combines the guiding principles and general techniques of the test driven development with the combined ideas from two sources namely:
  1. Domain – driven design
  2. Object – oriented analysis and design
- The behavior driven development thus provides a shared process and tools to business analysts and software developers for their collaboration on the software development process.
- Ideally, behavior driven development represents an idea regarding the management of the software development process by both technical sight and business interests.
- It is assumed in this approach that the specialized software tools are being used to provide support to the development process. 
- The specialized tools thus involved have been developed especially to be used in projects following the BDD approach. 
- They can be considered as special tools that supports test driven development. 
- The primary purpose of these tools is to automate the ubiquitous language statements around which the BDD process is centralized. 
- Agile software development gets successful only when it is considered from the beginning. 
- On the contrast, in some projects this is the last thing to be considered which means that there is no sustainable operation in the websites that serve purposes other than blogging.
-  A blogging web site is just a software that is just modified by the users as it is ready for use. 
- However, BDD and TDD provides the only ways for achieving this goal. 
- The word ‘driven’ in TDD signifies that the test cases are written first and then the code for passing the test. 
- TDD is actually a low level methodology of accomplishing tasks and is sort of developer oriented. 
- On the other hand in BDD, the description of the tests is written in a natural language, thus making the tests more accessible to people outside the development team. 
- Such descriptions can describe the functionality in the same way as done by the specifications. 
Dan North was the person who actually brought the concept of behavior driven development in response to the issues experienced in implementing the test driven development such as:
  1. From where to start testing?
  2. What is to be tested?
  3. How much should be tested in one turn?
  4. How the reason for the failure of the test is to be understood?
- At the heart of the behavior driven development approach lies the approach to acceptance testing and unit testing which were again identified by North. 
- He emphasized that the acceptance tests should be written using the user story frame work. 
- Thus starting from the scratch, the development of the BDD approach continued over a couple of years and finally we have it as a communication and collaboration framework. 
- It has been designed especially for the QA people and business participants involved in a project.
- The agile specifications, BDD and testing eXchange meet highlighted the following characteristics of BDD:
  1. Second generation methodology
  2. Outside – in approach
  3. Pull based
  4. Multiple stake holder support
  5. Multiple scale generation
  6. High automation process
  7. Agile methodology
- Further, it was said that it involves a cycle of interactions with outputs that are well defined and results in delivery of working software that makes sense. - First, BDD frame work that came in to existence was Jbehave which was followed by Rbehave–a story level BDD ruby frame work.
- All these frameworks were later replaced by cucumber testing tool. It was developed by Aslak Hellesoy. 


Friday, July 27, 2012

What are different characteristics of agile planning?

Two critical areas in software engineering are:
1. Estimating
2. Planning.
They are difficult and error-prone. These activities cannot be avoided.

The purpose of planning is to find an optimal answer to the overall product development question of what to build. The answer incorporates features, resources and schedule. It is supported by a planning process that reduces risk, uncertainty, supports reliable decision making, establishes trust and conveys information.

Planning is an ongoing iterative approach. It is an effort to find an optimal solution to the overall product development question of "what should we build?"

A good planning process supports:
1. Reducing Risk
2. Reducing Uncertainty
3. Supporting better decision making
4. Establishing trust
5. Conveying Information

A good plan is one that is sufficiently reliable that it can be used as the basis for making decisions about the product and project.


What is Agile Planning?


- It is more focused on planning than the creation of plan.
- It encourages change, results in plans that are easily changed.
- It shifts the focus from plan to planning.
- It balances the effort and investment in planning with the knowledge that we will revise the plan throughout the project.
- As the user needs are discovered, our plans are affected and hence changes become necessary.
- Plan are needed that are easily changed. Therefore, planning becomes more important that the plan.
- Changing plan does not mean a change in date.
- Plan can be changed without changing the date by:
            1. dropping a feature.
            2. reducing scope of feature.
            3. adding more people in the project.
- Agile planning is spread more or less evenly across the duration of a project.



Thursday, July 19, 2012

What is UML and how to use it for software testing?


Unified modelling language or UML is considered to be the software engineering world’s only standardized general purpose modelling language when it comes to the field of object oriented software engineering. 
This standard was created by the OMG (the object management group) and later on managed by the same organization only. It was wholly adopted by the OMG organization in the year of 1997 and since then had become one of the best standards for the modelling of the software intensive systems. 
The visual models of the object oriented software intensive systems are created using the unified modelling language through a set of pre defined graphic notation techniques. Unified modelling language:
  1. Specifies,
  2. Visualizes,
  3. Modifies,
  4. Constructs, and
  5. Documents the artifacts of the object oriented software intensive systems that are under the question. 
In a way, we can say that a software system’s or application’s below mentioned elements can be visualized in a standard way using the unified modelling language:
  1. Activities
  2. Architecture blue prints
  3. Data base schemas
  4. Logical components
  5. Business processes
  6. Reusable software system components
  7. Statements of the programming language and so on.
Some techniques from the following other modelling standards are incorporated in to the unified modelling language:
  1. Entry relationship diagrams from data modelling
  2. Work flows from business modelling
  3. Object modelling and
  4. Component modelling
The best thing about the unified modelling language is that it always works no matter what the platform or the process is being followed throughout the SDLC or software development life cycle. The software engineering world has come to witness the synthesization of the notations obtained from the following techniques or methodologies:
  1. The booch method
  2. OOSE or object oriented software engineering and
  3. OMT or object modelling technique etc.
The notations are synthesized by carrying out a fusion process among them in order to produce a common, single and widely usable modelling language and so we have UML today.  
Software testing does not just consists of one phase only rather there are so many like:
  1. Unit testing
  2. Function testing
  3. Regression testing
  4. System testing
  5. Solution testing and the list goes on. 
A different class of UML diagrams are used for each and every kind of testing:

  1. Unit testing:  The type of uml diagram that is used is the class and state diagrams. For unit testing the code coverage criteria is used and the fault model is used for checking the following:
a)   correctness, invariants,
b)   pre/ post conditions.

  1. Functional testing: The type of uml diagram that is used is the interaction and class diagrams. For functional testing the functional coverage criteria is used and the fault model is used for checking the following:
a)   Functional behavior
b)   API behavior
c)   Integration issues etc.

  1. System testing: for system testing the operational scenarios coverage criteria and the fault model is used for checking the following:
a)   Work load
b)   Contention
c)   Synchronity
d)   Recovery etc.
       Here many types of uml diagrams are used like:
a)   Use cases
b)   Activity diagrams and
c)   Interaction diagrams

  1. Regression testing: For regression testing the functional coverage criteria is used and the fault model is used to check the following:
a)   Unexpected behavior from new or changed functions.
      Two kinds of uml diagrams are used here namely:
    a)   Interaction diagrams and
    b)   Class diagrams
 We can say that the need of uml diagrams here is same as of the functional testing.

  1. Solution testing: For solution testing, inter communication coverage criteria is used and the fault model helps in detecting the inter operating problems. The uml diagrams used are:
a)   Use case diagrams and
b)   Deployment diagrams. 


Thursday, July 12, 2012

What are CMM and CMMI? What is the difference between the two?


In this article we take up two very important topics CMM and CMMI! Though these two concepts sound too much similar with only a difference of “I” there is a whole lot of difference between the two. 

The CMM stands for “capability maturity model whereas the CMMI stands for capability maturity model integration. 

What is CMM?


- CMM was born as a registered service mark of the CMU (Carnegie Mellon University). 
- CMM is quite a popular model these days that was created post the study of some data that was collected from many different organizations which had made a contract with the USDD (U.S. department of defense), the organization that had funded the whole research. 
- This model is regarded as the birth point for the engineering giant SEI or software engineering institute.
- An effective approach for improving the quality of the software system or application that is under development can be planned by applying this model to that concerned software system or application. 
- Previously, it was thought that the CMM model can only be applied to the software systems and applications.
- But eventually it was proved it cane be very effectively applied to the other processes as well. Gradually a concept of this model was developed which could also be applied to the business.

What is CMMi?


- CMMI is the abbreviation for capability maturity model integration.
- It is rather like a simple approach for improving the processes whose basic aim lies in helping the organizations in improving their overall performance.
- Unlike CMM, CMMI can effectively drive the improvement process across a whole organization, project or even across a division of the organization. 
- Current version 1.3 of CMMI is supportable by most of the organizations. 
- With the aid of CMMI, following things can be done:
  1. Traditionally separate organizational functions can be properly integrated.
  2. Process improvement priorities as well as goals can be set.
  3. Guidance for quality processes can be provide and
  4. A point of reference for the appraisal of the current processes can be provided etc.
To say three major aspects are addressed in CMMI as mentioned below:
  1. Product and service development
  2. Service establishment, management and delivery and
  3. Product and service acquisition.

Differences between CMM and CMMi

Now let us clearly state what all the differences among these two! 

- Firstly the CMM was developed for software systems and applications whereas the CMMI was developed as a means for the integration of the past and future models and build some initially integrated models. 
- Gradually, CMM models gained success and found their use in the following concepts also:
  1. Systems engineering
  2. Software acquisition
  3. Integrated public development
  4. Software quality assurance and so on.
- Though all the above mentioned CMMs proved to be quite useful they presented some of the drawbacks also as mentioned below:
  1. They were overlapping.
  2. They were contradicting
  3. They lack an understandable interface
  4. They lack standardization and
  5. They all displayed different levels of detail etc.
All these drawbacks led to a quite expensive and utter confusing improvement programs that conflicted with one another. 
- CMMI is nothing but an upgraded version of the CMM which has got much wider applications than CMM. 
- CMM model can be considered to be a reference model constituting of matured practices in a discipline that is specified but difficult to integrate as and when needed. On the other hand, the CMMI can be considered to be a more matured set of practices as well as guidelines. 
- It was resultant of the combination of the best components of individual disciplines of CMM. 


Saturday, July 7, 2012

How is Configuration management (CM) process applied in software testing?


Configuration management or CM finds its use in a wide number of fields including software engineering. The configuration management in the field of software engineering is called “software configuration management” or SCM. 

What is Software Configuration Management?


- SCM over the years has proven itself to be one of the best practices for monitoring the changes in a software system or application. 
- This process has been very effective when it comes to the identification of the physical as well as functional attributes of a software system or application at various intervals of time.
- This process also takes the responsibility for taking over the systematic control of the changes to be made to the identified attributes from the user and maintains the software traceability as well as integrity through out all the stages of the software development life cycle. 

In this article we have focused up on the application of the configuration management in the process of software testing. So let us see how to apply the configuration management process in software testing. 

What is Configuration Management?


- Configuration management is all about doing a detailed updating and recording of the information that gives a description of the computer system or network. 
- As the software systems and applications being developed today continue to rise in the measure of the complexity, the need for software configuration management drives in. 
- Software building organizations require developing and maintaining variants of their software system or application in order to reach out to a diversified market. 
- Today almost every one is aware of the need for a better management and control of the software products.
- Customers, managers and developers all want to modify the requirements, technical approach and the project approach. 
- Though the modification is quite necessary as the time passes, it is very important that the changes that are to be made are properly controlled.
- It is important for the project leader to known about the state of the software product that is under development and whether or not it is satisfying the needs of the customers.
- Software configuration management can be considered to be a support or assistant that can help a manager to manage and control the software production in a much better way.

Under the concept of software testing, the software configuration management is often considered to be same as the change control which is wrong. 
- Both these processes are only related in the way that the change control forms a critical part of the software configuration management. 
- One thing that needs to be addressed in the configuration management is the modification of the test objects should be installed only in the test environment first and that too with the permission of the test team lead. 
- This approach of configuration management prevents a software system or application from failing in such situations where another version of the same object is being tested. 
- After this the change management documentation has also to be updated since it bears a very critical relation with the testing of the software system or application. 
- Plus the way in which the changes have been dealt with should also be mentioned. 

In simple words, we can say that the evolution of the software systems or application is controlled by the software configuration management and so it makes un- neglect-able contributes to the quality of the software system or application and also to its delay constraints. 
The software configuration management was introduced in the field of software testing as a result of the “software crisis” i.e., when it was realized that the programming was not everything in software engineering. 


Monday, June 25, 2012

What is the relation between installation testing and configuration management?


Installation testing as we all know falls under the genre of quality assurance work in the field of software engineering and is all focused up on what is to be done by the customers in order to set up and install the new software system or application successfully. 

Installation testing process is constituted of the following processes:
  1. Upgrading of installation and un- installation process.
  2. Partial installation and un- installation process.
  3. Full installation and un- installation process.

What is Configuration Management?


- Configuration management is somewhat self justifying and is looked up on as one of the best practices available for handling the changes that are made in the software system or application during the project development.  
- It is also used as a means for the identification of the physical as well as functional attributes of the software system or application at various points of time during the development process. 
- The configuration management takes up the systematic control of the changes to be made to the identified attributes with the following purposes:
  1. Maintaining software trace-ability throughout the software development life cycle.
  2. Maintaining software integrity throughout the software development life cycle.

Relation between Installation Testing and Configuration Management


Both the above mentioned processes i.e., installation testing and configuration management share a relation with each other.  

- Installation testing is performed by the software testing engineer in collaboration with the manager handling the configuration management process known as “configuration manager”. 
- The configuration management process shows up the need to trace the changes. 
- This process has the ability with the virtue of which it verifies whether or not the final developed software system or application has all the enhancements, features and functionality that are required to be in the release. 
- In a way we can say that the configuration management checks how correctly the installation testing has been implemented. 
- It is done by the means of four below mentioned procedures that need to be defined for all the software systems or applications in order to ensure that a proper configuration management process is implemented:

1. Configuration Identification: 
It involves identification of the attributes defining all the aspects of the configuration item.

2. Configuration Change Control:
It includes a set of approval stages and set of processes that are intended to change the attributes of a configuration item and re- baseline them.

3. Configuration Status Accounting:
By virtue of this ability the configuration baselines associated with all the configuration items at any instant of time are recorded and reported.

4. Configuration Audits:
It occurs at the moment of incorporating the change. These can be divided in to two categories:
(a)Functional configuration audits: ensures achievement of the performance and functional attributes of the configuration items and
(b)Physical configuration audits: ensures proper installation of the configuration item with the requirements mentioned in the design documentation.

- In installation testing a complied version of the code is placed in a pre- production environment which also acts as the configuration item for configuration management. 
- The configuration management is carried out outside the usual software development environment so that the corruption to the code is limited from the past as well as the future releases.
- The set up program used in the package software acts as a multi configuration wrapper and each and every configuration in it should be tested appropriately so that it can be released with confident. 

In a way we can say that these two processes i.e., installation testing and configuration testing are locked with each other to some extent and this is what that keeps them related to each other.


Saturday, April 21, 2012

What are different aspects of Crystal Methods?


Crystal methods together constitute a family of methods called the “crystal family” and were introduced by the Alistair Cockburn around the year of 1990. Cockburn developed these methods after carrying out some interviews of the development teams and observed that some of the teams even though did not made use of the formal methodologies of software development were successful in delivering successful software projects and products. 

The crystal family he introduced can be thought of as a catalogue that includes their methodologies for delivering the successful projects and products. These crystal methods have been categorised under the category of the light weight methodologies. The term “crystal” in the context of the software engineering implies a view on the underlying core of values and principles and the faces are the means representing the standards, roles, tools and techniques.

Cockburn differentiated the methodologies, techniques and policies as:

  1. Methodologies: set of elements like tools and practices.
  2. Techniques: include skill areas like development of use cases.
  3. Policies: statements dictating the must haves of the organizations.

Aspects on which Crystal Methods are Focused

- Below mentioned are the aspects up on which the crystal methods are focused:
  1. Interaction
  2. People
  3. Skills
  4. Community
  5. Communications
  6. Talents and so on.
- Cockburn stated that the above mentioned aspects are much important than the process which should be the secondary focus. 
- Crystal methods are based up on the idea of having variant talented and skilled individuals in the development team so that process element does not pose up a major factor. 

What makes the crystal methods the easiest agile software development method? 

- Crystal methods are very much tolerant to the issue that the teams can complete a task in several different ways.
- Crystal methods over the time have proven to be very effective in avoiding the rigid and strict processes (that were typical of the older development methodologies) and that is why they are very flexible. 
- Cockburn eventually developed may types of crystal methods for each and every type and kind of development team which are required to solve diverse problems. 
- These crystal methods are categorized by different color label denoting the weight of the methodology to be used. 

What are seven crystal methods?

- The crystal family of methodologies consist of seven crystal methods:
  1. Crystal clear
  2. Crystal yellow
  3. Crystal orange
  4. Crystal orange web
  5. Crystal red
  6. Crystal maroon
  7. Crystal diamond
  8. Crystal sapphire
- Depending up on the size of the project, the colour darkens from left to right. 
- The crystal methods have been scaled to the international standards based up on the size and criticality of the teams.

Properties of Crystal Methods

For all the seven crystal methods, some common properties have been defined as mentioned below:
  1. Reflective improvement which involves taking breaks from the regular development routine and think and come up with ways of improving the process.
  2. Personal safety involves free speaking within a group.
  3. Easy access to expert users.
  4. Frequent delivery is the measure of the ability of the method to frequently deliver the iterations of the software product or project. The features to be included in the iterations are decided up on by the developers and the designers.
  5. Osmotic or close communication involves flow of information among the teams in a room.
  6. Focus involves focusing up on direction in which the project development is taking place and individual task.
  7. Technical environment inclusive of the automated tests, frequent integration and configuration management.  


Thursday, April 19, 2012

What are different kinds of security threats?


Security vulnerabilities and security threats are one of the biggest issues of today in the field of software engineering. As more sophisticated is the today’s software is, the more critical security issues it struggles with.

Any software is bombarded with one compulsory question that how safe and secure it is? Does it have any possibilities of keeping the attackers at bay from interfering with the security of the software system or application? Has any effective strategy been designed for dealing with any possible security issues and keep sensitive data out of the reach of the attackers and strengthen the security programs of the software system or application? 

Today as the technology is advancing; it is being misused in the creation of new methods or strategies for breaking out in to the security system of a system or application. Attackers are being influenced by the chances of financial gain and are always involved with the exploitation of the various software systems and applications over the years. This article gives a glance about all such security threats that our software systems and applications face today.

How are security threats categorized?


The security threats are categorized in to many categories:

1.        Validation of input: It faces threats like:
(a)      cross site scripting
(b)      SQL injection attacks
(c)       buffer overflow
(d)      Ccnonicalization

2.        Authentication:
(a)      Brute force attack
(b)      Network eavesdropping
(c)       Dictionary attacks
(d)      Credential theft
(e)      Cookie repay

3.        Authorization:
(a)      Disclosure of confidential data
(b)      Elevation of privilege
(c)       Luring attacks
(d)      Data tempering

4.        Configuration management: It faces following threats:
(a)     Unauthorized access to interfaces
(b)      Retrieval of configuration data
(c)      Over privileged process
(d)      Lack of individual accountability

5.        Session management:
(a)      Man in the middle
(b)      Session hijacking
(c)      Session replay

6.       Sensitive information:
(a)      Network eavesdropping
(b)      Access of sensitive data in the storage
(c)       Data tempering

7.        Cryptography:
(a)     Weak encryption
(b)      Poor key management

8.        Parameter manipulation:
(a)      Form field manipulation
(b)      Cookie manipulation
(c)      Query string manipulation
(d)      HTTP header manipulation

9.        Exception management:
(a)     Denial of service
(b)     Information disclosure

10.     Auditing and logging:
(a)      User denial for performing an operation
(b)      Exploitation of an application without trace
(c)      Covering of the attacks by the attacker

Usually security is often either thought of as an operational IT issue that is concentrated up on building defending systems or strategies for the softwares to protect them from the malicious security breaches and attackers or as an issue concerned with the protection of the personal, critical and sensitive data.  

Importance of Security


- Lack of security is what makes a software vulnerable to such issues.

- The security needs to be addressed in some more elaborate way since the attackers are far more ingenious and creative people.

- A software security must be aimed at building a defect free software system or application.

- Out of all the defects of the software system, few tend to become the source of security vulnerabilities. 

- Softwares that have been built with more concentration on the system security are found to be more resistive to the security threats and if in case they are struck with some security issue they have the capability of recovering as soon as possible. 

- It is important to incorporate security in to the software systems are from the initial phase to the last and final phase.

- This can start right from implementing secure software coding and testing methodologies. 

- The software developers, programmers and testers can be trained to implement language specific secure coding practices.

- Conducting a risk based security testing yields greater benefits. It adequately highlights the weaknesses of the software system or application.




Facebook activity