Quality Assurance requirements

What a QA engineer does


  • Write test plans from the requirements, specifications and test strategies
  • Use versioning systems to code test scripts
  • Create and perform test campaign whenever it is necessary to fit in the overall planning
  • Use bug tracking database to report bugs
  • Analyses test results
  • Reports results to the QA manager
  • Raise an alert when an important issue is likely to put in jeopardy the whole project

The practical type of job tasks and required possibilities


  • Understanding of documentation of all project’s products, including the json format protocols and data interactions specification.
  • Understanding of main business logic of product’s services, roles and behaviors of compounds.
  • Writing and execution of functional, installation, configuration, deployment, crash, load-balancing, durability and another kind of tests for services using public documented API with bush scripting (possible the php or the Python languages can be used too) and regular cli utilities for Linux OS.
  • Analyzing the results of tests and applications logs, reconstruction of behavior of main objects of business logic of the application services, seeking on misconfiguration and lacks of correspondence of real product behavior and documented specification.

What makes a good QA Engineer


Broad understanding of the product
To test efficiently a product, the QA engineer must know it well enough. This sounds obvious must unfortunately, this is often under-estimated. Knowing well the product includes also knowing how end-users expect it to work. Again this may sound obvious but remember that the biggest part in testing is black-box testing. The QA engineer must have a “customer-focus” vision.

But a good QA engineer must also know how the product is designed because the more you know the product, the better you’re able to test it. However, the QA engineer will have to analyse the design only after his black-box testplan is completed. Indeed, knowing the design can widely influence the test strategy. It is better to first write the test plan with a high-level vision, then getting more and more information to refine the testing.

Effective communication


Communication is an extremely important skill for a QA engineer. Of course, meetings (stand-up etc.) and status reports are part of the communication but more importantly, a QA engineer must be particularly efficient in the following tasks:

  • Direct communication with both Development and Product definition teams
  • Capability to communicate with technical and non-technical people
  • Having the diplomacy to say “no” when a bug is considered as not fixed
  • Having the diplomacy to communicate about a bug without “offensing” the developer. Developers may often feel offensed when a bug is submited. This is 100% natural. This is why the QA engineer must have the ability to “criticize without offensing”
  • Do not rely on “bug tracking” database for communication! there is nothing better that a bug tracking system to create “misunderstanding” between Development and QA teams

Creativity


Testing requires a lot of creativity. Bugs are often hidden and just performing the obvious positive tests will have only a few chances to actually find bugs. Hence, the QA engineer must use its creativity to figure out all the scenarios that are likely to detect a bug. In other words, the QA engineer must be able to “see beyond the obvious”.

Development knowledge


Quality Assurance requires knowledge about software development for two basic reasons:

  • Development capabilities are required to eventually code automated tests
  • If you know how to develop, you have better ideas on what is “dangerous” to code, so what to test more thoroughly

Driving for results


A good QA engineer never forgets that the ultimate goal is not only to find bugs but also have them fixed. Once a bug has been found and has been “acknowledged” by the development team, the QA engineer may be required to “convince” people to fix it.

Additionally, getting a nice automation framework with smart tools does not bring anything if it does not find any bug at the end.

  • Ask yourself if the automation is going to help to find more bugs and when
  • Prioritize your testing tasks on the only important criteria
    • How many bugs is this likely going to find?
    • How major will be the found bugs (detecting thousands of cosmetic bugs is irrelevant/useless – and often easy – until all major/show-stopper bugs have been found)?

Job Description Senior Quality Assurance Engineer

Purpose


Develops, publishes, and implements test plans for complex, multi-tier, distributed, applications throughout the full life-cycle of the software. Works on all ASM applications, including new and in production. Writes and maintains test automation. Publishes test results. Develops quality assurance standards. Defines and tracks quality assurance metrics such as defect densities and open defect counts.

Essential Duties

