I've had this discussion elsewhere but having worked in flight analysis here is my general breakdown of rocket stability:
Methods for determining Cp (can skip this section if you are happy with OR or RASAero):
Cardboard cut-out method < OpenRocket < RASAero < physical test data, and CFD is a wild card.
Cardboard cut-out method is okay for small flights with plenty of margin. OpenRocket is far better, but still requires common sense and sometimes tricks like a base drag cone to really get accurate predictions. RASAero is basically Missile DATCOM with limited exportable data, and is probably the best tool most people have available to them for aerodynamic predictions. If you are a college student you may be lucky enough to be able to do wind tunnel testing (though there are corrections to data that have to be made for wall interference, accounting for how the sting affects base drag, scaling viscous forces, and in the case of supersonic tunnels you have to worry about shockwaves reflecting off the tunnel walls. CFD shouldn't be used without being able to validate the CFD with wind tunnel or flight testing, the results are sensitive to boundary conditions, meshing, etc. and it's difficult to get accurate results.
Methods for determining if stability is adequate:
Swing test < 1-2 caliber rule < 10-20% of rocket length < dynamic stability analysis.
The swing test can work for simple/small rockets, but its kind of garbage. The 1-2 caliber rule works well for "typical" rocket designs, i.e. the length to diameter ratio is not one extreme or the other, long thin rockets need a larger static margin and short stubby rockets need less. As Joe pointed out, you can represent static margin as a percentage of the rocket's length to account for those oddball rockets that fall outside of the "typical" L/D ratios, and it works for normal rockets just as well. The way I'd prefer to deal with things is dynamic stability analysis.
For a rocket to be statically stable, all you need is for the Cg to be ahead of the Cp. For a rocket to be dynamically stable, you need to look at damping ratio. When the rocket is nudged, how does it respond? Does it keep oscillating back and forth, possibly while traveling at high speeds where it could lead to increased stresses and possibly a failure of fins or couplers? Does it immediately arc into the wind and head down range because the corrective moment is too high? The ideal range for damping ratio is somewhere between 0.05 and 0.3, within this range the rocket will damp out oscillations quickly and maintain a consistent trajectory while not going too far down range or maintaining high speeds as it passes apogee where you could shred a parachute. Example plot of damping ratio vs time for my L3 flight:
View attachment 630318
Other notes:
1. Physically measure your Cg location, maybe assemble and disassemble the rocket a couple times to see how consistent that Cg is. Maybe you packed the parachute and recovery hardware tight one time and the Cg was farther back, maybe you packed it loose and it "seems" farther forward, but under thrust everything will shift backwards and all of a sudden you are no longer stable.
2. If you really care about matching simulations to reality, which you should for a rocket competition, perform a swing test with a bifilar pendulum. link:
You can then override all components in your sim to have a mass of 0 and create two disc shaped mass objects evenly spaced from the Cg with a diameter equal to the airframe, no thickness, mass of each equal to half the weight of the rocket, and the distance from the mass objects to the Cg being equal to the "radius of gyration" calculated by your swing test. Example diagram I made when I was working on my L3:
View attachment 630317