diff --git a/tests/scripts/generate_test_code.py b/tests/scripts/generate_test_code.py
index b2d4912..047b130 100755
--- a/tests/scripts/generate_test_code.py
+++ b/tests/scripts/generate_test_code.py
@@ -19,22 +19,18 @@
 # This file is part of mbed TLS (https://tls.mbed.org)
 
 """
-Test Suite code generator.
+This script dynamically generates test suite code for Mbed TLS, by
+taking following input files.
 
-Generates a test source file using following input files:
-
-test_suite_xyz.function     -   Read test functions from test suite
-                                functions file.
-test_suite_xyz.data         -   Read test functions and their
-                                dependencies to generate dispatch and
-                                dependency check code.
+test_suite_xyz.function     -   Test suite functions file contains test
+                                functions.
+test_suite_xyz.data         -   Contains test case vectors.
 main_test.function          -   Template to substitute generated test
-                                function dispatch code, dependency
-                                checking code.
-platform .function          -   Read host or target platform
-                                implementation for dispatching test
-                                cases from .data file.
-helpers.function -              Read common reusable functions.
+                                functions, dispatch code, dependency
+                                checking code etc.
+platform .function          -   Platform specific initialization and
+                                platform code.
+helpers.function -              Common/reusable data and functions.
 """
 
 
@@ -43,7 +39,6 @@
 import re
 import sys
 import argparse
-import shutil
 
 
 BEGIN_HEADER_REGEX = '/\*\s*BEGIN_HEADER\s*\*/'
@@ -59,39 +54,39 @@
 END_CASE_REGEX = '/\*\s*END_CASE\s*\*/'
 
 
-class InvalidFileFormat(Exception):
-    """
-    Exception to indicate invalid file format.
-    """
-    pass
-
-
 class GeneratorInputError(Exception):
     """
-    Exception to indicate error in the input to the generator.
+    Exception to indicate error in the input files to this script.
+    This includes missing patterns, test function names and other
+    parsing errors.
     """
     pass
 
 
 class FileWrapper(io.FileIO):
     """
-    File wrapper class. Provides reading with line no. tracking.
+    This class extends built-in io.FileIO class with attribute line_no,
+    that indicates line number for the line that is read.
     """
 
     def __init__(self, file_name):
         """
-        Init file handle.
+        Instantiate the base class and initialize the line number to 0.
 
         :param file_name: File path to open.
         """
         super(FileWrapper, self).__init__(file_name, 'r')
         self.line_no = 0
 
-    # Override the generator function in a way that works in both
-    # Python 2 and Python 3.
     def __next__(self):
         """
-        Iterator return impl.
+        Python 2 iterator method. This method overrides base class's
+        next method and extends the next method to count the line
+        numbers as each line is read.
+
+        It works for both Python 2 and Python 3 by checking iterator
+        method name in the base iterator object.
+
         :return: Line read from file.
         """
         parent = super(FileWrapper, self)
@@ -105,6 +100,8 @@
             # strip any whitespaces added in the decoding process.
             return line.decode(sys.getdefaultencoding()).strip() + "\n"
         return None
+
+    # Python 3 iterator method
     next = __next__
 
 
@@ -113,15 +110,22 @@
     Split NOT character '!' from dependency. Used by gen_deps()
 
     :param dep: Dependency list
-    :return: list of tuples where index 0 has '!' if there was a '!'
-             before the dependency string
+    :return: string tuple. Ex: ('!', MACRO) for !MACRO and ('', MACRO) for
+             MACRO.
     """
     return ('!', dep[1:]) if dep[0] == '!' else ('', dep)
 
 
 def gen_deps(deps):
     """
-    Generates dependency i.e. if def and endif code
+    Test suite data and functions specifies compile time dependencies.
+    This function generates C preprocessor code from the input
+    dependency list. Caller uses the generated preprocessor code to
+    wrap dependent code.
+    A dependency in the input list can have a leading '!' character
+    to negate a condition. '!' is separated from the dependency using
+    function split_dep() and proper preprocessor check is generated
+    accordingly.
 
     :param deps: List of dependencies.
     :return: if defined and endif code with macro annotations for
@@ -135,8 +139,8 @@
 
 def gen_deps_one_line(deps):
     """
-    Generates dependency checks in one line. Useful for writing code
-    in #else case.
+    Similar to gen_deps() but generates dependency checks in one line.
+    Useful for generating code with #else block.
 
     :param deps: List of dependencies.
     :return: ifdef code
@@ -173,7 +177,12 @@
 
 def gen_dispatch(name, deps):
     """
-    Generates dispatch code for the test function table.
+    Test suite code template main_test.function defines a C function
+    array to contain test case functions. This function generates an
+    initializer entry for a function in that array. The entry is
+    composed of a compile time check for the test function
+    dependencies. At compile time the test function is assigned when
+    dependencies are met, else NULL is assigned.
 
     :param name: Test function name
     :param deps: List of dependencies
