Software is a product that gives, instructions that tell a computer what to do. Software comprises of the entire set of programs, procedures, and routines associated with the operation of a computer system. The term was coined to differentiate these instructions from hardware—i.e., the physical components of a computer system. A set of instructions that directs a computer’s hardware to perform a task is called a program, or software program.
Software engineering is the systematic approach to the development, operation, maintenance, and retirement of software. There are few fundamental problems that software engineering faces.
The Problem of scale: A fundamental problem of software engineering is the problem of scale; development of a very large system requires a very different set of methods compared to developing a small system. In other words, the methods that are used for developing small systems generally do not scale up to large systems. A different set of methods has to be used for developing large software. Any large project involves the use of technology and project management.
Most problems are software problems. Some are definitely hardware problems. And some can be caused by one or the other. This chart lists 16 of the most common problems. Knowing where to start troubleshooting can save you lots of time. And if you need to call in the cavalry, you’ll know which customer service department to call.
The following are identified software problems
1. Incorrect calculations – This is seen in functions such as financial and date calculations. The key determinant is whenever mathematical functions and mathematical operators are involved.
2. Incorrect data edits – This is when the software does not apply existing data edits correctly. For example, a data edit may be coded to prohibit the entry of the day of the month greater than “31”, but does not allow for the month. This would allow the entry of February 30 and other invalid dates.
3. Ineffective data edits – This is when data edits are in place and working correctly, yet still fail to prevent incorrect data from being entered into the system. An example of this is an alphanumeric address field that allows spaces to be entered before any numbers or letters in the address. Therefore, when searches or sorts are performed on the address field, the search or sort may not find the intended address.
4. Incorrect coding/implementation of business rules – This refers to the one of the most common sources of software problems – the mistakes that occur between what is intended to be developed or implemented and what is actually delivered. These defects can be traced back to incorrect, missing, or vague system requirements specifications, or to the misinterpretation of requirements specifications. If you are asking, “What specifications? What requirements?”, the incorrect coding or implementation of business rules is probably a common problem for you.
5. Inadequate software performance – This refers to slow system response times and transaction throughput rates.
6. Confusing or misleading data – This means that the data shown to users may be correct, but the users might not fully understand how to interpret the data. This is not a trivial problem. Lives have been lost because of someone’s failure to take the correct actions based on the data delivered to them from a computer system.
7. Software that is difficult to use – Many people have experienced first-hand the frustration of using software that is cumbersome, difficult to navigate, and requires several steps to perform simple tasks. This problem relates to a lack of understanding of how humans interact with computers and is also the result of a history of modifications that are not planned and coordinated to account for ease of use. For example, the addition of numerous workarounds over a period of time in legacy systems can have the overall effect of convoluting the original system design.
8. Obsolete software – Software that no longer works due to new hardware or support software changes – This refers to software that is based on functions found in older versions of databases and operating systems. An example of this can be found in old COBOL code that will not compile on new compilers due to the use of verbs that are no longer supported in the compiler. Many vendors try to make new releases of support software upwardly compatible, but there are usually cases where one minor area of non-support from the base system can cause a major revision of the system. The only other option is not to upgrade the support software. This decision can be justified for the short-term, but a point is usually reached where the software must either be replaced or modified.
9. Inconsistent processing – Software that only works correctly in one environment – This refers to software that has been designed for only one environment and cannot be easily transported and used in another environment. Of course, some software is designed to work in only one environment. However, if an organization adopts new technology that requires software be portable to new environments, then the software will need to be modified or replaced if it can’t meet the new technical requirements. An example of this is software that works in an MS-DOS environment, but will not work in a Microsoft Windows environment.
10. Difficult to maintain and understand – This refers to the ability of a programmer or developer to maintain the software. To maintain software, the person performing the maintenance must first analyze and understand the software. Much of the software in existence today was initially written in an unstructured manner and then patched on an as-needed basic over a long period of time. This type of software structure results in what is known as “spaghetti code,” which is complex and unstructured. To add to the problem, when changes are made to this kind of software, there is a higher risk of creating new defects unintentionally.
11. Unreliable results or performance – This means that the software does not deliver consistently correct results or cannot be depended to work correctly each time it is used.
12. Inadequate support of business needs or objectives – This refers to software that is inflexible to meeting business needs. For example, a system may be difficult to modify to meet and organization’s needs or may lack features to allow the users to customize business rules.
13. No longer supported by the vendor – This occurs when a vendor ceases to support a particular software product. This can occur due to the vendor’s decision to no longer support a product, due to the vendor going out of business, or the vendor selling the product to another vendor.
14. Incorrect or inadequate interfaces with other systems – This means that the software does not correctly accept input (data, control, parameters, etc.) from other systems or sends incorrect output (data, control, parameters, print, etc.) to other systems. An example of this is when a system has an electronic data interfaces (EDI) with external systems, but does not correctly receive or format the information.
15. Incorrect matching and merging of data – This refers to situations where data is obtained from one source and matched or merged with data from another source. Examples include sorting multiple files into a single file or table or matching data from a master file to an ID number entered as a lookup entry.
16. Data searches that yield incorrect results – This means that a search retrieves incorrect data as the result of a search. In the worst case situation, the data retrieved appears to be correct in format, but only by tracing back to source documents and other original data can it be determined that the data is incorrect for the search criteria. An example of this would be searching for the time worked by a particular employee in a payroll system. The employee’s name at the top of the information may be displayed correctly, but the detailed time data may belong to another employee. The only ways to verify the information would be to compare the time worked back to time sheets or to tables that indicate the employee ID.
17. Incorrect processing of data relationships – This means that data relationships are not created or maintained correctly between one or more data elements. These data elements can reside on interactive interfaces, reports, or files. For example, a system may allow a user to incorrectly enter a telephone area code invalid for the state specified in an address field.
18. Incorrect file and data handling – This refers to the software incorrectly retrieving data from files or tables. This could include retrieving the wrong data from the right source or the right type of data from the wrong data source. An example of this would be retrieving data from an old version of a file or table, thinking the data is being retrieved from the most current version. Another example is the inability of the software to process empty or full files correctly.
A secondary problem could relate to the software’s inability to pass data correctly through the system. An example of this would be the incorrect processing of transactions, where data is inadvertently dropped during processing.
19. Inadequate security controls – This means that unauthorized access to the system is not adequately controlled and detected. In addition, people may also be able to perform transactions in excess of the authorization levels appropriate for their job functions. For example, a person without managerial levels of security access might be able to approve their own overtime. Or, a person not in the payroll department might be able to view the employee payroll files.
20. Inability to handle production data capacities – This refers to the software’s inability to process data at the level required by the organization. An example of this would be a system that is required to process financial transactions that exceed $10 million, but the system can only process amounts up to $9,999,999.99. Another example is the classic case of the Year 2000 computing problem, where dates in the Year 2000 and beyond are incorrectly recognized as being in the early 1900’s.
If you developed test cases to address each of these problems, you would have a huge challenge to cover all of them completely. Like everything else in testing, looking at relative risk and the situation at hand will narrow your focus. One approach would be to design a risk questionnaire for each problem area. Another method would be to interview users to assess the risk impact. A third technique would be to study past defect reports and correlate them to each of the problem areas, giving the highest priority to the most troublesome areas.
As I indicated at the top of this article, I do not presume to have presented the ultimate list of problem sources for dirty systems. If you have others, I would appreciate hearing your feedback.
Troubleshooting software problems
Your nonprofit or library relies on software to get its work done, and unexplained software crashes and error messages can bring your work to a standstill. When this happens, it’s tempting to call tech support immediately. But before you make the call, there are basic steps you can take to solve software problems on your own, or at least narrow down their causes.
The next time you have a software problem, try these troubleshooting tips in the order they’re listed below. Carefully document the steps you take. That way, if a tech support call becomes necessary, at least you’ll have a good idea of what isn’t causing the problem.
1. Free up RAM by closing other open programs.
Every piece of software uses Random Access Memory (RAM). The more software that’s running on your computer, the more RAM it uses. This can be especially problematic if you’re using older machines that don’t have a lot of RAM. So if a software program refuses to load or is running slowly, the first thing to do is to close all other open applications.
If you want to find out which open applications might be hogging your RAM, both Windows and Macintosh operating systems (OS) have tools that display this information:
- In Windows, hit Ctrl+Alt+Delete, then choose the Start Task Manager option. From the window that appears, click the Processes tab, then click the Memory menu item. This sorts all open processes based on the amount of RAM they’re using. You can shut down a runaway process by clicking the End Process button. Before you do that, you may want to do a bit of research on the process to ensure that you don’t accidentally stop a critical process or program.
- In Mac OS X, use the Activity Monitor (called the Process Viewer in older versions of OS X). Access the Activity Monitor by going to Applications > Utilities. Once you’ve called up the Activity Monitor, sort programs based on RAM usage by clicking the column labeled “Real Memory.”
2. Restart the software.
Software problems can stem from a conflict with other programs or simply from difficulties the software encountered when starting up. Shutting the program down and restarting it can sometimes resolve these issues.
3. Shut down and restart your computer.
If restarting the problematic program doesn’t resolve the issue, try rebooting your computer. Once the computer has fully restarted, re-launch the application in question and see if the problem has been resolved.
4. Use the Internet to find help.
No matter what software problems you encounter, chances are it’s happened to someone else. So there’s a good chance you can find help on the Internet. Here are a few places to get started:
- Search for answers: In your search engine query, include the software program name and version, the problem you encountered, and the circumstances under which the problem occurred. If you received a specific error message, enter the exact error message text, along with the name of the application.
- Check the vendor’s website: Most software vendors provide some form of product help, such as answers to frequently asked questions, product documentation, or user discussion forums.
5. Undo any recent hardware or software changes.
Changes to software and hardware can sometimes cause software problems, such as:
- Conflicts with other software: Newly installed software may conflict with other software. For example, Symantec Norton Antivirus can conflict with competing antivirus products. So, if you recently installed another antivirus program and Norton Antivirus no longer works correctly, uninstalling the other antivirus product could solve your problem.
- Changes to computer settings: Undo any recent changes to your computer’s settings, and try launching the software again. For example, the Windows Control Panel includes an option to “Set Program Access and Defaults,” which allows you to disable access to certain applications. If you accidentally disable access to a program here, the program may not run.
- Conflicts with new or improperly configured hardware, such as scanners and printers. If you’ve recently connected new hardware to one of your computers, try disconnecting the hardware and see if that corrects the software issue.
6. Uninstall the software, then reinstall it.
Sometimes, software problems occur because critical application files have been removed, updated, or deleted. For example, many Windows applications use Dynamic Link Library (DLL) files to perform basic tasks. Often, several applications will use the same DLL file. If you’ve recently removed one program from your computer, it’s possible you removed DLL files that another program relied on. Similarly, adding a program could add or update DLL files. Applications that were dependent on those DLL files may become unstable or stop working entirely.
To ensure that all the necessary files are intact, you can completely uninstall the problematic software, then reinstall it. Even if you remove a program using its built-in uninstall wizard (if it includes one), it’s still a good idea to check your hard drive’s Program Files folder — usually located on the C drive — for any remnants of the program, and delete any files or folders you find.
Before reinstalling, check to see if there’s a new version of the program available. The vendor or developer might have introduced bug fixes that address the issue you’re having.
7. Look for software patches.
Software vendors may also fix bugs by issuing patches — small software updates that address known problems. Even if you’re using the most current version of the software, there may be a more recent patch available for that version.
8. Scan for viruses and malware.
Viruses, spyware, and other forms of malicious software (or “malware”) can cause software to freeze, crash, or quit working entirely.
If tips 1 through 8 haven’t helped solve your software problem, you may also want to scan the computer using both antivirus and anti-malware tools to find and remove viruses and malware. Use the most thorough scan mode available, and remember to restart your machine if the antivirus or anti-malware programs found any threats.
9. Check for a firewall conflict.
Some organizations may choose to install personal firewall software on each computer, rather than a centralized hardware or software-based firewall. Personal firewalls can be an important line of defense against hackers and other security threats, but they can also cause software conflicts.
Firewalls frequently display messages asking whether it should allow a program to run or block it. Therefore, it’s possible to accidentally tell the personal firewall to block a program from running. Check the firewall’s settings to see if the problematic software was added to the firewall’s list of programs to block. If so, change the firewall’s settings to allow the software to run, then check to see if you’re still having issues with your software.
10. Boot up in Safe Mode.
Some software malfunctions can be caused by OS settings or other system problems. Windows and Mac operating systems both offer a troubleshooting environment known as Safe Mode. Safe Mode disables non-critical applications and processes, which theoretically makes it easier to isolate problems.
Most Windows computers allow you to enter Safe Mode by pressing the F8 key as your computer is booting up. On a Mac, enter Safe Mode by pressing the Shift key while your computer boots up (or immediately after it boots up).
Once your computer is in Safe Mode, launch the problematic software and try to replicate the problem you had while your computer was in normal mode. If you don’t have the same problem in safe mode, there’s a good chance that the issue was caused by your OS or another program, not by the application you are troubleshooting.
11. Defragment your hard drive.
As a final troubleshooting step, you might defragment your computer’s hard drive. Defragmenting rearranges your hard drive’s file structure so that the system runs more efficiently. Defragmenting will probably be most useful if you’re experiencing overall sluggishness on your computer, because defragmenting is meant to make your entire system run faster. Note that defragmenting a hard drive applies primarily to Windows-based computers.
Most recent Windows editions — including XP, Vista, and Windows 7 — include a built-in disk-defragmentation tool. To launch it, go to Start > All Programs > Accessories > System Tools > Disk Defragmenter. Be aware that defragmenting a hard drive can be time-consuming, so make sure to perform this task when you will be away from your computer for a few hours.
If the tips listed above did not solved your software problem, it may be time to call tech support. At minimum, you’ll be able to help them narrow down the problem by describing the troubleshooting steps you’ve already taken on your own.