;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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 . ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :xomo.model) ;;; possible ranges of cocomo factors (defparameter *xomo-range-interval* 0.5) (defparameter *xomo-range-decimals* 1) (defmacro xomo-range-def (min max) `(coco (expand-range ,min ,max *xomo-range-interval* *xomo-range-decimals*))) ;; scale factors (defstruct (sfs (:include num (max -1.01) (min -1.56)))) ;; effort multipliers (defstruct (em+ (:include num (max 0.21) (min 0.07)))) (defstruct (em- (:include num (max -0.08) (min -0.18)))) ;; defect introduction (scale factors) (defstruct (rsf (:include num (max -0.04) (min -0.18)))) (defstruct (dsf (:include num (max -0.05) (min -0.21)))) (defstruct (csf (:include num (max -0.05) (min -0.19)))) ;; requirements defect introduction (effort multipliers) (defstruct (rin0 (:include num (max 0.000) (min 0.000)))) (defstruct (rin+ (:include num (max 0.11) (min 0.00)))) (defstruct (rin- (:include num (max -0.04) (min -0.18)))) ;; design defect introduction (effort multipliers) (defstruct (din+ (:include num (max 0.14) (min 0.00)))) (defstruct (din- (:include num (max -0.05) (min -0.21)))) ;; coding defect introduction (effort multipliers) (defstruct (cin+ (:include num (max 0.14) (min 0.00)))) (defstruct (cin- (:include num (max -0.05) (min -0.19)))) ;; defect removers (defstruct (rdr (:include num (max 0.14) (min 0.08)))) (defstruct (ddr (:include num (max 0.16) (min 0.10)))) (defstruct (codr (:include num (max 0.18) (min 0.11)))) ;;; cocomo defaults ;;; all "defaults" functions must return a list of dotted pairs ;;TODO make funciton to generate learning-input-values.xml (defun xomo-defaults () (setf *a-b-correlation* (point-to-line 2 1 10 0.6)) (setf *a-b-correlation-wiggle* (make-num :min -0.1 :max 0.0)) (append (parameters-defaults) (tunable-parameters-defaults) (sf-defaults) (em-defaults) (dr-defaults) (risk-peak-defaults))) (defun parameters-defaults () `((kloc . ,(make-num :min 2 :max 2000)))) (defun tunable-parameters-defaults () `((a . ,(make-one-a :min 2 :max 11)) (b . ,(make-one-b :min 0.5 :max 1)) (c . ,(make-one-c :min 3.0 :max 3.67)) (d . ,(make-one-d :min 0.28 :max 0.33)))) (defun sf-defaults () `((flex . ,(make-sf :range (xomo-range-def 1 6) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf))) (pmat . ,(make-sf :range (xomo-range-def 1 6) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf))) (prec . ,(make-sf :range (xomo-range-def 1 6) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf))) (resl . ,(make-sf :range (xomo-range-def 1 6) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf))) (team . ,(make-sf :range (xomo-range-def 1 6) :effort (make-sfs) :rsf (make-rsf) :dsf (make-dsf) :csf (make-csf))))) (defun em-defaults () `((acap . ,(make-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (aexp . ,(make-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (cplx . ,(make-em :range (xomo-range-def 1 6) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+))) (data . ,(make-em :range (xomo-range-def 2 5) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+))) (docu . ,(make-em :range (xomo-range-def 1 5) :effort (make-em+) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (ltex . ,(make-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (pcap . ,(make-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin0) :din (make-din-) :cin (make-cin-))) (pcon . ,(make-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (plex . ,(make-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (pvol . ,(make-em :range (xomo-range-def 2 5) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+))) ;;FIXME if zap is called on a dr, augmented-em won't be reflected (rely . ,(make-augmented-em :range (xomo-range-def 1 5) :effort (make-em+) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :augment-range-fn #'(lambda (oldrange) (min 5 (+ oldrange (max (- (dr-range (! 'aa)) 3) 0) (max (- (dr-range (! 'etat)) 3) 0) (max (- (dr-range (! 'pr)) 3) 0)))))) (ruse . ,(make-em :range (xomo-range-def 2 6) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+))) (sced . ,(make-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (site . ,(make-em :range (xomo-range-def 1 6) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-))) (stor . ,(make-em :range (xomo-range-def 3 6) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+))) (time . ,(make-em :range (xomo-range-def 3 6) :effort (make-em+) :rin (make-rin+) :din (make-din+) :cin (make-cin+))) ;;FIXME if zap is called on a dr, augmented-em won't be reflected (tool . ,(make-augmented-em :range (xomo-range-def 1 5) :effort (make-em-) :rin (make-rin-) :din (make-din-) :cin (make-cin-) :augment-range-fn #'(lambda (oldrange) (min 5 (+ oldrange (max (- (dr-range (! 'aa)) 3) 0) (max (- (dr-range (! 'etat)) 3) 0)))))))) (defun dr-defaults () `((aa . ,(make-dr :range (xomo-range-def 1 6) :rout (make-rdr) :dout (make-ddr) :cout (make-codr))) (etat . ,(make-dr :range (xomo-range-def 1 5) :rout (make-rdr) :dout (make-ddr) :cout (make-codr))) (pr . ,(make-dr :range (xomo-range-def 1 5) :rout (make-rdr) :dout (make-ddr) :cout (make-codr))))) (macrolet ((rp-4 () '(make-risk-peak :range '(2 4 6))) (rp-2 () '(make-risk-peak :range '(1 2 3)))) (defun risk-peak-defaults () `(;;from xomo101 paper (rp-sced-rely . ,(rp-2)) (rp-sced-cplx . ,(rp-4)) (rp-sced-time . ,(rp-4)) (rp-sced-pvol . ,(rp-2)) (rp-sced-tool . ,(rp-2)) (rp-sced-plex . ,(rp-4)) (rp-sced-pcap . ,(rp-4)) (rp-sced-aexp . ,(rp-4)) (rp-sced-acap . ,(rp-4)) (rp-sced-ltex . ,(rp-2)) (rp-sced-pmat . ,(rp-2)) (rp-rely-acap . ,(rp-4)) (rp-rely-pcap . ,(rp-4)) (rp-cplx-acap . ,(rp-4)) (rp-cplx-pcap . ,(rp-4)) (rp-cplx-tool . ,(rp-4)) (rp-rely-pmat . ,(rp-4)) (rp-pmat-acap . ,(rp-2)) (rp-stor-acap . ,(rp-4)) (rp-time-acap . ,(rp-4)) (rp-tool-acap . ,(rp-2)) (rp-tool-pcap . ,(rp-2)) (rp-ruse-aexp . ,(rp-4)) (rp-ruse-ltex . ,(rp-4)) (rp-pmat-pcap . ,(rp-2)) (rp-stor-pcap . ,(rp-4)) (rp-time-pcap . ,(rp-4)) (rp-ltex-pcap . ,(rp-4)) (rp-pvol-plex . ,(rp-2)) (rp-tool-pmat . ,(rp-2)) (rp-time-tool . ,(rp-2)) (rp-team-aexp . ,(rp-2)) (rp-team-sced . ,(rp-2)) (rp-team-site . ,(rp-2))))) ;;;; ;;;; ATTRIBUTES ;;;; (defun all-parameters-attributes () (mapcar #'car (parameters-defaults))) (defun all-tunable-parameters-attributes () (mapcar #'car (tunable-parameters-defaults))) (defun all-sf-attributes () (mapcar #'car (sf-defaults))) (defun all-em-attributes () (mapcar #'car (em-defaults))) (defun all-dr-attributes () (mapcar #'car (dr-defaults))) (defun all-risk-peak-attributes () (mapcar #'car (risk-peak-defaults))) ;;;; ;;;; REGISTER XOMO-DEFAULTS ;;;; (register-db-default-configuration-list 'xomo-defaults (xomo-defaults))