10 counter = counter + 1
If counter = 20 then END
You can tell just by reading the above program how a computer running it would behave.
Unfortunately, computers run programs and store data in a way that is different from the way humans read source code. Programs are no more than circuits that manage vast arrays of on and off switches. The binary nature of the way each unit or bit of data underlies everything about how a computer works and remembers stuff requires source code to be converted to binary code to be machine-readable. This conversion process is called compilation. Source code in whatever language it is written needs to be compiled into a binary data structure for it to installed and run on a computer.
Binary data is also more compact than source code because the information redundancies (and other inefficiencies) inherent in human language are no longer present in binary code (i.e. removed during the compilation process). This makes binary code a more economical format to store and distribute software (say, as installation CDs or memory sticks or as “install packages” downloadable from the Web). Thus in commercial form, software code is virtually unreadable to ordinary humans.
This is why the source code is important to someone who is buying and using software for a mission-critical exercise — such as conducting a national election. To be able understand how a computer system converts input data (say, data from ballots) into output (say, election results) the managers of a computer system need to know the logical flow of this conversion effected by said software. This can only be done when the source code of the software is made available to them.
In the absence of source code, the behaviour of a computer system and the soundness of its logic can be evaluated by competent test analysts. This is specially true for relatively simple systems such as the voting system in the Precinct Count Optical Scan (PCOS) machines to be used by the Philippines’ Commision on Elections (COMELEC). The trick lies in the formulation of a good representative set of test cases and running simulations using these test cases through the system and observing its behaviour to see if output is consistent with expected outcomes as defined in said test cases.