简单的项目规模统计方法

原创 2006年06月15日 13:32:00
因为工作的需要,花了一点点时间做了一个关于项目规模统计的shell脚本,共大家分享。

#/bin/bash

 

do_scale()

{

       echo 'Probe *.h, *.hpp, *.cc, *.c, *.cpp files, please wait ...'

       MY_FILES=`find $1 | egrep -v 'Linux_LIB' | egrep '*/.h$|*/.hpp$|*/.c$|*.cpp$|*/.cc$' | sort`

       echo '...Done!'

       # Clear dumping file

       if [ -f ./scale.dump ]; then

              mv ./scale.dump ./scale.dump.bak

       fi

       printf "Name" >> ./scale.dump

       MY_CHARS=`printf "Name" | wc -m`

       MY_CHARS=$((32-MY_CHARS))

       while [ $MY_CHARS -gt 0 ]; do

              printf " " >> ./scale.dump

              MY_CHARS=$((MY_CHARS-1))

       done

       printf "Lines" >> ./scale.dump

       MY_CHARS=`printf "Lines" | wc -m`

       MY_CHARS=$((32-MY_CHARS))

       while [ $MY_CHARS -gt 0 ]; do

              printf " " >> ./scale.dump

              MY_CHARS=$((MY_CHARS-1))

       done

       printf "Whole Path/n" >> ./scale.dump

       set -- $MY_FILES

       MY_TOTAL_FILE_NUMS=$#

       MY_TOTAL_FILE_LINE_NUMS=0

       while [ $# -gt 0 ]; do

              MY_FILE_LINE_NUMS=`cat $1 | wc -l`

              echo "$1: $MY_FILE_LINE_NUMS lines"

              MY_TOTAL_FILE_LINE_NUMS=$((MY_TOTAL_FILE_LINE_NUMS+MY_FILE_LINE_NUMS))

              MY_FILE_LINE_NUMS=`echo $MY_FILE_LINE_NUMS | tr -d ' '`

              # Dump it

              MY_FILE_NAME=`basename $1`

              printf "$MY_FILE_NAME" >> ./scale.dump

              MY_CHARS=`printf "$MY_FILE_NAME" | wc -m`

              MY_CHARS=$((32-MY_CHARS))

              while [ $MY_CHARS -gt 0 ]; do

                     printf " " >> ./scale.dump

                     MY_CHARS=$((MY_CHARS-1))

              done

              printf "$MY_FILE_LINE_NUMS" >> ./scale.dump

              MY_CHARS=`printf "$MY_FILE_LINE_NUMS" | wc -m`

              MY_CHARS=$((32-MY_CHARS))

              while [ $MY_CHARS -gt 0 ]; do

                     printf " " >> ./scale.dump

                     MY_CHARS=$((MY_CHARS-1))

              done

              printf "$1/n" >> ./scale.dump

              shift 1

       done

       echo "Total Files     : $MY_TOTAL_FILE_NUMS"

       echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS"

       echo "Total Files     : $MY_TOTAL_FILE_NUMS" >> ./scale.dump

       echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS" >> ./scale.dump

}

 

do_help()

{

       echo "[Usage]: $0 path"

}

 

# Check and setup path

if [ $# -eq 0 ]; then

       MY_PATH=`pwd`

       echo "No path and use current path: $MY_PATH"

elif [ $# -eq 1 ]; then

       MY_PATH=$1

else

       echo 'Unsupport multi-paths'

       do_help

       exit 1

fi

 

# Check whether path is valid

if [ ! -e $MY_PATH ]; then

       echo "$MY_PATH does not exist"

       exit 2

fi

 

if [ ! -d $MY_PATH ]; then

       echo "$MY_PATH is not directory"

       exit 3

fi

 

# Do scale

do_scale $1

存在的几个问题,不知道如何解决?
1)对于计算字符串的方法,这些代码被重用过多次,所以我希望能够放在一个类似于函数中,只要输入对应不同的参数来控制,但是现在因为$1会被冲掉,所以代码看上去很脏。
2)在linux下面,有什么工具可以识别函数。

请有网友多多帮助,谢谢!

对于上次所说的第一个问题,我在学习bash的帮助后,得到解决,请看下面的代码
#/bin/bash

do_scale()
{
    echo 'Probe *.h, *.hpp, *.cc, *.c, *.cpp files, please wait ...'
    MY_FILES=`find $1 | egrep -v 'Linux_LIB' | egrep '*/.h$|*/.hpp$|*/.c$|*.cpp$|*/.cc$' | sort`
    echo '...Done!'
    # Clear dumping file
    if [ -f ./scale.dump ]; then
        mv ./scale.dump ./scale.dump.bak
    fi
    printf "%-32.32s" 'Name' >> ./scale.dump
    #MY_CHARS=`printf "Name" | wc -m`
    #MY_CHARS=$((32-MY_CHARS))
    #while [ $MY_CHARS -gt 0 ]; do
    #    printf " " >> ./scale.dump
    #    MY_CHARS=$((MY_CHARS-1))
    #done
    printf "%-32.32s" 'Lines' >> ./scale.dump
    #MY_CHARS=`printf "Lines" | wc -m`
    #MY_CHARS=$((32-MY_CHARS))
    #while [ $MY_CHARS -gt 0 ]; do
    #    printf " " >> ./scale.dump
    #    MY_CHARS=$((MY_CHARS-1))
    #done
    printf "Whole Path/n" >> ./scale.dump
    set -- $MY_FILES
    MY_TOTAL_FILE_NUMS=$#
    MY_TOTAL_FILE_LINE_NUMS=0
    while [ $# -gt 0 ]; do
        MY_FILE_LINE_NUMS=`cat $1 | wc -l`
        echo "$1: $MY_FILE_LINE_NUMS lines"
        MY_TOTAL_FILE_LINE_NUMS=$((MY_TOTAL_FILE_LINE_NUMS+MY_FILE_LINE_NUMS))
        MY_FILE_LINE_NUMS=`echo $MY_FILE_LINE_NUMS | tr -d ' '`
        # Dump it
        MY_FILE_NAME=`basename $1`
        printf "%-32.32s" "$MY_FILE_NAME" >> ./scale.dump
        #MY_CHARS=`printf "$MY_FILE_NAME" | wc -m`
        #MY_CHARS=$((32-MY_CHARS))
        #while [ $MY_CHARS -gt 0 ]; do
        #    printf " " >> ./scale.dump
        #    MY_CHARS=$((MY_CHARS-1))
        #done
        printf "%-32.32s" "$MY_FILE_LINE_NUMS" >> ./scale.dump
        #MY_CHARS=`printf "$MY_FILE_LINE_NUMS" | wc -m`
        #MY_CHARS=$((32-MY_CHARS))
        #while [ $MY_CHARS -gt 0 ]; do
        #    printf " " >> ./scale.dump
        #    MY_CHARS=$((MY_CHARS-1))
        #done
        printf "$1/n" >> ./scale.dump
        shift 1
    done
    echo "Total Files     : $MY_TOTAL_FILE_NUMS"
    echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS"
    echo "Total Files     : $MY_TOTAL_FILE_NUMS" >> ./scale.dump
    echo "Total file lines: $MY_TOTAL_FILE_LINE_NUMS" >> ./scale.dump
}

do_help()
{
    echo "[Usage]: $0 path"
}

# Check and setup path
if [ $# -eq 0 ]; then
    MY_PATH=`pwd`
    echo "No path and use current path: $MY_PATH"
elif [ $# -eq 1 ]; then
    MY_PATH=$1
else
    echo 'Unsupport multi-paths'
    do_help
    exit 1
fi

# Check whether path is valid
if [ ! -e $MY_PATH ]; then
    echo "$MY_PATH does not exist"
    exit 2
fi

if [ ! -d $MY_PATH ]; then
    echo "$MY_PATH is not directory"
    exit 3
fi

# Do scale
do_scale $1
原来的很脏的代码,现在被简单的被printf的格式控制给替换,速度也提高了很多!"%-32.32s"重的‘-’表示左对齐,如果去掉‘-’,则为右对齐。

软件项目规模度量与实际应用

一. 软件规模度量的必要性软件项目规模的度量,是软件项目中相当重要的一环.只有相对合理和相对准确地度量软件规模,才能对项目的计划进度安排,资源分配,等等各个环节进行合理的部署.这样才能尽可能地保证软件...
  • samjason
  • samjason
  • 2008年06月03日 14:09
  • 436

软件规模的估算方法

软件项目的规模估算历来是比较复杂的事,因为软件本身的复杂性、历史经验的缺乏、估算工具缺乏以及一些人为错误,导致软件项目的规模估算往往和实际情况相差甚远。 因此,估算错误已被列入软件项目失败的四大原因之...
  • mqwind
  • mqwind
  • 2011年01月14日 10:06
  • 1466

软件项目规模评估

顾名思义软件评估就是对软件项目的规模进度做出一个合适评估以判断软件项目的预算以及项目计划。 软件评估是软件工程的一个最底层基础,也是在软件项目实施时必经非常核心的一个步骤。对于一个软件项目,只有对其大...
  • wwwlgy
  • wwwlgy
  • 2017年04月17日 07:22
  • 802

项目规模的界定!

 shipatrioc http://www.jdon.com Nov 30, 2004 8:55 PM 回复 本人不太聪明,学了两年java却越学越糊涂.看了很多东西,不但大脑里没有头绪,反而有种...
  • zaowei21
  • zaowei21
  • 2004年12月03日 14:15
  • 1710

关于软件规模估算的方法【转】

http://hi.baidu.com/sileader/blog/item/7ace5fddec2190dd8c102930.html方法一、Delphi 法方法二、 类比法方法三、功能点估计法...
  • stamina88
  • stamina88
  • 2010年11月30日 15:14
  • 2168

基于决策树的分类

基于决策树的分类系列内容为自己学习数据挖掘的一个笔记 本部分内容来源《数据挖掘导论》4.3节一、决策树生成算法所谓决策树,就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个属性的测试,...
  • qingqing7
  • qingqing7
  • 2017年11月01日 17:50
  • 286

数据库 SQL千万级数据规模处理概要

我在前年遇到过过亿条的数据。以至于一个处理过程要几个小时的。后面慢慢优化,查找一些经验文章。才学到了一些基本方法。综合叙之,与君探讨之。 1. 数据太多。放在一个表肯定不行。 比如月...
  • zhangzhi0861
  • zhangzhi0861
  • 2015年03月11日 09:54
  • 1724

jquery项目中一些比较常用的简单方法

1:选择器 //这两个都是选择input中被选中的空间,但是在IE中$("#child input:checked")有可能还会选中text控件 $("#child input:checked")...
  • qiujialongjjj
  • qiujialongjjj
  • 2011年09月16日 18:59
  • 1206

快速学习COSMIC方法之二:COSMIC方法的度量过程

COSMIC方法的度量分为三个阶段:1 度量策略阶段2 映射阶段3 度量阶段在度量策略阶段,主要包括四个活动:    1)确定度量目的:为什么执行本次度量。比如你要度量一个房子的面积,是为了卖房子?是...
  • dylanren
  • dylanren
  • 2017年12月01日 10:55
  • 556

COSMIC规模度量方法v4.0度量手册中文版正式发布了!

COSMIC是通用软件度量国际联盟的简写,它成立于1998年,是一个由全球软件度量专家组成的非盈利自愿性组织,致力于软件规模度量方法的研究与推广。2002年1月COSMIC所推出的全功能点规模度量方法...
  • dylanren
  • dylanren
  • 2014年07月25日 17:06
  • 3217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的项目规模统计方法
举报原因:
原因补充:

(最多只允许输入30个字)