@@ -198,11 +207,12 @@
 
 def parse_until_pattern(funcs_f, end_regex):
     """
-    Parses function headers or helper code until end pattern.
+    Matches pattern end_regex to the lines read from the file object.
+    Returns the lines read until end pattern is matched.
 
     :param funcs_f: file object for .functions file
     :param end_regex: Pattern to stop parsing
-    :return: Test suite headers code
+    :return: Lines read before the end pattern
     """
     headers = '#line %d "%s"\n' % (funcs_f.line_no + 1, funcs_f.name)
     for line in funcs_f:
@@ -210,7 +220,7 @@
             break
         headers += line
     else:
-        raise InvalidFileFormat("file: %s - end pattern [%s] not found!" %
+        raise GeneratorInputError("file: %s - end pattern [%s] not found!" %
                                 (funcs_f.name, end_regex))
 
     return headers
@@ -218,7 +228,10 @@
 
 def parse_suite_deps(funcs_f):
     """
-    Parses test suite dependencies.
+    Parses test suite dependencies specified at the top of a
+    .function file, that starts with pattern BEGIN_DEPENDENCIES
+    and end with END_DEPENDENCIES. Dependencies are specified
+    after pattern 'depends_on:' and are delimited by ':'.
 
     :param funcs_f: file object for .functions file
     :return: List of test suite dependencies.
@@ -231,7 +244,7 @@
         if re.search(END_DEP_REGEX, line):
             break
     else:
-        raise InvalidFileFormat("file: %s - end dependency pattern [%s]"
+        raise GeneratorInputError("file: %s - end dependency pattern [%s]"
                                 " not found!" % (funcs_f.name, END_DEP_REGEX))
 
     return deps
@@ -239,7 +252,9 @@
 
 def parse_function_deps(line):
     """
-    Parses function dependencies.
+    Parses function dependencies, that are in the same line as
+    comment BEGIN_CASE. Dependencies are specified after pattern
+    'depends_on:' and are delimited by ':'.
 
     :param line: Line from .functions file that has dependencies.
     :return: List of dependencies.
@@ -256,7 +271,9 @@
 
 def parse_function_signature(line):
     """
-    Parsing function signature
+    Parses test function signature for validation and generates
+    a dispatch wrapper function that translates input test vectors
+    read from the data file into test function arguments.
 
     :param line: Line from .functions file that has a function
                  signature.
@@ -266,6 +283,7 @@
     args = []
     locals = ''
     args_dispatch = []
+    # Check if the test function returns void.
     m = re.search('\s*void\s+(\w+)\s*\(', line, re.I)
     if not m:
         raise ValueError("Test function should return 'void'\n%s" % line)
@@ -326,7 +344,7 @@
             name = 'test_' + name
             break
     else:
-        raise InvalidFileFormat("file: %s - Test functions not found!" %
+        raise GeneratorInputError("file: %s - Test functions not found!" %
                                 funcs_f.name)
 
     for line in funcs_f:
@@ -334,7 +352,7 @@
             break
         code += line
     else:
-        raise InvalidFileFormat("file: %s - end case pattern [%s] not "
+        raise GeneratorInputError("file: %s - end case pattern [%s] not "
                                 "found!" % (funcs_f.name, END_CASE_REGEX))
 
     # Add exit label if not present
@@ -353,7 +371,8 @@
 
 def parse_functions(funcs_f):
     """
-    Returns functions code pieces
+    Parses a test_suite_xxx.function file and returns information
+    for generating a C source file for the test suite.
 
     :param funcs_f: file object of the functions file.
     :return: List of test suite dependencies, test function dispatch
@@ -427,7 +446,13 @@
 
 def parse_test_data(data_f, debug=False):
     """
-    Parses .data file
+    Parses .data file for each test case name, test function name,
+    test dependencies and test arguments. This information is
+    correlated with the test functions file for generating an
+    intermediate data file replacing the strings for test function
+    names, dependencies and integer constant expressions with
+    identifiers. Mainly for optimising space for on-target
+    execution.
 
     :param data_f: file object of the data file.
     :return: Generator that yields test name, function name,
@@ -478,7 +503,8 @@
 
 def gen_dep_check(dep_id, dep):
     """
-    Generate code for the dependency.
+    Generate code for checking dependency with the associated
+    identifier.
 
     :param dep_id: Dependency identifier
     :param dep: Dependency macro
@@ -505,7 +531,8 @@
 
 def gen_expression_check(exp_id, exp):
     """
-    Generates code for expression check
+    Generates code for evaluating an integer expression using
+    associated expression Id.
 
     :param exp_id: Expression Identifier
     :param exp: Expression/Macro
@@ -527,8 +554,9 @@
 
 def write_deps(out_data_f, test_deps, unique_deps):
     """
-    Write dependencies to intermediate test data file.
-    It also returns dependency check code.
+    Write dependencies to intermediate test data file, replacing
+    the string form with identifiers. Also, generates dependency
+    check code.
 
     :param out_data_f: Output intermediate data file
     :param test_deps: Dependencies
@@ -553,8 +581,9 @@
 
 def write_parameters(out_data_f, test_args, func_args, unique_expressions):
     """
-    Writes test parameters to the intermediate data file.
-    Also generates expression code.
+    Writes test parameters to the intermediate data file, replacing
+    the string form with identifiers. Also, generates expression
+    check code.
 
     :param out_data_f: Output intermediate data file
     :param test_args: Test parameters
@@ -588,7 +617,7 @@
 
 def gen_suite_deps_checks(suite_deps, dep_check_code, expression_code):
     """
-    Adds preprocessor checks for test suite dependencies.
+    Generates preprocessor checks for test suite dependencies.
 
     :param suite_deps: Test suite dependencies read from the
             .functions file.
@@ -614,8 +643,14 @@
 
 def gen_from_test_data(data_f, out_data_f, func_info, suite_deps):
     """
-    Generates dependency checks, expression code and intermediate
-    data file from test data file.
+    This function reads test case name, dependencies and test vectors
+    from the .data file. This information is correlated with the test
+    functions file for generating an intermediate data file replacing
+    the strings for test function names, dependencies and integer
+    constant expressions with identifiers. Mainly for optimising
+    space for on-target execution.
+    It also generates test case dependency check code and expression
+    evaluation code.
 
     :param data_f: Data file object
     :param out_data_f:Output intermediate data file
@@ -660,15 +695,16 @@
 
 
 def generate_code(funcs_file, data_file, template_file, platform_file,
-                  help_file, suites_dir, c_file, out_data_file):
+                  helpers_file, suites_dir, c_file, out_data_file):
     """
-    Generate mbed-os test code.
+    Generates C source code from test suite file, data file, common
+    helpers file and platform file.
 
     :param funcs_file: Functions file object
     :param data_file: Data file object
     :param template_file: Template file object
     :param platform_file: Platform file object
-    :param help_file: Helper functions file object
+    :param helpers_file: Helper functions file object
     :param suites_dir: Test suites dir
     :param c_file: Output C file object
     :param out_data_file: Output intermediate data file object
@@ -678,7 +714,7 @@
                        ('Data file', data_file),
                        ('Template file', template_file),
                        ('Platform file', platform_file),
-                       ('Help code file', help_file),
+                       ('Helpers code file', helpers_file),
                        ('Suites dir', suites_dir)]:
         if not os.path.exists(path):
             raise IOError("ERROR: %s [%s] not found!" % (name, path))