Quality Assurance


  • Defines, develops and implements quality assurance practices and procedures, test plans and other QA assessments.
  • Establishes standards and best practices for the use of the Rational Unified Process (“RUP”).
  • Develops automated testing systems using commercial tools, scripts and data set.
  • Ensures that all items follow the change management process and are entered and tracked through the change management software.
  • Works directly with appropriate ASM personnel to understand project concept, objectives and approach of software development projects.
  • Act as a consultant to ASM on quality methods, processes, and tools.
  • Able to work independently.

Testing


  • Defines scope and objectives of all levels of QA testing.
  • Participate in all aspects of testing, including functional, regression, load and system testing.
  • Responsible for the overall success of testing. Manages assigned projects from IT Quality Testing through final User Acceptance Testing.
  • Establishes the purpose and deliverables of the test effort.
  • Provides resource planning, management and resolution of issues that impede the test effort.
  • Assures the appropriate level of quality by the resolution of important defects by working with developers to ensure the software development process has an appropriate level of testing.
  • Creates effective manual and automated test plans, using a variety of toolsets, including Rational Test Manager. Rational Robot, and other automated tools.
  • Performs black box testing as required.

Job Description


  • Senior Quality Assurance Engineer
  • Works collaboratively with development during all stages of projects to provide in process testing results.
  • Coordinates groups of business personnel who test, evaluate and validate new functions and applications, and identify issues in software or services.
  • Records and reports on testing metrics.
  • Obtains final signoff for code releases to production from the appropriate Project Sponsor.
  • Track and report defects using appropriate tools such as Rational ClearQuest

Supervision


  • Works under the general supervision of the Application Development Specialist III. This position does not supervise other personnel.

Proven success in the following job competencies:


  • Analysis and Reporting
  • Business Planning and Management
  • Communication and Presentation
  • Customer Focus and Relationship Building
  • Champion for Change
  • Influencing
  • Information and Technology Proficiency
  • Leadership
  • Problem Solving and Decision Making
  • Technical Industry and/or Profession Expertise

Work Experience


  • Demonstrated ability to work well with business analysts, programmers and end users in a cross functional team.
  • At least one years minimum of software test experience.
  • At least one years experience testing multiple software projects simultaneously with J2EE or MS.NET applications.
  • At least one years experience working with a structured software methodology and software test experience.
  • Experienced user of Rational Test Manager/Robot/Requisite Pro or other automated testing and defect tracking applications.
  • Experienced user of SQL to create data sets.
  • Experience creating scripts for automating processes.
  • Thorough knowledge and understanding of Rational Unified Process (RUP) used for the software development life cycle including requirements definition, initial application design, testing, final implementation and operations.

QA Manager Required Skills

What a QA manager does


  • Planning, prioritization of all the test-related tasks (use proven project management tools such as the V-Cycle or Scrum methodology)
  • Writing the test strategies
  • Reviewing the test plans
  • Taking the responsibility of certain designs if people have not the required competencies
  • Code reviewing
  • Spreading expertise and good usage of tools such as bug-tracking database or versioning systems
  • Delegating…
  • Having people judgment skills to hire the right people
  • Writing performance review

What makes a good QA Manager

Being a good QA engineer


Of course, a good QA Manager is first of all a good QA engineer. It requires additional skill, though.

Effective communication


A QA Manager must be an extremely good communicator. This includes:

    • Report global status and risk analysis to top management
    • Capability to communicate with technical and non-technical people
    • Having the diplomacy to say “no” when global quality is not acceptable for release

Part of the communication is also the not so well appreciated “meetings”. Meetings are useful to a good organization, though.

  • For large teams, privilege:
    • Formal meetings
    • Scheduled and iterated on a regular basis
    • Production of agendas (pre-meeting) and minutes (post-meeting)
  • For small teams, privilege:
    • Stand-up meetings
    • Not necessarily planned
    • Agendas an minutes not necessarily needed

