Skip to topic
    ← Back to course topics

    Programming and System Development — Eduqas A-Level Computer Science

    Test yourself on Programming and System Development with EDUQAS A-Level practice questions.

    Start free

    7 days Premium · Then free forever · No card, no charge

    Programming and System Development explained

    This topic covers the description, interpretation, and manipulation of various data structures, including arrays up to three dimensions, records, stacks, queues, trees, linked lists, and hash tables.

    Read the full explanation

    It requires learners to represent these structures using pointers and arrays, and to select and justify the most appropriate data structure for specific computational problems.

    What to demonstrate

    1. Correct description and manipulation of arrays (up to 3D), records, stacks, queues, trees, linked lists, and hash tables.
    2. Accurate representation of stacks and queues using pointers and arrays.
    3. Accurate representation of linked lists and trees using pointers and arrays.
    Show all 5 objectives
    1. Justification of data structure selection based on the requirements of a given situation.
    2. Correct manipulation of records and arrays.

    Programming and System Development exam tips

    Topic Overview

    Programming and System Development is a core component of the WJEC A-Level Computer Science specification, focusing on the principles and practices behind creating reliable, efficient, and maintainable software. This topic covers the entire software development lifecycle, from initial problem analysis and design through to implementation, testing, and maintenance. Students learn to apply computational thinking—decomposition, pattern recognition, abstraction, and algorithmic design—to break down complex problems into manageable parts. Mastery of this area is essential for developing robust programs and understanding how professional software is engineered.

    The topic emphasizes both theoretical concepts and practical skills. You will explore different programming paradigms (procedural, object-oriented, and functional), data structures (arrays, lists, stacks, queues, trees, graphs), and algorithms (searching, sorting, recursion). System development methodologies such as the waterfall model, agile, and extreme programming are examined, along with their suitability for different project types. Understanding these methodologies helps you appreciate the importance of planning, documentation, and iterative improvement in real-world software projects.

    This knowledge directly supports other A-Level topics like data structures, algorithms, and databases, and is fundamental for any further study or career in computing. By the end of this topic, you should be able to design, implement, test, and evaluate a solution to a given problem, using appropriate tools and techniques. The skills you develop here—logical reasoning, attention to detail, and systematic problem-solving—are highly valued in both academic and professional settings.

    Key Concepts
    • →Computational thinking: Decomposition, pattern recognition, abstraction, and algorithmic design form the foundation of problem-solving in programming.
    • →Software development life cycle (SDLC): Understand the phases—analysis, design, implementation, testing, evaluation, and maintenance—and how they apply in different methodologies (waterfall, agile).
    • →Programming paradigms: Procedural (sequence, selection, iteration), object-oriented (classes, objects, inheritance, polymorphism, encapsulation), and functional (pure functions, immutability, higher-order functions).
    • →Testing strategies: Unit testing, integration testing, system testing, and acceptance testing; black-box vs. white-box testing; and the importance of test data (normal, boundary, erroneous).
    • →Error handling and debugging: Types of errors (syntax, runtime, logic) and techniques for debugging (trace tables, breakpoints, print statements).
    Marking Points
    • Correct description and manipulation of arrays (up to 3D), records, stacks, queues, trees, linked lists, and hash tables.
    • Accurate representation of stacks and queues using pointers and arrays.
    • Accurate representation of linked lists and trees using pointers and arrays.
    • Justification of data structure selection based on the requirements of a given situation.
    • Correct manipulation of records and arrays.
    Examiner Tips
    • 💡Practice drawing the state of a stack or queue after a series of push/pop or enqueue/dequeue operations.
    • 💡Be prepared to write pseudocode for traversing trees or linked lists.
    • 💡Always link your choice of data structure to the specific performance requirements (e.g., speed of access vs. memory usage) of the scenario provided.
    • 💡Ensure you can distinguish between static and dynamic data structures.
    • 💡When answering questions about the SDLC, always justify your choice of methodology by linking it to project characteristics (e.g., size, risk, changing requirements). For example, agile is suitable for projects with evolving requirements, while waterfall works well for small, well-defined projects.
    • 💡In programming questions, show your working—especially for algorithms. Use trace tables or step-by-step explanations to demonstrate how your code handles different inputs. This can earn you method marks even if the final answer is incorrect.
    • 💡For testing questions, always specify the type of test (e.g., unit, integration) and give concrete examples of test data (normal, boundary, erroneous). Explain what each test case is checking and the expected outcome.
    Common Mistakes
    • Confusing the operational differences between stacks (LIFO) and queues (FIFO).
    • Failing to correctly implement pointer logic when representing linked lists or trees.
    • Inability to justify why one data structure is more efficient than another for a specific problem.
    • Incorrectly handling multi-dimensional array indexing.
    • Misconception: 'Testing is only done at the end of development.' Correction: Testing should be integrated throughout the SDLC, starting with unit tests during implementation and continuing with integration and system tests. Early testing catches bugs sooner, reducing cost and effort.
    • Misconception: 'Agile means no documentation.' Correction: Agile emphasizes working software over comprehensive documentation, but some documentation is still necessary—especially user stories, acceptance criteria, and technical notes for maintenance.
    • Misconception: 'Object-oriented programming is just about classes and objects.' Correction: OOP also involves key principles like inheritance, polymorphism, encapsulation, and abstraction. Simply using a class does not make a program object-oriented; you must apply these principles correctly.
    Frequently Asked Questions
    What is the difference between black-box and white-box testing?
    Black-box testing treats the software as a 'black box' where you only know the inputs and expected outputs, without looking at the internal code. It focuses on functionality and user requirements. White-box testing, on the other hand, examines the internal structure and logic of the code, ensuring all paths, conditions, and loops are tested. Both are important: black-box finds missing or incorrect features, while white-box finds hidden bugs in the code.
    How do I choose between waterfall and agile for a project?
    Waterfall is best for projects with clear, fixed requirements and low risk of change, such as a simple calculator app. It provides a structured, sequential approach with detailed documentation. Agile is better for projects where requirements may evolve, like a social media platform, as it allows for iterative development and frequent feedback. Consider factors like project size, team experience, client involvement, and the need for flexibility.
    What is the purpose of a trace table?
    A trace table is used to manually simulate the execution of an algorithm, tracking the values of variables at each step. It helps you verify that the algorithm works correctly for given inputs, and is especially useful for debugging logic errors. By recording the state of variables after each operation, you can identify where the algorithm deviates from expected behaviour.
    Can you explain polymorphism with an example?
    Polymorphism allows objects of different classes to be treated as objects of a common superclass, with each subclass providing its own implementation of a method. For example, consider a superclass 'Shape' with a method 'calculateArea()'. Subclasses 'Circle' and 'Rectangle' override this method to compute area differently. You can then write code that works with any Shape object, calling calculateArea() without knowing the specific type, enabling flexibility and reusability.
    What are the key differences between procedural and object-oriented programming?
    Procedural programming focuses on writing a sequence of instructions (procedures or functions) that operate on data, often using global variables. It is simple and suitable for small programs. Object-oriented programming (OOP) organizes code into objects that contain both data (attributes) and methods (behaviours). OOP promotes encapsulation (hiding data), inheritance (reusing code), and polymorphism (flexible method calls), making it better for large, complex systems.
    How do I handle errors in my program effectively?
    Effective error handling involves anticipating potential errors (e.g., invalid input, file not found) and using try-catch blocks (or similar constructs) to gracefully manage them. Always provide meaningful error messages to the user and log errors for debugging. Additionally, validate inputs early, use assertions during development, and implement fallback mechanisms. Avoid using generic catch-all blocks; instead, handle specific exception types to maintain control flow.