Video

Progress on TDD Prototype – First Pygame

15 Apr

The latest progress on the game that I’m crafting in an effort to get more exposure with Python. It’s going ok and I’m slowly understanding the code. It’s getting easier to read with each passing day.

In other news, I’m doing a coursea course called  An Introduction to Interactive Programming in Python – https://www.coursera.org/course/interactivepython

It should be interesting and I’m looking forward to it. Hopefully the practise I’ve been doing with the Prototype game should put me in good stead.

I’m also reading

I’ll post a review of the course and the book once I’ve finished both.

 

Quality Assurance Mentoring, Security and ‘Welcome to Earf’

10 Apr

QA Mentoring

Luke Skywalker had Obi Wan/Yoda, Gandhi’s mentor was Dadabhai Naoroji and in turn, Gandhi was an inspiration for people such as Martin Luther King, Jr and Nelson Mandela.

Why am I talking about mentors, basically I have a good opportunity to help guide an individual who is interested in the Quality Assurance field. Even though I do not know all the answers (or even the questions to ask), I offered to be a guide/mentor so that they can take their first steps towards being a tester/Quality Assurance Engineer.

They say that you should have objectives, otherwise what’s the point. So from my side of the ‘relationship’, my aims are:

  • To help spread the knowledge of what it means to be involved in this field and what it means to have a career rather than a job (although I’ve only been doing this for 9/10-ish years. Still a newbie in comparison.
  • I feel that having to explain concepts/come up with objectives means that I can gain a deeper understanding of topics and even go over the basics of testing.
  • I might get interested in another field and find new concepts that I would not have been exposed to.
  • I feel that I will get a chance to practise my listening skills, potential leadership skills and general soft skills.

I need to sit down with the individual and find out what their objectives are. Although the big one is to eventually get a job in the industry. So part of what I plan to suggest is to look at what is already out there and start to think critically (Bugs in the wild), read books (Agile testing, ISTQB Foundation Software Book, various blogs), I even suggested to start a blog so that they can chronicle their journey and look how they’ve changed over the months/years. I’m also big on good bug reports and communication is key with other people in the business.

I also suggested looking into the Software Testing Club, twitter, Weekend Testing, uTest and another project (which I will get onto later). I think that would be a good start.

So my question is to you, if you had the chance to mentor someone? What pearls of wisdom would you impart, what would you ‘teach’ them. How would you ensure that you’re being the ‘Best mentor you can be’.

QA Security

I had a nice training session yesterday regarding Web Application Security and as usual, I was all ears. This is the field that I eventually want to specialise in, I want to be able to define policies and procedures. I want to be able to get my hands on the latest tools and go wild on them. There is something about this type of testing that appeals to me. So for now to get more information regarding how to incorporate it into my working practise, I plan to read the OWASP version 3/4 testing guide and see what important information I can convey to management.

It’s amazing that the most highly listed vulnerability is the easiest to implement. It’s always nice to read about zero day exploits, DDOS attacks, the top 10 OWASP invulnerability. I plan to get backtrack and have a good attempt at it.

I’m going to get a copy of the Web Hackers Handbook and read it.

Python/Pygame Project.

So after much frustation, I finally got somewhere with my pet project. It is basically a side scroller where you get to shoot aliens. It was a biggie for me as I am trying to learn about Object Oriented Programming and how to use classes, how to __init__ the various characteristics so that other pieces of code can use it. The stage I was before was that I had the background, stars scrolling, the player ship but no aliens. For a good portion of the week, I was stuck on how to draw the aliens on screen and get them to move across.

I finally did it sort of.

I managed to get the aliens on screen and you can shoot them and you’re score goes up. What I need to do is limit the amount of aliens at once. That’s the problem. Here is the code so far:

</pre>
import os, pygame, random
from pygame.locals import *

# game constants
SCORE = 0
MAX_STARS = 45
screen_height = 640
screen_width = 700
SCREENRECT = Rect(0, 0, screen_height, screen_width)
main_dir = os.path.split(os.path.abspath(__file__))[0]
random.seed()

def imgcolorkey(image, colorkey):
 if colorkey is not None:
 if colorkey is -1:
 colorkey = image.get_at((0, 0))
 image.set_colorkey(colorkey, RLEACCEL)
 return image

def load_image(filename, colorkey = None):
 filename = os.path.join('images', filename)
 image = pygame.image.load(filename).convert()
 return imgcolorkey(image, colorkey)

class dummysound:
 def play(self): pass

def load_sound(file):
 if not pygame.mixer: return dummysound()
 file = os.path.join(main_dir, 'data', file)
 try:
 sound = pygame.mixer.Sound(file)
 return sound
 except pygame.error:
 print ('Warning, unable to load, %s' % file)
 return dummysound()

class SpriteSheet:
 def __init__(self, filename):
 self.sheet = load_image(filename)
 def imgat(self, rect, colorkey = None):
 rect = Rect(rect)
 image = pygame.Surface(rect.size).convert()
 image.blit(self.sheet, (0, 0), rect)
 return imgcolorkey(image, colorkey)
 def imgsat(self, rects, colorkey = None):
 imgs = []
 for rect in rects:
 imgs.append(self.imgat(rect, colorkey))
 return imgs

# each type of game object gets an init and an
# update function. the update function is called
# once per frame, and it is when each object should
# change its current position and state

class PlayerShip(pygame.sprite.Sprite):
 guns = [(65, 15)] #Co-ordinates of where the guns are. Used gimp to find co-ordinates
 reloadtime = 10 #How fast the bullets fly
 def __init__(self):
 pygame.sprite.Sprite.__init__(self, self.containers)
 self.rect = self.image.get_rect()
 self.justfired = 0
 self.reloadtimer = 0
 def update(self):
 self.rect.center = pygame.mouse.get_pos()
 self.rect = self.rect.clamp(SCREENRECT)
 if self.reloadtimer > 0:
 self.reloadtimer = self.reloadtimer -1
 firing = pygame.mouse.get_pressed()[0]
 if firing and (not self.justfired or self.reloadtimer == 0):
 self.reloadtimer = self.reloadtime
 for gun in self.guns:
 Shot((self.rect.left + gun[0], self.rect.top + gun[1]))
 self.justfired = firing

&nbsp;
class AlienDrone(pygame.sprite.Sprite):
 # Keep a master copy of the images so that they only need to
 # be loaded once pygame.image.load(os.path.join("images","aliendrone.png")).convert()
 # pygame.rect.Rect((screen_width, (random.randrange(0,screen_height))), self.image.get_size())

 def __init__(self):
 pygame.sprite.Sprite.__init__(self, self.containers)
 self.image = pygame.image.load(os.path.join("images","aliendrone.png")).convert()
 self.rect = pygame.rect.Rect((screen_width, (random.randrange(0,screen_height))), self.image.get_size())
 self.dx = -10

 def update(self):
 self.rect.centerx += self.dx

if self.rect.right < 0:
 self.kill()

class Explosion(pygame.sprite.Sprite):
 defaultlife = 12
 animcycle = 3
 images = []
 def __init__(self, actor):
 pygame.sprite.Sprite.__init__(self, self.containers)
 self.image = self.images[0]
 self.rect = self.image.get_rect(center=actor.rect.center)
 self.life = self.defaultlife

def update(self):
 self.life = self.life - 1
 self.image = self.images[self.life/self.animcycle%2]
 if self.life <= 0: self.kill()
class Shot(pygame.sprite.Sprite):
 speed = 20
 def __init__(self, pos):
 pygame.sprite.Sprite.__init__(self, self.containers)
 self.rect = self.image.get_rect()
 self.rect.center = pos

 def update(self):
 self.rect.move_ip(self.speed, 0 )
 if self.rect.x > screen_width:
 self.kill()

class Score(pygame.sprite.Sprite):
 def __init__(self):
 pygame.sprite.Sprite.__init__(self)
 self.font = pygame.font.Font(None, 20)
 self.font.set_italic(1)
 self.color = Color('white')
 self.lastscore = -1
 self.update()
 self.rect = self.image.get_rect().move(470, 450)

def update(self):
 if SCORE != self.lastscore:
 self.lastscore = SCORE
 msg = "Total Score: %d" % SCORE
 self.image = self.font.render(msg, 0, self.color)

stars = []
aliens = []

for i in range(MAX_STARS):
 star = [random.randrange(0,screen_height-1), random.randrange(0,screen_width-1), random.randrange(1,16)]
 stars.append(star)

def main():
 pygame.init()
 if pygame.mixer and not pygame.mixer.get_init():
 print ('Warning, no sound')
 pygame.mixer = None

# set the display mode
 winstyle = 0
 bestdepth = pygame.display.mode_ok(SCREENRECT.size, winstyle, 32)
 screen = pygame.display.set_mode(SCREENRECT.size, winstyle, bestdepth)
 pygame.mouse.set_visible(False)

# load images, assign to sprite classes
 # (do this before the classes are used, after screen setup)

 spritesheet = SpriteSheet('tyrian.shp.000000.png')
 Shot.image = spritesheet.imgat((0, 0, 13, 13), -1)
 PlayerShip.image = pygame.image.load(os.path.join("images","fighter.png")).convert()

img = load_image('enemyexplosion.png')
 Explosion.images = [img, pygame.transform.flip(img, 1, 1)]

 # decorate the game window
 pygame.display.set_caption('Prototype Demo')

# initialize game groups
 shots = pygame.sprite.Group()
 aliendrone = pygame.sprite.Group()
 all = pygame.sprite.RenderUpdates()

 #load the sound effects
 shoot_sound = load_sound('laser9.wav')

 if pygame.mixer:
 music = os.path.join(main_dir, 'data', 'choral1.wav')
 pygame.mixer.music.load(music)
 pygame.mixer.music.play(-1)

# assign default groups to each sprite class
 PlayerShip.containers = all
 Shot.containers = shots, all
 AlienDrone.containers = aliendrone, all
 Explosion.containers = all

 #Create Some Starting Values
 global score
 clock = pygame.time.Clock()

#initialize our starting sprites
 global SCORE
 if pygame.font:
 all.add(Score())

 clock = pygame.time.Clock()

playerShip = PlayerShip()
 drone = AlienDrone()

 while 1:

numberAlien = 5

 # get input
 for event in pygame.event.get():
 if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
 return
 if event.type == MOUSEBUTTONDOWN:
 shoot_sound.play()

# update all the sprites
 all.update()

# Detect collisions
 for alien in pygame.sprite.spritecollide(playerShip, aliendrone, 1):
 #boom_sound.play()
 #Explosion(aliendrone)
 #Explosion(playerShip)
 playerShip.kill()

for alien in pygame.sprite.groupcollide(shots, aliendrone, 1, 1).keys():
 #boom_sound.play()
 #Explosion(aliendrone)
 SCORE = SCORE + 1
 #draw the scene
 screen.fill((0, 0, 0))
 all.draw(screen)
 for star in stars:
 star[0] -= star[2]
 if star[0] < 0:
 star[0] = screen_height
 screen.set_at((star[0], star[1]), (255,255,255))

 pygame.display.flip()

aliendrone.add(AlienDrone())

 clock.tick(30)

 if pygame.mixer:
 pygame.mixer.music.fadeout(1000)
 pygame.time.wait(1000)
 pygame.quit()
if __name__ == '__main__': main()
<pre>

If that doesn’t look nice, the pastebin is here – http://pastebin.com/xkd7gME5

So what I plan to do is give this to my mentoree (is that a word)? and say, “Do some exploratory testing and see what you can find, anything that you find. Give me a good bug report and we’ll go from there”. Hopefully by doing it this way, it can be fun and still practise the skills needed.

Basic Requirements:

  • Aliens should come in from right to left
  • Player should be able to move around with the keys and/or mouse
  • Aliens should explode when shot at
  • Score should increment when aliens are destroyed
  • Game should display a start again when player is killed
  • All collisions should have a sound/explosion associated with it
  • Ship should not be able to go out of the screen bounds

Future scope

  • Different types of shooting depending on power-up
  • Levels – After a certain score, the number of aliens increase and the aliens get faster
  • High Score table
  • Since this is a proof of concept/learning game, the requirements are ever growing (to a point)

Here is the video so far. If you use the code and launch it (it does have music – which I got from freesound)

I want to do a variety of genres after this, (platform, an RPG – Think Zelda, a shoot em up and maybe a RTS). It should be interesting and I’m having fun and learning a lot. It’s helping me at work as I can now understand a little bit of what techno-babble they speak when it comes to code. Plus the amount of testing that I’ve had to do to get to this stage is mind blowing. (Does this work, no – Let’s try again).

Anyway, as usual  – If you have any comments, then please let me know.

TDD Prototype Game Progress and other QA Thoughts.

26 Mar

Well, I’m doing a course on edx.org  to do with learning Python (MITx: 6.00x Introduction to Computer Science and Programming) and over the weekend was the midterm exam. I managed to get a 78% which isn’t that bad considering I had to squeeze it in between family life and work. There are a few concepts that I’m still getting my head around such as the efficiency of code/searching (linear searching, binary searching). I tended to do better on the text manipulation problems than I did with the maths problems. I guess that’s how my brain is wired, but I’m trying.

The good thing about the course is that they really put a point on testing before you submit your code. They had a series of lectures regarding glass,white box testing and ensuring that you have a suite of test cases to ensure that the code that you have written covers a wide range of permutations. In this case, it really brings home the idea of only coding as much as you need to in order to get the code working. Like I said, it is hard but I’m enjoying it in my own way.

I’m glad that the next couple of weeks is to do with classes and objects as that’s where I’m going with my game. I’ve got the ship moving and the sprite to show up. What I’m having a little bit of problem with is the addition of the bullets. Although I know that I have to initialise it, give it co-ords, and then tell it the speed and tell it what to do.


#!user/bin/env python
import pygame, os
from pygame.locals import *
from random import randrange

# This class represents the bar at the bottom that the player controls
class Player(pygame.sprite.Sprite):

 # -- Attributes
 # Set speed vector
 change_x=0
 change_y=0

 # -- Methods
 # Constructor function
 def __init__(self,x,y):
 # Call the parent's constructor
 pygame.sprite.Sprite.__init__(self)

 # Set height, width
 self.image = pygame.image.load(os.path.join("images","starship.png")).convert()
 self.image.set_colorkey((255,255,255))

 # Make our top-left corner the passed-in location.
 self.rect = self.image.get_rect()
 self.rect.x = x
 self.rect.y = y

 # Change the speed of the player
 def changespeed(self,x,y):
 self.change_x+=x
 self.change_y+=y

 # Find a new position for the player
 def update(self):
 self.rect.x += self.change_x
 self.rect.y += self.change_y

# Call this function so the Pygame library can initialize itself
pygame.init()

MAX_STARS = 100
height,width = 640, 480
screen = pygame.display.set_mode((height, width))
clock = pygame.time.Clock()

# Set the title of the window
pygame.display.set_caption('Test')

# Create the player object
player = Player(50,50 )
movingsprites = pygame.sprite.Group((player))

clock = pygame.time.Clock()
done = False

stars = []
for i in range(MAX_STARS):
 star = [randrange(0,height-1), randrange(0,width-1), randrange(1,16)]
 stars.append(star)

score = 0

while done == False:

 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 done=True

 # Set the speed based on the key pressed
 if event.type == pygame.KEYDOWN:
 if event.key == pygame.K_LEFT:
 player.changespeed(-4,0)
 if event.key == pygame.K_RIGHT:
 player.changespeed(4,0)
 if event.key == pygame.K_UP:
 player.changespeed(0,-4)
 if event.key == pygame.K_DOWN:
 player.changespeed(0,4)

 # Reset speed when key goes up
 if event.type == pygame.KEYUP:
 if event.key == pygame.K_LEFT:
 player.changespeed(4,0)
 if event.key == pygame.K_RIGHT:
 player.changespeed(-4,0)
 if event.key == pygame.K_UP:
 player.changespeed(0,4)
 if event.key == pygame.K_DOWN:
 player.changespeed(0,-4)

 # This actually moves the player block based on the current speed
 player.update()

 # -- Draw everything
 # Clear screen
 screen.fill((0,0,0))

# Draw sprites
 movingsprites.draw(screen)

for star in stars:
 star[0] -= star[2]
 if star[0] < 0:
 star[0] = height
 screen.set_at((star[0], star[1]), (255,255,255))

# Flip screen
 pygame.display.flip()

 # Pause
 clock.tick(40)

pygame.quit()

All that does is implement a scrolling star field and a moveable sprite (provided that you have a suitable sized sprite).

It is hard to implement what I want to do, but that’s the challenge I’m having. Learning about the progress along the way. So as mentioned before, the next steps are:

  • Implement a level. I did scale an image of a nice star-field to be 2636×480 and put it in the background (so it would blit the background, then the scrolling stars, then the ship). It didn’t look to good to be honest.
  • When the level is done, find and design some aliens/bosses and tell the program where there are going to live and their actions(Finite State Machine).
  • Set up the guns, missiles and power-up classes so that the player can access it
  • Ensure that the ship does not go out of bounds
  • Design more levels once I have the above done.

As before, every time I make good progress, I shall upload to github where you will be able to have a look if you so wish. Any tips or tricks will be welcome. Of course, as time goes on, you will be able to test it if you wish and provide feedback. In a couple of weeks, a new course will be starting that should be helpful in my quest (https://www.coursera.org/course/interactivepython).

I have grand ideas, and as soon as I get to grips with the concepts, then I shall be doing small games to add to my ‘portfolio’. I want to do a platformer (I think my boy would like a game like that), an RPG and a text game. It shall be fun. One day, I’ll get to the level where I can use game engine frame works such as Panda36, UDK or Unity and develop my freelancer/x-wing clone.

Don’t worry, I’m not abandoning the QA world. I find it’ll all help me understand the software cycle of concept -> coding -> testing -> release -> riches:)

You never know, maybe the games could be used for Weekend testing purposes. Hey, if I get my head around it, maybe it could be a series of articles in the Testing Planet. I would just have to spin it to be more testing oriented.

In QA land, I’m still getting to grips with Data Driven Testing in order to navigate my work’s site. Any good books out there to read? I haven’t read a QA related book for a while. I think the last one was Agile Testing by Lisa Crispin and a few security related books.

Looks like the TestBash by the Software Testing Club was a success. One of these days, I will be going.


							

Learning Python the fun way.

21 Mar

So right now, I’m trying to learn Python to aid my testing career. I think it is good to learn it because:

  1. It enables me to understand what the developers go through when they create the feature/software/change.
  2. It’s good to keep learning
  3. I think that using Python will aid me in my QA work (I just need to figure out how to make it useful).
  4. Since I’m using Robot Framework, the underlying code is Python.
  5. It’s a good way to learn programming concepts and good practises in a way that is fun.

So I have done two things. I have signed on to edX course on Introduction to Computer Programming course. It’s a tough course (and least for me) that introduces how to think about problems through algorithms. It is tough but I think I’m learning something.

The other project that I’m doing is creating games using Pygame. My first get it out there project is a side ways shooter. The progress that I’ve got so far is a scrolling starfield and a spaceship that can be moved by the mouse. (It was working until I moved some stuff and now I need to get it working again *doh*

What I will try to do is post my updates on what I’ve done. Also hints and tips would be useful as well as improvements. I want to learn good practises so it would be good to learn how to organise the code for efficiency.

Of course, I shall allow it to be available so people can test it if they wish. I just need to get used to github.

EDIT – Set up a git hub, the link is: https://github.com/decosta

The

The things I need to do are:

  • Prevent the sprite from going off screen.
  • Incorporate  enemies and bosses. Some of the enemies will be using sin as their movement and others will be orbiting. Might as well figure out trig to make them fancy
  • Make the enemies semi smart
  • Make a level for the sprites to live on
  • Incorporate lives, scores and power-ups.
  • Possibly do a HUD to incorporate all of this.

By doing this, there is no way that I cannot test it and think of all the fun ways to break it.

Make the world scalable (so that when the game is in a window, it scales correctly to full screen).

Of course, this is all going to come in due time.

Still Here in the QA World.

15 Oct

Wow Just to let you all know that I’m enjoying my job as a ‘QA Engineer’ and I’m learning a lot every day. People and the work environment are great and all is good.

 

Life is good for 2012 – What I’ve been up to so far.

21 Feb

This is just going to be an update to what I’ve been doing so far and why my blog has been a bit quiet. I will get back on the testing side of things.

And relax…

I’ve got myself a new job. It’s an exciting time as my new title will be QA Engineer. Finally I’m an engineer. *smile*. I wonder if my partial aerospace engineering knowledge will be put to good use. I doubt it as I’m going to a web hosting company.

So what have I been doing to prepare. Well I started to research things about the tech that I will be using. I downloaded XAMPP and installed their tech management system and their bug tracker. That was interesting as I’ve never installed a LAMP stack before so trying to figure out PHP, config.inc files and why I couldn’t connect to the database was enlightening.

I’ve also been reading several technical books on various concepts such as

TCP/IP – Reading books like Learn TCP/IP in 24 hours

Browsing Security Sites (It may be an option in my new job) – If it is, this is one of the many avenues that I might want to head towards). – Sites include Ethical Hackers, InterN0t. I’m looking at certs such as E-LearnSecurity – Penetration Testing. I’m just trying to soak up as much information. Has anyone taken Security certs?

Reading various security books – Hacking for Dummies, Web Application Hacking cookbook.

I know that I was learning Ruby, but since this new job concentrates on Python, I’ve installed it to my shiny new notebook and will be going through examples. The same with SQL and PHP. I’ll no doubt learn more on the job.

I’m also trying to take in information about how networks and servers work, the idea of learning all the domain knowledge is making me buzz with excitement. I’m looking into the CCNA books and see what I can learn from them. Libraries are wonderous places.

Talking about my new netbook, I plan to do a dual boot of Linux and Win 7 so that I can learn the linux side of things. Learning Linux will help me greatly if I do want to go down the security side of Testing.

Continuing to learn about Testing techniques  as it is always interesting to learn new techniques and concepts.

There are times when I’m tired but I think it’ll be worth it as it is great to be learning all this knowledge and still be buzzed about it. It’s a great time.

One of the things I want to do before I start is to create a mind map of what I want to achieve/my objectives for the future. I can then present this to my team leader and see what objectives match up. Hopefully, it will show that I’m engaged and have a clear idea of what I want my future in testing to consist of.

Now all of the above isn’t connected to my new job but I’m enjoying the learning process so it’s good to keep the ball rolling. I just have to have a nice balance so that I do not burn myself out.

Of course, I’m still enjoying time with the family.

P.S – I’m still working on my decision tree – 20 question program. It’ll just have to be in Python.

Mythical Rubies – My Personal Project

20 Jan

It has been quite a busy week with various testing projects (both at work and at home). I have recently been looking at mobile applications and trying to understand how to test them. It really requires you to think about different aspects of the hardware and what is required to test. However, the exploratory nature has been awesome *smile*

When I think about it, since I’ve started the blog and delved into the various activities, I average about 11 hours per day in a testing related activity (testing, reading, programming). However, I do make sure to get quality family time, which is very important. It is all about the balance.

The lesson that I am really learning with testing different applications is developing the important ‘What If’ mindset.

What happens if I click here instead of here?
What happens if I remove the permissions from the third party system while still logged into the primary application?
 
What I am enjoying is developing these skills and then transferring them to my work life. It all helps to keep the interest level high and the passion alive.

I have been working through the Open Web Application Security Program, which has been a revelation; it is very interesting to think about all the different avenues that a tester could has to think about when they are testing a web application.  I believe that this aspect of testing is becoming very important as more people engage with the online world through banking and e-commerce. Currently I am on Ajax Security and Cross Site Scripting (exciting). The book that I am reading to aid me in this endeavour is the Web Application Security Cookbook by Ben Walther and Paco Hope.

I am also reading the Agile Testing book by Lisa Crispin and Janet Gregory, I have just finished the first chapter and I am enjoying it so far, the writing has a nice flow and pace. The book is engaging to read and once I have finished it, I will write a review on this blog. Although, I’m sure that most testing professionals have read this book.

As a member of the Software Testing club forum, I was inspired to learn Ruby for two purposes, 1) To learn a language that could be useful for my testing career and 2) To push my mental capabilities and keep the brain matter alive. I have a mentor that is also learning Ruby and he devised a program that took words in an array and constructed them into funny sentences. This got me thinking about the assignments that I did back in my Artificial Intelligence class in University (I loved that class – I guess Star Trek’s Data helped in that regard).

