浅谈软件项目管理

发表于:2017-1-12 11:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:imisilence    来源:51Testing软件测试网采编

  初步接触《软件工程》这门专业课,在我看来:软件工程是一个极具挑战性的项目,在约定的时间内,整个项目小组可以在满足用户需求与软件基本规范的情况下,开发出稳定可靠的软件。但是,在软件开发的过程中,往往有许多不可规避的风险与未知的情况,例如:软件不能按时交付,软件的成本明显超过预期,软件未能达到用户的需求等等,"如果所用的时间是预计时间的两倍以上或费用超出预算两倍以上的项目为失控项目",为了有效规避项目在开发过程中的风险,所以笼统来说,项目管理指的是:根据特定的规范,在预算的范围内,按时完成指定的任务,运用高效快捷的方法,围绕计划对项目进行监控,在人力、费用和时间上进行控制。作为Team16小组的组长,在整个软件的开发过程中,实际担任的是"项目经理"的任务,所以下面让我们几个小节来谈谈软件项目管理。
  软件管理虽然涉及诸多的因素,例如:成本,质量,时间,资源等,但实际问题可以归结于:人员,问题和过程。当在软件工程开发的过程中,遇到了问题:需要人员之间的沟通与交流来进行解决,当然:人员是软件工程开发中的核心力量。
  一、软件过程控制
  在国际上,有这几个通用的标准:
  软件质量保证(SQA-Software Quality Assurance)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。ISO9000就是其中的一种,也就是产品的"说明书"。
  软件配置管理(SCM)是指在开发过程中各阶段,管理计算机程序演变的学科,它作为软件工程的关键元素。已经成为软件开发和维护的重要组成部分。SCM提供了结构化的、有序化的、产品化的管理软件工程的方法。它涵盖了软件生命周期的所有领域并影响所有数据和过程。
  1、软件的质量需求
  ISO 9001对质量的定义是"客户要求的一种产品或服务所具备的所有特性"。从宏观上来看,软件质量的要求可分为:规定的和隐含的需求,规定的是指:用户明确提出的需求和需要,而隐含的需求是指:需要开发者自己来明确的基本的需求,例如:软件的功能,软件的使用周期等。ISO确定了六中软件质量的特性:功能性,可靠性,可用性,有效性,可维护性,可移植性。
  2、ISO软件质量评价模型
  从1985年开始,国际标准化组织ISO和IEC就不断地该改进软件质量标准,现有的ISO质量标准,笔者以ISO/IEC 9126-1《产品质量-质量模型》,列出质量的三个方面:
  内部质量:在特定条件下时,软件产品满足需求能力的特性。主要指:在软件开发的过程中的中间产品的质量
  外部质量:在已经达成一致的条件下使用时,软件产品满足用户需求的程度;
  使用质量:在规定的使用条件下,软件产品使特定用户在达到规定目标方面的能力;
  3、笔者的理解
  如果将:软件看作程序和软件工程的集合体,那么:软件的质量就包括两方面:
  软件的质量 = 程序的质量 + 软件工程的质量
  程序的质量偏重于代码的功能性实现,而软件工程的质量则偏重于除去代码本身的其他外界组成因素。
  软件工程的质量大致体现在以下几个方面:
  1.软件的开发成本(Cost)
  一个软件在开发的过程中,最主要的与实际相关的便是:人力与物力的消费。成本包括时间与金钱等,虽然古语有云"十年磨一剑",但在如今高速发展的互联网时代,用如此长的时间周期去开发一个软件,显然是乌托邦幻想的情节。
  2.软件开发过程中的风险(Risk)
  软件开发实际是一个人与人之间的集体活动(以笔者的理解),每个人都会负责相应的模块与自己的责任,这就产生了人与人之间的关系,当然这些关系在特定的条件下,可能如同"级联现象"一样,被各种各样的因素所影响;例如:项目成员的突然退出(笔者就曾经遇到过这样的情况,结果项目组成员单个人的任务量就增多,同时项目的进度也受到影响),开发过程没有做很好的备份(当然现在许多软件的开发都依托于github托管 平台,便于管理与控制),开发难度过大(项目在开始的过程中,一开始预期的实现效果由于技术人和人的因素,而导致在预定的期限内无法完成,历史上:IBM 推出的System/360 Operating System就是一例)
  3.软件各模块的质量(partial)
  在软件开发的过程中,往往是分模块来进行,任务会进行人员的划分,在项目开发计划的甘特图(时间进度表)中,项目里程碑事件标志着这个子模块时间的结束,"千里之堤毁于蚁穴",不妨以此类比,内部模块的质量的好坏,里程碑事件的完成标准,项目各模块之间的连接关系等小的事件往往会决定整体部分的质量。
  4、说说软件测试的那些事(坑)?
  为什么要做软件测试?因为当我们规定了软件质量的标准后,测试则是:软件功能性需求是否得到满足的有效体现,同时:在测试的过程中也有可能发现未知的bug,有助于程序员写出更高质量的代码~
  当然,也有一种声音,诸如:Sriram Krishnan(一位在Yahoo和微软工作过的程序员)在他的博客中提到: 光看看一些从古至今最成功的软件开发团队就知道了。不论是当今的Facebook,还是30年前最初的NT团队,很多伟大的产品都是出自没有或很少测试人员的团队。
  但是,这个事情应该一分为二的来看:你不得不承认在现实生活中的确有很多大牛,人家的代码健壮性很强,让你根本就找不到什么bug(不过,经过面向对象OO这门课,大家的代码质量都提升了很多),但是:另一方面,你的软件没有经过充分的测试,就推出产品,那么当用户不断地在使用过程中发现各种各样的问题是,想必用户的好感度会大大降低,不过现在很多手机app,用户与后台开发人员交互地很多,例如:meizu手机所推出的系统专门有一个模块:用户帮助(手机用户可以进行bug的反馈,并且会有工程师来答复,笔者就曾经反馈过bug并且收到了回复),同理:像新浪微博里的微博小秘书也具备这个特点。
  软件测试坑点1
  谁来测试?是这段程序代码的开发人员还是有专门的测试人员?如果是开发人员想要继续新的功能而不想测试或是专门的测试人员来做,他是否能理解代码的全部的功能意图?开发人员在得知代码有人来测试还对这段代码负责吗?
  软件测试坑点2
  测试过程中,测试方法的选择与用例的多少?在我们OO这门课中,一次的作业是编写测试用例,使得分支的覆盖率达到100%,由于当时自己的代码规模写的比较大,所以写完所有的测试用例并不是一件轻松的事情,那么:在软件开发的过程中,测试的用例恐怕就不是和笔者的作业一个数量级,那么测试数量如何保证,自动化测试的方法虽然可取但可能存在一定的局限性,John Musa(曾在 AT&T Bell实验室工作)提出:通过评价每个模块可能使用次数来降低故障率。越是常用的组件越要严格测试。这种提议尚可考虑。
  软件测试坑点3
  发现bug时的采取措施?一个bug的出现可能隐藏着潜在未知的问题,因为:即使在你充分降低各模块的耦合程度下,各部分之间还是存在一定的相关性,在这样的情况下,极有可能发生多米诺骨牌效应,当发现问题时,是否应当重新测试所有样例?当然并不可取,一种一种基于估算错误的方法可以参考( 参见Tom Gilb的《Software Metrics》)。
  笔者的观点:
  一个好的软件项目背后一定是开发人员和测试人员的共同努力,依据不同的软件项目估摸采取不同的质量标准和测试方法,另一方面:软件质量应该是一个不断提升迭代的过程,现在市面上的软件都不断地推出更新包,实质也是在解决软件使用中的bug,所以后期的维护与更新一定程度上也体现了软件质量的提升。
  5、关于软件配置管理
  定义:软件配置管理(SCM) 是在整个软件工程中应用的一种普适性活动,在卡发的过程中,变更随时会发生,SCM活动主要应用于:标识变更、控制变更、保证恰当的实施变更、向有关人员报告变更。
  软件在配置管理中有4个主要的目标:
  · 统一标识软件配置项
  · 管理一个或多个软件配置项的变更
  · 便于构造应用系统的不同版本
  · 在配置随时间演化的过程中,确保软件的质量
  由此,定义了5个SCM任务:标识,版本控制、变更控制、配置审核和报告。
  标识配置项:利用面向对象的方法,对每个配置项进行标识,对软件开发过程中的所有软件项目赋予唯一的标识符,便于对其进行状态控制和管理。
  版本控制:存储在开发过程中,相关数据项的所有版本,便与软件的开发与回退,避免出现:丢失版本或不知版本问题。感觉用github托管,会更加方便。
  变更控制:通过对变更申请人的变更请求进行评估,形成变更报告,建立工程变更单(ECO),对变更进行实施,同时:建立适当的版本与记录
  配置审核和报告:变更控制的补充手段,来确保某一变更需求已被切实实现。配置审核的任务便是验证配置项对配置标识的一致性。配置审核的实施是为了确保项目配置管理的有效性,体现配置管理的最根  本要求,不允许出现任何混乱现象。
  笔者看来,配置管理:实际是对软件开发过程中是否进行变更进行评估,对执行的变更进行记录使其变得有条理化与逻辑性,进行有序的变更控制,
  二、软件的组织模式
  软件开发的主体——团队
  软件工程的主体是人的活动,当一群有一定的集体目标的人聚集在一起为开发出具有一定功能的软件而相互合作时,我们将其称为团队。团队内部的成员,虽然相互合作但每个人有具体明确的分工。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号