14

This question already has an answer here:

Some software producers provide minimum requirements, some examples: Skype, Diablo III, Ubuntu-Server and OpenOffice.

I wonder how those minimum requirements are determined, especially RAM, CPU frequency in general? Is there a logic behind it or is it just determined by testing the program with different hardware to find out what would be okay for the end user?

If there is a logic to determine such parameters, e.g., how could I prepare such requirements for a C or JAVA code (assuming that it has >10k line)?

marked as duplicate by user40980, GlenH7, gnat, Kilian Foth, BЈовић Aug 2 '13 at 8:15

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

migrated from stackoverflow.com Aug 2 '13 at 1:06

This question came from our site for professional and enthusiast programmers.

  • 9
    Ideally, by testing on a wide variety of systems and seeing what works. In reality, usually it's a wild guess. – duskwuff Jul 26 '13 at 17:34
  • 1
    Build > install > test > measure. Keep in mind that Games and Applications are different topics even if they are both pieces of software. – Gamb Jul 26 '13 at 17:37
3

I wonder how those minimum requirements are determined, especially RAM, CPU frequency in general? Is there a logic behind it or is it just determined by testing the program with different hardware to find out what would be okay for the end user?

Well, it is not possible to give a definite answer. (Different people, groups, companies are likely to have different ideas / approaches.)

But in general, the only way that is likely to work is empirical; i.e. try it and see.

  • Install the software on a variety of supported platforms and measure the disc space.

  • Run it1 on a range of systems with various CPU speeds and various amounts of memory:

    • See whether it works acceptably well (subjective).
    • Look at the system stats for signs of stress on lower-end systems.
  • Incorporate feedback from in-house users and external beta testers.


1 - Depending on the nature of the application, you may need to try with different sized problems, datasets, numbers of online users, whatever ... up to a point that is reasonable.


I have not come across a case where you could get reliable platform recommendations by simply applying some logic. At a minimum you need to run some tests to calibrate your "performance model".

Even when there is a correlation between problem size and performance, you usually cannot reliably predict when you are going to run into scaling-related performance problems ... until you hit the problems.

1

There is a bunch of things you should remember to specify (http://en.wikipedia.org/wiki/System_requirements).

Mainly:

  • Software: platform, APIs, drivers, etc. This is easy once you know your code and your dependences;
  • Hardware:
    • Architecture:
    • CPU/memory: try using some profiler or measuring your application in different environments by using 'Task manager' or 'Activity monitor'
    • Storage: What about your app installation? What more is needed?
    • Video: Minimum resolution, 3d graphics?
    • Peripherals: webcam? etc

Some other recommendations:

  • Do not forget to test your application in simple usage and in high usage. Test the worst scenario;
  • Once you found and test your application in a machine that works fine, it helps a lot to define the minimum specification. I mean, you do not need to look for a smaller specification;
  • There are things you can find in your current language/framework. E.g.: java virtual machine minimum requirements + your app needs.
0

Profiling the application when running an end-to-end transaction/process on machines/VMs with different settings might help. That could help you see how long it takes to run different methods/processes by cpu time vs number of invokes, and adjusting the underlying VM/hardware can help tweak it. Profiler will also tell you how much heap memory is allocated during your runs. So for minimum memory requirements you certainly want to exceed those. Major java IDEs - Netbeans and Eclipse have those.

For web applications you might consider placing them under a load tool, e.g. LoadUI. Using those you'd be able to compare stats such as number of hits on your web app/time vs cpu usage/memory usage on your server.

0

In terms of measurable resources like CPU and memory, there's no formula. Modern, megalithic, multithreaded software written in modern, "magic" languages on busy, modern operating systems is impossible to predict. You just have to run some benchmarks.

Find the point at which your software becomes nearly unusable. Then, pad the numbers a little to account for all the naughty software your users have installed, downloading illegal movies and so forth in the background ... Well, or if you just want to ensure more of your users experience great performance.

Not the answer you're looking for? Browse other questions tagged or ask your own question.