IB Computer Science/Science Systems Life Cycle and Software Development/Software Design
Software Design 
Data Required 
Modularity is a concept that has applications in the contexts of computer science, particularly programming, as well as cognitive science in investigating the structure of mind. A module can be defined variously, but generally must be a component of a larger system, and operate within that system independently from the operations of the other components.
Modularity in Computer Science
Modularity is the property of computer programs that measures the extent to which they have been composed out of separate parts called modules. A modular approach to programming is gaining popularity in fields of artificial intelligence systems integration, where a large-scale general A.I. system is composed of modules that each serve a specific purpose and communicate with each other to produce the system's overall behavior. Programs that have many direct interrelationships between any two random parts of the program code are less modular than programs where those relationships occur mainly at well-defined interfaces between modules.
Prototyping is the process of quickly putting together a working model (a prototype) in order to test various aspects of a design, illustrate ideas or features and gather early user feedback. Prototyping is often treated as an integral part of the system design process, where it is believed to reduce project risk and cost. Often one or more prototypes are made in a process of incremental development where each prototype is influenced by the performance of previous designs, in this way problems or deficiencies in design can be corrected. When the prototype is sufficiently refined and meets the functionality, robustness, manufacturability and other design goals, the product is ready for production.
see prototyping for a more detailed explaination
Prototyping Approach 
End Users 
The end user is a popular concept in software engineering, referring to an abstraction of the group of persons who will ultimately operate a piece of software (i.e. the expected user or target-user). This abstraction is meant to be useful in the process of designing the user interface, and is therefore built on a relevant subset of any user's characteristics which may include which computer interfaces he/she is comfortable with (having used them before or because of their inherent simplicity), his/her technical expertise and degree of knowledge in specific fields or disciplines, and any other information which is believed to be relevant in a specific project. When little constraints are imposed on the end-user category, i.e. when writing/publishing programs for the general public, it is common practice to expect minimal technical expertise or previous training in the use of computer interfaces. This is also the general meaning associated with the term end user (see also Luser). In this context, intuitive GUIs (possibly with a touch interface) are usually preferred over more sophisticated command line interfaces for the sake of usability.
For Standard Level, only a qualitative treatment or a specific calculation of the efficiency is expected. "O" or BigO notation is required only at HL.
Testing implies tracing sections of an algorithm, including responses to errors ("dry runs"), as well as the design of test cases, which are then executed. Students must be able to propose suitable test data, and give reasons. Debugging has the components of detecting, diagnosing and correcting errors shown up by testing.
Tools Of Debugging 
Ideally, students should use an integrated development environment (IDE) combining an editor, interpreter or compiler and debugging tools, but this is not a requirement.