Having and spreading the “customer-focus” vision.

To have the QA engineers efficient in their work, they must have the desire to see customers happy.

Developing people


Developing people in a QA team as in any team is essential. The main goal is to improve the learning curve and this can be achieved by:

  • Spreading best practises you’ve learn along your whole career as QA engineer/manager
  • Organizing trainings (external as well as internal)
  • Working in group to share competencies
  • Leaving some time to people to let them learn by themselves

Bringing out creativity in others


This can be achieved by:

  • Organizing brainstorm sessions on a regular basis
  • Discussing a lot with QA engineers to lead them to have the “idea” instead of exposing directly the idea (if you’ve got it before them). A good QA manager teaches the “way of thinking” before anything else
  • Explaining any decision you take so that the team get the intellectual process that led to that decision
  • Working in group

Motivating people


Motivating people is also necessary. To do that:

  • Be motivated yourself
  • Share your motivation to the others
  • Explain why QA is an interesting job:
    • Too often, people are reluctant to do QA because:
      “QA = finding problems = people (dev.) don’t like me”
      The good way of seeing the job is:
      “QA = avoid future problems = people (dev./support/customers) like me”
    • The result of QA activities is immediately seen by the end-user which is quite valorising
    • Seeing a “manual operation” becoming a completely automated job is demonstrating how talented people can use machines to improve life
    • Thoroughly testing a feature A is often more complex than developing the feature A. It’s then a challenging (so enhancive) task.

Team building


A “dream” team is a team where all people are technically very good in their job but also like to work together and appreciate each others. To improve the chances to have this happening, a QA manager shouldn’t hesitate to:

  • Organize events (these do not necessarily require expensive activities!)
  • Have some chats together on the working hours about non-technical subjects when the whole team is present
  • Have QA people cooperating more with other teams (especially with Development team)
  • Have a beer together sometime 😉

Enabling changes


Changing for changing is a bad concept. Conversely, when something does not work, change is mandatory. The process of changing must go through 3 steps:

  • Making an audit to see what’s wrong in the process (i.e. difficult to maintain very similar test scripts)
  • Determine with the team what has to be changed (i.e. setup data-driven testing)
  • Implement the change

Decision making


In QA manager there is “manager”, which means that this includes making decisions.

  • Not being overwhelmed by stress
  • Not hesitating to recognize a mistake soon – it is much better than trying to workaround for years the issue
  • Taking innovative (or risky) initiatives
  • Not hesitating to change the processes at risk to destabilize some people if you think it is necessary

Sources about QA:


  • http://xqual.com/documentation/tutorial_qa_engineer_skills.html#skills
  • http://xqual.com/documentation/tutorial_qa_manager_skills.html
  • http://xqual.com/qa/books.html
  • http://programmers.stackexchange.com/questions/46425/what-are-good-requirements-for-a-qa-engineer
  • https://cours.etsmtl.ca/mgl801/private/Take%20home/Aurum%20A.,%20Wohlin%20C.%20-%20Chapter%208.pdf

Technical Writer Requirements

Duties


Technical writers produce information for audiences ranging from novices to technical experts. In general, they:

  • research subjects by analyzing reference materials (for example, specifications, blueprints, diagrams, maintenance manuals, reports, studies), consulting experts and using products themselves
  • gather information about target audience needs and analyze how to structure and format information to meet those needs
  • prepare a documentation plan for each document for monitoring progress and reporting
  • select appropriate technology and media to deliver technical information
  • create, follow and enforce the use of consistent style and formatting by developing a house style guide
  • write content for on-line help files, reference materials, educational materials, procedural and policy manuals, user guides, proposals, technical reports and instructional materials that explain the installation, operation and maintenance of mechanical, electronic and other equipment (for example, oil industry equipment or computer applications)
  • engage subject matter experts for the duration of the project especially highly complex subject matter
  • create auxiliary resources such as diagrams or interactive learning processes if required
  • rewrite and edit drafts after they have been reviewed by technical experts for accuracy
  • test products (especially software and hardware)
  • manage documentation projects including translation and localization if required.

