1 00:00:00,012 --> 00:00:03,482 As we discussed before software development efforts normally result 2 00:00:03,482 --> 00:00:06,127 in the delivery of a software product that satisfies 3 00:00:06,127 --> 00:00:09,879 the user requirements. So normally our software development organization 4 00:00:09,879 --> 00:00:13,127 will release this application to its final users, however, once 5 00:00:13,127 --> 00:00:16,090 the software is in operation many things can happen. 6 00:00:16,090 --> 00:00:18,950 So, for example, the environment might change. There might be 7 00:00:18,950 --> 00:00:21,940 new libraries. There might be new systems in which 8 00:00:21,940 --> 00:00:25,070 our software has to operate. Or they may be future 9 00:00:25,070 --> 00:00:27,950 requests, so the users may find out that, guess what, 10 00:00:27,950 --> 00:00:30,370 they want to do something different with the problem that 11 00:00:30,370 --> 00:00:32,835 we gave them. Or, again, and this is one of 12 00:00:32,835 --> 00:00:35,970 the most common occurrences, users might find problems with the 13 00:00:35,970 --> 00:00:38,307 software and may file bug reports and send the bug 14 00:00:38,307 --> 00:00:42,090 reports back to the software developer. These are the reasons 15 00:00:42,090 --> 00:00:46,420 why software maintenance is a necessary phase in software development. 16 00:00:46,420 --> 00:00:50,190 Software maintenance is the activity that sustains the software product 17 00:00:50,190 --> 00:00:53,780 as it evolves throughout its life cycle, specifically 18 00:00:53,780 --> 00:00:57,350 in response to bug reports, feature requests and 19 00:00:57,350 --> 00:01:00,890 environment changes. Development organisations perform three kinds of 20 00:01:00,890 --> 00:01:04,450 maintenance activities: corrective maintenance to eliminate problems with the 21 00:01:04,450 --> 00:01:07,740 code, perfective maintenance to accommodate feature request, and 22 00:01:07,740 --> 00:01:09,730 in some cases just to improve the software, for 23 00:01:09,730 --> 00:01:12,230 example, to make it more efficient, and finally, 24 00:01:12,230 --> 00:01:15,650 adaptive maintenance, to take care of the environment changes. 25 00:01:15,650 --> 00:01:18,470 And after this activities have been performed, the software developer 26 00:01:18,470 --> 00:01:21,540 will produce a new version of the application, will release it 27 00:01:21,540 --> 00:01:24,150 and the cycle will continue through out the lifetime of 28 00:01:24,150 --> 00:01:27,440 the software. That's why maintenance is a fundamental activity and a 29 00:01:27,440 --> 00:01:30,420 very expensive one. And one of the reasons why maintenance 30 00:01:30,420 --> 00:01:34,080 is expensive, that I want to mention now, is regression testing. 31 00:01:34,080 --> 00:01:37,180 During maintenance every time you modify your application you have 32 00:01:37,180 --> 00:01:41,120 to regression test the application, where regression testing is the activity 33 00:01:41,120 --> 00:01:44,010 of retesting software after it has been modified to make sure 34 00:01:44,010 --> 00:01:47,320 that the changes you perform to the software work as expected, 35 00:01:47,320 --> 00:01:51,540 and that your changes did not introduce any unforseen effect. I'm 36 00:01:51,540 --> 00:01:53,630 pretty sure that you're familiar with the case of a new 37 00:01:53,630 --> 00:01:56,000 version of the software being released and just a couple of 38 00:01:56,000 --> 00:01:59,260 days later another version being released to fix some problems that 39 00:01:59,260 --> 00:02:02,000 occor with the new version. These problems is what we call 40 00:02:02,000 --> 00:02:04,640 regression errors and they're what regression 41 00:02:04,640 --> 00:02:06,560 testing targets and tries to eliminate 42 00:02:06,560 --> 00:02:09,240 before the new version of the software is released into the world.