▁only ▁does ▁not ▁scan ▁for ▁division ▁by ▁zero ▁in ▁most ▁languages , ▁and ▁then ▁it ▁is ▁left ▁as ▁a ▁runtime ▁error . ▁To ▁prove ▁the ▁absence ▁of ▁these ▁more - general - than - types ▁defect s , ▁other ▁kinds ▁of ▁formal ▁methods , ▁collect ively ▁known ▁as ▁program ▁anal ys es , ▁are ▁in ▁common ▁use . ▁Alternatively , ▁a ▁sufficiently ▁express ive ▁type ▁system , ▁such ▁as ▁in ▁depend ently ▁typed ▁languages , ▁can ▁prevent ▁these ▁kinds ▁of ▁errors ▁( for ▁example , ▁express ing ▁the ▁type ▁of ▁non - zero ▁numbers ). ▁In ▁addition ▁software ▁testing ▁is ▁an ▁empir ical ▁method ▁for ▁finding ▁errors ▁that ▁the ▁type ▁check er ▁cannot ▁detect . ▁ ▁Type ▁checking ▁ ▁The ▁process ▁of ▁ver ifying ▁and ▁enfor cing ▁the ▁constraints ▁of ▁types — type ▁checking — may ▁occur ▁either ▁at ▁compile ▁time ▁( a ▁static ▁check ) ▁or ▁at ▁run - time . ▁If ▁a ▁language ▁specification ▁requires ▁its ▁typing ▁rules ▁strongly ▁( i . e ., ▁more ▁or ▁less ▁allowing ▁only ▁those ▁automatic ▁type ▁convers ions ▁that ▁do ▁not ▁lose ▁information ), ▁one ▁can ▁refer ▁to ▁the ▁process ▁as ▁strongly ▁typed , ▁if ▁not , ▁as ▁weak ly ▁typed . ▁The ▁terms ▁are ▁not ▁usually ▁used ▁in ▁a ▁strict ▁sense . ▁ ▁St atic ▁type ▁checking ▁ ▁St atic ▁type ▁checking ▁is ▁the ▁process ▁of ▁ver ifying ▁the ▁type ▁safety ▁of ▁a ▁program ▁based ▁on ▁analysis ▁of ▁a ▁program ' s ▁text ▁( source ▁code ). ▁If ▁a ▁program ▁passes ▁a ▁static ▁type