Technical writers also may define terms in glossary format, index or cross-reference information, or obtain copyright permissions to reprint material. They may work independently or as part of a team that includes scientists, engineers, computer specialists, management personnel, editors, other writers, illustrators or photographers.

Working Conditions


Technical writers employed by medium-sized or large organizations generally work standard office hours.Overtime sometimes is required to meet deadlines. Contract writers working from home can set their own hours but must be prepared to work long hours when required to complete projects on time. However, many contract writers are required to work in offices during normal business hours. The pressure associated with having to meet deadlines can be stressful.

Personal Characteristics


Technical writers need the following characteristics:

  • the ability to communicate and work effectively with a variety of people (for example, engineers, educators, publishers, editors, art directors, film producers, readers of varying ability)
  • adaptability and flexibility
  • the ability to pay close attention to detail
  • an interest in new communications technologies, particularly those involving multi-media and the Internet
  • the ability to analyze and think critically
  • the ability to deal with and learn from criticism
  • the ability to handle multiple requests during high pressure periods
  • strong organizational, time management and project management skills.

They should enjoy gathering and synthesizing information, taking a methodical approach to explaining procedures, and finding out how things are built and operate.

Educational Requirements


There are no standard education requirements for technical writers but they generally need:

  • an ability to write well with an understanding of plain language, sentence structure, presentation formats and readability
  • a good grasp of grammar and the ability to express ideas clearly in writing
  • knowledge of technology (ranging from basic to expert depending on the project)
  • research, interviewing and analytical skills
  • editing and proofreading skills.

Technical writers are typically required to hold bachelor’s degrees. While some technical writers enter the occupation with degrees applicable to a technical specialty, most have a degree in English, journalism, communications or a related field. Some colleges and universities offer bachelor’s degree programs in English with concentrations in writing.
These programs consist of 4-year curricula that provide students with a solid grasp of English and communication skills so that they may write across a variety of genres and fields.
Courses may include:

  • Technical writing
  • Writing theory
  • Journalism
  • Fiction
  • Non-fiction
  • Editing
  • Web writing

Web content writer


  • Develop content strategies : apply information architecture & design principles for social media content.
  • Ability to write in a variety of styles and formats for multiple audiences.
  • Moderate online communities: review submissions, create tags,track useful content.
  • Online Content writing &  development for websites, new features & social media (Blog creation & submission).
  • Content writing / editing / Submitting for Case studies, Product Info, & testimonials, articles, newsletters.
  • Candidate should be able  to conduct online research, generate / develop original content for various websites and write creative unique content .

Technical Writer Qualifications


Along with strong writing and communication skills, technical writers must be proficient in online publishing software and programs. The ability to produce video and audio for the Web may be required for some positions. Technical writers often handle large amounts of complex data, so information management skills are necessary. A sharp eye for detail, research skills and the ability to work under strict deadlines are also important for a career in technical writing.

Sources about TW:

  • http://education-portal.com/articles/Technical_Writer_Job_Outlook_and_Educational_Requirements.html
  • http://en.wikipedia.org/wiki/Technical_writer
  • http://alis.alberta.ca/occinfo/content/requestaction.asp?aspaction=gethtmlprofile&format=html&occpro_id=71002832
  • http://www.writingassist.com/resources/articles/which-skill-sets-are-important-for-a-technical-writer/
  • http://www.school-for-champions.com/techwriting/skills_required.htm

