user65: I have a uno that I have been using for 3 years now. I will be using it again in a rather critical project in which failure on the part of the board could be rather expensive and dangerous. So, I would like to be sure that the board is not approaching end of life or going to fail anytime soon. Is there any reliable way to figure out how long the board will function without failing or reduction in performance?

user65: One of the sections of the Arduino that is likely to become unreliable over time is its memory. There are three pools of memory in the microcontroller used on avr-based Arduino boards:

Flash memory (program space), is where the Arduino sketch is stored.
SRAM (static random access memory) is where the sketch creates and manipulates variables when it runs.
EEPROM is memory space that programmers can use to store long-term information.

The memory is one part of the board that can be checked and verified, and thus evaluated for reliability/health. A very basic way to check memory would be to write a certain 8-bit pattern (byte character) over every address in the memory and then read the value present from every address. If the value that was written matches the value that is read, then that specific 8 bit block in memory is functioning correctly at the present moment.
Wear in ROM memory usually occurs in a blockwise pattern i.e. n*8-bit blocks become degraded over time. So, for a 2K byte ROM chip, the health of the chip can be estimated by writing and reading from every byte on the chip, and calculating the percentage of correctly functioning blocks. If the percentage of failed blocks is significant (15%-20%), that means that the memory is likely to fail soon.
The test code can be written using separate methods for each of the memory sections.
SRAM
Any variables declared statically or dynamically are allocated on the SRAM. So, we could declare a large character array (~2000) and fill every element with 255 (all bits 1). Then, we could attempt to read each of those elements and see if the value being read is indeed 255.
EEPROM
The EEPROM can be manipulated using the EEPROM library. The library provides functions to read and write from specific locations in the EEPROM. So, all memory addresses can be tested by simply looping over the entire memory
space. This operation will require 500 writes and reads.
Depending on the board usage, EEPROM is most likely to fail first but is not critical to board operation.
Flash
Data can be stored on the flash memory using the PROGMEM directive. Similar to SRAM, a large array can be declared and initialized here. Then, values can be read and checked.

user86: Unfortunately, there isn't much way to really determine "wear" in the context of solid-state electronics.
Probably the things that are most likely to fail are the electrolytic capacitors and the connectors.

First, if you're using an ATmega CPU for something that could possibly injure someone CONTACT ATMEL AND TALK ABOUT SAFETY PRECAUTIONS. The ATmega CPU used in most of the arduino models is not rated for use in such situations.
In EVERY datasheet:  

Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.

Now, realistically, this is probably mostly lawyer repellent, but you should still take appropriate precautions.
Really, while there isn't anything on a common arduino board that really wears out except the connectors, why are you trying to save $30 at a potential huge cost? Just buy a new board.
I'd also strongly reccomend you chose a board with a SMT ATmega328P, since that removes the IC socket contacts from the list of concerns. If possible, also remove the pin-headers, and solder wires to the board directly. Try to minimize connectors, since they are frequent points of failure.

65: <p>I have a uno that I have been using for 3 years now. I will be using it again in a rather critical project in which failure on the part of the board could be rather expensive and dangerous. So, I would like to be sure that the board is not approaching end of life or going to fail anytime soon. Is there any reliable way to figure out how long the board will function without failing or reduction in performance?</p>
 65: <p>One of the sections of the Arduino that is likely to become unreliable over time is its memory. There are <a href="http://arduino.cc/en/Tutorial/Memory" rel="nofollow noreferrer">three pools of memory</a> in the microcontroller used on avr-based Arduino boards:</p>
<ul>
<li>Flash memory (program space), is where the Arduino sketch is stored.</li>
<li>SRAM (static random access memory) is where the sketch creates and manipulates variables when it runs.</li>
<li>EEPROM is memory space that programmers can use to store long-term information.</li>
</ul>
<p>The memory is one part of the board that can be checked and verified, and thus evaluated for reliability/health. A very basic way to check memory would be to write a certain 8-bit pattern (byte character) over every address in the memory and then read the value present from every address. If the value that was written matches the value that is read, then that specific 8 bit block in memory is functioning correctly at the present moment.</p>
<p>Wear in ROM memory usually occurs in a blockwise pattern i.e. n*8-bit blocks become degraded over time. So, for a 2K byte ROM chip, the health of the chip can be estimated by writing and reading from every byte on the chip, and calculating the percentage of correctly functioning blocks. If the percentage of failed blocks is significant (15%-20%), that means that the memory is likely to fail soon.</p>
<p>The test code can be written using separate methods for each of the memory sections.</p>
<h3>SRAM</h3>
<p>Any variables declared statically or dynamically are allocated on the SRAM. So, we could declare a large character array (~2000) and fill every element with 255 (all bits 1). Then, we could attempt to read each of those elements and see if the value being read is indeed 255.</p>
<h3>EEPROM</h3>
<p>The EEPROM can be manipulated using the <a href="http://www.arduino.cc/en/Reference/EEPROM" rel="nofollow noreferrer">EEPROM library</a>. The library provides functions to read and write from specific locations in the EEPROM. So, all memory addresses can be tested by simply looping over the entire memory
space. <em>This operation will require 500 writes and reads.</em></p>
<p>Depending on the board usage, EEPROM is most likely to fail first but is not critical to board operation.</p>
<h3>Flash</h3>
<p>Data can be stored on the flash memory using the <a href="http://www.arduino.cc/en/Reference/PROGMEM" rel="nofollow noreferrer"><code>PROGMEM</code></a> directive. Similar to SRAM, a large array can be declared and initialized here. Then, values can be read and checked.</p>
 86: <p>Unfortunately, there isn't much way to really determine "wear" in the context of solid-state electronics.</p>

<p>Probably the things that are most likely to fail are the electrolytic capacitors and the connectors.</p>

<hr>

<p>First, if you're using an ATmega CPU for something that could possibly injure someone <strong>CONTACT ATMEL AND TALK ABOUT SAFETY PRECAUTIONS</strong>. The ATmega CPU used in most of the arduino models is <em>not</em> rated for use in such situations.</p>

<p>In EVERY datasheet:  </p>

<blockquote>
  <p>Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.</p>
</blockquote>

<p>Now, realistically, this is probably <em>mostly</em> lawyer repellent, but you should still take appropriate precautions.</p>

<p>Really, while there isn't anything on a common arduino board that really wears out except the connectors, <em>why are you trying to save $30 at a potential huge cost?</em> Just buy a new board.</p>

<p>I'd also strongly reccomend you chose a board with a SMT ATmega328P, since that removes the IC socket contacts from the list of concerns. If possible, also remove the pin-headers, and solder wires to the board directly. Try to minimize connectors, since they are frequent points of failure.</p>
