Poisson analyses are proposed for the identification of the determinants of defects in small software components such as subprograms, modules, or functional units. Software complexity (which can be measured during design or implementation) and software development environment characteristics influence the numbers of defects emerging in the testing phase. Poisson models are calibrated using software complexity measures from several Ada projects along with their associated software change report data. One of the models is used to estimate defects at the subprogram, subsystem, and project levels for the calibration data, and these estimates are then compared to the actual defects. Notable results from this analysis are that extensively modified reused subprograms (> 25% changed) have substantially more defects than new code of otherwise comparable characteristics and that software development environment volatility (as measured by non-defect changes per thousand source lines of code) is a strong determinant of subprogram defects. To demonstrate cross-language applicability, defect predictions are made at the subsystem level for a project coded in the C programming language and compared to the actual subsystem defects. Finally, for software projects developed through multiple builds, we show that a Poisson model that incorporates a measure of testing effort is applicable.