;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This file is part of "NOVA": NOVA = search + COCOMO tools ; Copyright, 2008, Tim Menzies tim@menzies.us ; ; NOVA is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; ; NOVA is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; a long with NOVA. If not, see . ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; possible ranges of cocomo factors ;; scale factors (defstruct (sfs (:include num (max -1.015) (min -1.560)))) ;; effort multipliers (defstruct (em+ (:include num (max 0.210) (min 0.073)))) (defstruct (em- (:include num (max -0.084) (min -0.178)))) ;; defect introduction (scale factors) (defstruct (rsf (:include num (max -0.112) (min -0.146)))) (defstruct (dsf (:include num (max -0.092) (min -0.208)))) (defstruct (csf (:include num (max -0.064) (min -0.190)))) ;; requirements defect introduction (effort multipliers) (defstruct (rin+ (:include num (max 0.112) (min 0.025)))) (defstruct (rin- (:include num (max -0.035) (min -0.183)))) (defstruct (rin0 (:include num (max 0.000) (min 0.000)))) ;; design defect introduction (effort multipliers) (defstruct (din+ (:include num (max 0.140) (min 0.010)))) (defstruct (din- (:include num (max -0.048) (min -0.190)))) ;; coding defect introduction (effort multipliers) (defstruct (cin+ (:include num (max 0.140) (min 0.010)))) (defstruct (cin- (:include num (max -0.053) (min -0.190)))) ;; defect removers (defstruct (rdr (:include num (max 0.140) (min 0.080)))) (defstruct (ddr (:include num (max 0.156) (min 0.100)))) (defstruct (codr (:include num (max 0.176) (min 0.110)))) ;;; cocomo defaults ;;; all "defaults" functions must return a list of dotted pairs (defun cocomo-defaults () (append (kloc-defaults) (a-defaults) (b-defaults) (sf-defaults) (em-defaults) (dr-defaults))) (defun kloc-defaults () `((kloc . ,(make-num :min 2 :max 2000)))) (defun a-defaults () `((a . ,(make-one-a :line (point-to-line 2 1 10 0.6))))) (defun b-defaults () `((b . ,(make-one-b :num (make-num :min 0 :max 0.1))))) (defun sf-defaults () `((flex . ,(make-sf :range (make-r15) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf) :policies '(tactical))) (pmat . ,(make-sf :range (make-r15) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf) :policies '(strategic))) (prec . ,(make-sf :range (make-r15) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf) :policies '(strategic))) (resl . ,(make-sf :range (make-r15) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf) :policies '(tactical))) (team . ,(make-sf :range (make-r15) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf) :policies '(tactical))))) (defun modify-guess-rely (em) (setf (em-range em) (min 5 (+ (em-range em) (max (- (dr-range (! 'aa)) 3) 0) (max (- (dr-range (! 'etat)) 3) 0) (max (- (dr-range (! 'pr)) 3) 0)))) em) (defun modify-guess-tool (em) (setf (em-range em) (min 5 (+ (em-range em) (max (- (dr-range (! 'aa)) 3) 0) (max (- (dr-range (! 'etat)) 3) 0)))) em) (defun em-defaults () `((acap . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(strategic))) (aexp . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(strategic))) (cplx . ,(make-em :range (make-r16) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+) :policies '(tactical))) (data . ,(make-em :range (make-r25) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+) :policies '(tactical))) (docu . ,(make-em :range (make-r15) :effort (make-em+) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(tactical))) (ltex . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(strategic))) (pcap . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin0) :din (make-din-) :cin (make-cin-) :policies '(strategic))) (pcon . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(strategic))) (plex . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(strategic))) (pvol . ,(make-em :range (make-r25) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+) :policies nil)) (rely . ,(make-em :range (make-r15) :effort (make-em+) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies nil :modify-guess-fn #'modify-guess-rely)) (ruse . ,(make-em :range (make-r26) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+) :policies '(tactical))) (sced . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(tactical))) (site . ,(make-em :range (make-r16) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(strategic))) (stor . ,(make-em :range (make-r36) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+) :policies '(tactical))) (time . ,(make-em :range (make-r36) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+) :policies nil)) (tool . ,(make-em :range (make-r15) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :policies '(tactical) :modify-guess-fn #'modify-guess-tool)))) (defun dr-defaults () `((aa . ,(make-dr :range (make-r16) :rout (make-rdr) :dout (make-ddr) :cout (make-codr) :policies '(strategic tactical))) (etat . ,(make-dr :range (make-r16) :rout (make-rdr) :dout (make-ddr) :cout (make-codr) :policies '(strategic tactical))) (pr . ,(make-dr :range (make-r16) :rout (make-rdr) :dout (make-ddr) :cout (make-codr) :policies '(strategic tactical)))))