Test tasks


  • Short outline essay about features of HCE-DC service. Up to three web pages with illustrative examples of some key technical or technological solutions. Aim – for IT market specialists and product managers.
  • Short scientific article about some solution or technology that is new and modern for this area of applications that is implemented in one of three key products – hce-node, DTM or DC services. Up to five web pages with scientific or technical illustrations or graphs visualized some principal schema or measured statistical data. Aim – for scientific area in target technology specialists.
  • Short observation article about one of three HCE’s project products: hce-node, DTM or DC service. Common description with set of key features review and general specifications with advantages and characteristics. Up to five web pages with schema or graphs of typical usage or configurations for different target project needs. Aim – for IT market specialists system integrators, architects and product managers promoters.
  • Short observation article of some user’s experience about installation and any test usage of HCE products from package or source code. From three to ten web pages step-by-step shows some stages of products deployment, configuration, installation and test usage with screenshots. Aim – advertizement and information space filling.

* Just one or several test task can be done and represented in free form as single document (doc, pdf, etc…) or web page located on any public resource.

C/C++ senior developer requirements

Practical skills:

  • C/C++ ANSI/ISO (STL, I/O, TCP, memory allocation, containers, algorithms, date-time), GNU – strong; POCO, Boost – is desirable.
  • gcc, make – strong.
  • SQL ANSI/ISO 1992-2008, mysql – well.
  • Linux applied development, I/O, system API, well known libraries: curl, gd, ImageMagick – well.
  • IDE – Eclipse, KDeveloper, Aptana – well.

Linux system development knowledge:

  • The networking, TCP/IP, TCP sockets (epoll, polling, select) – strong;
  • Asynchronous networking based on boost, libev, libevent, etc… – desirable.
  • The multithreading model based on POSIX definitions (threads, mutex, rwlock, bariiers, conditional variables) – strong.

Theoretical knowledge:

  • The complex data structures (Balanced trees (AVL, binary), stacks, lists, dictionaries, collections, hashes, maps, sets) – strong.
  • The internal data representation and bit-operations including the platform dependent – strong.
  • The synchronization resources access algorithms (readers-writers models) – strong.
  • Main data mining and processing algorithms – strong
  • Network programming – strong
  • The HTTP, HTML – strong.
  • Internet data formats – well.
  • The multi-byte encoding – well
  • The theory of compilers (finite automata, LL grammars) – basic.
  • The matrix math – basic.
  • The system modeling – basic.

Language:

  • Russian – strong, main.
  • English – technical reading, writing – well.

Project’s position:

The senior engineer developer of multi-threaded application’s system architecture, data structures and access algorithms, data access architecture, network data structures, protocols and processing systems, multithreaded applications architecture.

Projects role:

Data structures and system level API developer and support, senior system architecture engineer, system administrator. Implementation and support of data main structures and subsystems for fast data access index and specialized properties representation; implementation and support of algorithms of network data processing subsystems, internal application’s architecture construction; construction, implementation and support of mapping algorithms and highlighting techniques; multithreaded architecture solutions partially design, implementation and support; support of related words subsystem; support of unique identifiers subsystem; building and support of most of system internal applications architectures (Context Data repository (CDR), Context Data Handler (CDH), Highlight Handler (HH), Related Words (RW), Dictionary Handler (DH), Resources Proxy Cache (RPC), Connections Manager (CM)).

Common questions for interviewing and knowledge tests

Questions for C++/C developers

Programming and Unix/Linux


  1. How you understand the distributed client/server application structure?
  2. What is process and process environment?
  3. What is the coding, encoding and characters representation? What do you know about Unicode?
  4. How the Unix/Linux supports multi-byte characters?
  5. What are the libraries, components, interfaces and configuration management and how to use this in a developing of reusable Unix software?
  6. What is the lexical analysis and parsing? How to use it in a streaming data processing?
  7. Interpretation vs. compilation, hardware independent and machine code from your point of view.
  8. How you understand possible localization principles in application with UI and without?
  9. What do you know about well known libraries for Unix/Linux developers?