@@ -686,9 +722,9 @@
     snippets = {'generator_script' : os.path.basename(__file__)}
 
     # Read helpers
-    with open(help_file, 'r') as help_f, open(platform_file, 'r') as \
+    with open(helpers_file, 'r') as help_f, open(platform_file, 'r') as \
             platform_f:
-        snippets['test_common_helper_file'] = help_file
+        snippets['test_common_helper_file'] = helpers_file
         snippets['test_common_helpers'] = help_f.read()
         snippets['test_platform_file'] = platform_file
         snippets['platform_code'] = platform_f.read().replace(
@@ -730,36 +766,36 @@
     :return:
     """
     parser = argparse.ArgumentParser(
-        description='Generate code for mbed-os tests.')
+        description='Dynamically generate test suite code.')
 
     parser.add_argument("-f", "--functions-file",
                         dest="funcs_file",
                         help="Functions file",
-                        metavar="FUNCTIONS",
+                        metavar="FUNCTIONS_FILE",
                         required=True)
 
     parser.add_argument("-d", "--data-file",
                         dest="data_file",
                         help="Data file",
-                        metavar="DATA",
+                        metavar="DATA_FILE",
                         required=True)
 
     parser.add_argument("-t", "--template-file",
                         dest="template_file",
                         help="Template file",
-                        metavar="TEMPLATE",
+                        metavar="TEMPLATE_FILE",
                         required=True)
 
     parser.add_argument("-s", "--suites-dir",
                         dest="suites_dir",
                         help="Suites dir",
-                        metavar="SUITES",
+                        metavar="SUITES_DIR",
                         required=True)
 
-    parser.add_argument("--help-file",
-                        dest="help_file",
-                        help="Help file",
-                        metavar="HELPER",
+    parser.add_argument("--helpers-file",
+                        dest="helpers_file",
+                        help="Helpers file",
+                        metavar="HELPERS_FILE",
                         required=True)
 
     parser.add_argument("-p", "--platform-file",
@@ -789,7 +825,7 @@
             os.makedirs(d)
 
     generate_code(args.funcs_file, args.data_file, args.template_file,
-                  args.platform_file, args.help_file, args.suites_dir,
+                  args.platform_file, args.helpers_file, args.suites_dir,
                   out_c_file, out_data_file)
 
 
