a type of computer program that, when executed, replicates itself by modifying other computer programs and inserting its own code