C/C++ language and programming in general


  1. What do you know about C preprocessor?
  2. How do you understanding the standard data types in C and C++?
  3. What are constants, variables, operators, expressions, casting and type conversion in C and C++ languages?
  4. How do you understand pointers and arrays language?
  5. How do you understand strings?
  6. How do you understand dynamic and static memory allocation?
  7. How do you understand process input/output management in C and C++ applications?
  8. How do you understand streamed and non-streamed I/O?
  9. How to make strings manipulation with multi-byte strings? Example of create/initialize copy, substring select etc. operations.
  10. What is a library? Static and shared libraries, what is it?
  11. What type of library load you know?
  12. How to use a shared library to create interfaces and API?
  13. How you understand threads and process threading in the Linux OS? Threads vs. process – your understanding.
  14. How you understand structuring the large project in C and C++. What do you know about headers, external variables, subdividing on several files, modules, classes, templates and libraries?
  15. How do you understand inheritance and virtualization in C++?
  16. How do you understand memory allocation in C++?
  17. How do you understand name spacing and scope in C++?
  18. How do you understand type casting differences in C and C++?

Unix/Linux C programming


  1. What does fork() do?
  2. What’s the difference between fork() and vfork()?
  3. Why use _exit rather than exit in the child branch of a fork?
  4. How can I get/set an environment variable from a program?
  5. How can I sleep for less than a second?
  6. How can I get a finer-grained version of alarm()?
  7. How can a parent and child process communicate?
  8. How do I get my program to act like a daemon?
  9. How can I look at process in the system like ps does?
  10. Given a pid, how can I tell if it’s a running program?
  11. What’s the return value of system/pclose/waitpid?
  12. How do I find out about a process’ memory usage?
  13. How do I change the name of my program (as seen by `ps`)?
  14. How can I find a process’ executable file?
  15. Why doesn’t my process get SIGHUP when its parent dies?
  16. How can I kill all descendents of a process?
  17. How to manage multiple connections?
  18. How do I use select()?
  19. How do I use poll()?
  20. How do I use epoll?
  21. How can I tell when the other end of a connection shuts down?
  22. What the best way to read directories?
  23. How can I find out if someone else has a file open?
  24. How do I `lock’ a file?
  25. How do I find out if a file has been updated by another process?
  26. How do I find the size of a file?
  27. How do I use named and unnamed pipes?
  28. How do I compare strings using wildcards?
  29. How do I compare strings using regular expressions?
  30. How can I debug the children after a fork?
  31. How to do inter process communications by standard libraries functions set (pipes, message queues, memory mapped IO, shared memory, signals, semaphores and sockets)?
  32. What is make, imake, CVS and RCS? How to use scripts to generate makefiles automatically?

Network programming and TCP/IP


  1. How you understand the main principles of TCP/IP?
  2. What are the TCP/IP services in the Internet, how you understand service application as a technology and how it works?
  3. What do you know about sockets?
  4. What do you know about TCP connections, data transferring, requesting and responses using TCP sockets?
  5. What are HTML, HTTP and WWW?
  6. What is MIME, how it is used in the WWW?
  7. What are cookies and sessions? How they used in WWW?
  8. What is content and content type header?
  9. What is HTML forms and form submission? How to handle forms submission?

Database programming


  1. What do you know about SQL as a declarative language?
  2. What do you know about the Data Definition Language (DDL) as a part of SQL?
  3. What do you know about the Data Manipulation Language (DML) part of SQL?
  4. What do you know about creating tables and indexes, selecting rows and columns, creating views, updating and deleting in SQL.
  5. What the relationship between C data types and Relational Database data types?
  6. What is embedded static and dynamic SQL?
  7. What is ODBC?
  8. What are embedded mysql libraries?
  9. What the main principles of database programming interface for C/C++ developers?
  10. What do you know about stored procedures and functions?
  11. What do you know about tablespaces, control files, memory structure, process structure in db servers?
  12. What do you know about principles of database analysis and tuning, CPU performance management, effective usage of indexes and SQL statements?