It was to write a program in Prolog that was a version of 20 questions. We had several topics to program and I chose Mythical Animals.

Therefore, what I will do is set myself a goal of writing a similar program in Ruby. It should be possible and I should have fun delving into the various subjects in order to solve this problem. My thinking about the assignment is as follows:

My logic is that everything will revolve around sets. We have the following creatures.

Minotaur
Satyr
Dragon
Centaur
Phoenix
Demon
Mermaid

What I need to do is find out the features of each creature and assign them to the name.

For example

Dragon = [Wings, Breathes Fire, Has Tail]

Minotaur = [Hybrid, Has Horns]

Then based on the answers given, the program will eliminate the sets based on the ‘Yes’ or ‘No’ answers.

What I need to do is split them all up into groups and then use a decision based logic to ask questions to the user. I hope that it will be a simplified ‘Guess Who’. If I crack this program, then I might try to replicate that game in Ruby.

This project can help me understand the aspects of code coverage, gem libraries and other juicy elements that Ruby can provide. I also get to test my own code.

I am looking forward to starting. I will post my progress. *Rubs hands*

My First Session with Weekend Testing America

8 Jan

I know I said that I would write about my coaching session that I had with Anne Marie Charrett, but I thought I would tell you all about the Weekend Testing of America that I was part of this past weekend (Saturday 7th January 2012). I was first made aware of Weekend Testing (http://www.weekendtesting.org) from my natural travels around the web searching for all things Software Testing.

So after reading Michael Larson’s recent blog post, http://www.mkltesthead.com/2012/01/less-wayward-weekend-testing-americas.html  and seeing that it was at a reasonable time for me, I decided to participate.

Six pm rolled around, Skype was launched and the session started. We were given the mission, which was to test an online game called Set.  It was a game where you had to make different combinations based on several factors. Before the participants got to start the main testing, we went to a practise site to learn the rules. Even now,  I know the theory but boy was I rubbish at the game. However, I was there to test not to really play.

I should note that I had to step away for a bit as I had to put my son to bed, but I had explained this so my time away from the computer was understood. I won’t go into too much of the details as I’m sure that a full transcript will be made available.

My initial thoughts about doing the Weekend Testing was that it would be full of testers discussing and testing at a level that would make me feel like an idiot. I thought it would be:

Tester A: Have you used the FCC CUTS VIDS Heurisitic

Tester B: No, I’m using the HWMST (How would my son test – e.g. Not taking the obvious happy path test) heuristic

Me: Huh

or that they would find 10 bugs and me with the 1. Now, I’m not a bad tester but I guess it was a case of not knowing exactly what it was all about. However, I like the challenge so I accepted. What I did find was that everyone was talkative and willing to help each other out. The chat window was moving with people reporting what they were finding. It was a very friendly atmosphere. Everyone there was a tester who wanted to learn and no egos were evident.

With Michael as the facilitator, he guided as nicely throughout the session and allowed us to do our thing without pressure.

After the hour was up, we had a debrief where it was discussed. Again, I didn’t get to test that much as I was in and out of the chat room/test site but this did not matter to the conversation as all points were listened to and acknowledged.

The issues/bugs were discussed with the group and the questions put forth where to me, very insightful and made you think about what we were testing.

  • One thought that did occur to me was in this particular test, do you have to know how to play the game in order to test properly?

In summary, the experience was a good one and one that I’m keen to experience again, I believe these sessions will be good to improve my testing knowledge and skills on a variety of applications/scenarios. More importantly, it is good for improving communication – Why is it an issue? It is a good exercise in backing up your reasons. Networking is a keen aspect of these testing workshops.

Three weeks ago, I didn’t know who Ajay Balamurugadas or Michael Larson’s  where, now I do. Before, they were just names in the software testing ether and then yesterday I got a chance to interact..Very surreal, very surreal.

As I attend more of the Weekend Testing sessions, I hope to bring you more feedback.

My score for the session 7/10 (mainly because I wasn’t there for some of it but the parts I was, I enjoyed).

Other notes of interest – Ajay Balamurugadas (http://enjoytesting.blogspot.com/) is heading up a new initiative:

Pair, Learn, Present
An initiative to practice presentation skills by pairing with testers.

http://pairlearnpresent.blogspot.com/

  • A fail safe environment to learn online presentation skills.
  • Pair with a partner, learn and present to the world.
  • An excellent opportunity to collaborate with other testers.

Contact Points:
Email: pairlearnpresent@gmail.com
Twitter: https://twitter.com/#!/PLP_Learning
Facebook: https://www.facebook.com/profile.php?id=100003306257247
Skype: PairLearnPresent

Notes:

Extra Extra – Read All About it – Daily Mirror Typo.

6 Jan

Well before I go on to the main focus of my blog post today, I just want to report a sighting of another bug in the wild. Not sure what class I would put this under but it was pretty evident that it should have been caught by doing a simple walkthrough. This one is in the realm of the newspaper called the Daily Mirror – Friday 6th January 2012.

There are two headlines on the paper.

There is an article regarding the sentencing of Stephen Lawerence (url here) where it states – Full Story on page 9.

There is a mast head at the top regarding the security issues of Wills and Catherine – Full Story on page 7.

However, when the user navigates to the appropriate pages, the stories are on the wrong pages.

Therefore here is my defect report.

Description: The Daily Mirror – dated Friday 6th January 2012 has two typographical errors on the front page. The errors in question are:

1) The Prince William and Duchess Catherine story regarding security issues with their abode indicates to the user that the full story is on page 7 of the newspaper.
2) The story regarding the sentencing of the killers of Stephen Lawrence states that the full story is on page 9 within the paper.

However, when the user navigates to the pages respectively, the stories as indicated by the front of the news paper is not found. Upon further investigation, the Prince William story is on page 9 and the Stephen Lawrence story is on page 7.

Please see screenshots for evidence.

Steps to Reproduce

1) For UK residents, buy the Daily Mirror dated Friday 6th January 2012. Alternatively borrow the newspaper if possible.
2) Assuming no visual impairment to the front page, look at the masthead and confirm that the Prince William story indicates that the story is on page 7.
3) Assuming no visual impairment to the front page, look at the Stephen Lawrence story and confirm that this story is on page 9.
4) Open the paper by turning the page till you reach page 7. This will be evident by the 7 in the top right hand corner. Look for the Prince William Story.

Result: The Stephen Lawrence story will be displayed instead of the Prince William story
Expected Result: The Prince William story should be displayed to the user.

5) Continue to page 9. Again, this will be indicated by the 9 in the top right hand corner. Look for the Stephen Lawrence story.

Result: The Prince William story will be displayed to the user.
Expected Result: The Stephen Lawrence story should be displayed to the user.

Impact on user: Confusion and double checking that the user has turned to the correct page.

As usual, comments and feedback are welcome – How can I improve my defect reports.

My next post will be about the coaching session I had with Anne-Marie Charrett (mavericktester.com/)

Asking Questions as a tester – Analysis Paralysis

29 Dec

Well I was mentally thinking about my Batman article and in true fashion – I failed at the first hurdle. Let’s look at a quick glance why.

The question was ‘Would Batman make a good Software Tester’.

If as testers, we are supposed to ask questions, then surely the first question should be, ‘Which Batman are we talking about?’ We could be talking about:

  • Adam West
  • Michael Keaton
  • Val Kilmer
  • George “Nipples Batman’ Clooney
  • Christian Bale

That’s just the movie batman, if you count the comics, you have numerous versions including Dick Grayson as Batman in the future. If we delve into his relationships with other characters as mentioned in the previous post, you could think about the different Catwomen (Halle Berry, Michelle Pffifer, the new look catwoman).

As you can see, you can go down the rabbit hole of questioning to the point of analysis paralysis and no testing has been done, the question is ‘When do you stop?’

Follow

Get every new post delivered to your Inbox.

Join 544 other followers