软件软件软件

软件开发的几个关键过程(转载)〔原创〕扫盲:解释软件开发工作的几个名称

软件开发的几个关键过程
在各个技术论坛,看了很多之后,有点感慨。觉得应该写这样一篇文章来解释一下软件开发是一份什么样的工作。
  一.软件项目管理(Software Project Management)
  
  SW-CMM将项目管理分为两个部分,即软件项目计划(Software Project Planning)和软件项目跟踪及监控(Software Project Tracking and Oversighting)。
  软件开发:软件开发是一种很复杂的人类活动,经常会和建筑工程类比,因为两者有很多相似之处,不理解软件工程的多想想房子是怎么建起来的。软件开发的活动非常抽象,对此没有一个很好的定义。简单来说这个活动包括的行为有:需求分析,软件设计,程序开发,测试等工作。最终的过程就是一个抽象的成果——软件——来实现一个抽象的功能。正因为功能是抽象的,所以很难让参予者达成一致意见;正因为结果是抽象的,所以很难对结果有个确切的描述,能够让其它人很容易的了解你具体做了什么。所以说,软件开发是最复杂的人类活动,一点都不过分。记住,软件开发是一种人类活动,不是C语言,不是Java,更不是Ajax。软件开发也不是一份职业,有很多职业跟它有关系!你的工作只是软件开发的一部分,要理解你的工作,最好还是先理解软件工程。
  软件项目计划的目的是为完成软件工程和管理软件项目制定合理的计划。
  软件项目计划包含估计待完成的工作,建立必要的约定和确定进行该工作的计划。
  
  需求分析:需求分析简单来说就是把一个软件所需要完成的功能都明确下来。这说起来是非常简单的事情,但是由于我们面对的需求是抽象的东西——什么意思?就是说没有实际的形状,具体存在的物品是和这个相对应的,比如说我要一个螺丝,我可以说我要多大的,什么形状的;而软件需求,我说我要一个能记录公司100人出差记录的系统,确根本没有能和这个需求对应上的实际物品。正是因为这种抽象性,从根本上决定了软件开发活动的复杂。因为抽象,所以难以表述;因为抽象,所以难以有共识;更凄惨的是,因为抽象,所以善变!今天是100人,公司发展了就是1000人!靠,不能让公司一直维持100个人吗?就像我的螺丝用这么大,我的螺丝孔也一直用这么大的一样?显然,不一样。需求分析,为什么值钱,我这么白话的解释,应该算比较清楚了吧。因为需求分析要从整体上对整个软件开发现在的和将来的活动负责。当然,只是负责而已,又不付钱,所以也没什么大不了的!
  
  软件计划计划首先作出有关待完成的工作和其它定义及界定软件项目的约束和目标(由需求管理关键过程区域的实践所建立的)的陈述。软件计划过程包括以下步骤:估计软件工作产品规模及所需的资源,制定时间表,鉴别和评估软件风险和协商约定。为了制定软件计划(即软件开发计划),可能需要重复地通过这些步骤。软件开发的几个关键过程(转载)〔原创〕扫盲:解释软件开发工作的几个名称(图1)
  该计划提供完成和管理软件项目活动的基础,并按照软件项目的资源、约束和能力,阐述对软件项目的顾客作的约定。
  软件项目跟踪和监控的目的是建立对实际进展的适当的可视性,使管理者能在软件项目性能明显偏离软件计划时采取有效措施。
  软件设计和程序开发:由于国内的公司这都不分的,所以我就都综合为程序开发了,这包括理解需求,软件构建,代码编写,编译连接,调试等过程。能不能理解一份需求是程序员很重要的素质,需求都不能理解的人不能做程序员。能不能构建软件,这不仅需要能理解需求,还要能理解开发所面临的环境。代码编写、编译连接、调试涉及工具的选择,C语言?Java?HTML?——最好是按需选择。一般来说,写桌面应用,最好是用Visual Studio,因为这一块微软真的是具有绝对领先的优势,反正开发工具不要钱,为啥不用最好的?很多人用Dephi、C++ Build什么的,我觉得很奇怪!估计是因为方案提供商是外企,而外企正好给的代码是这些工具写的代码的缘故吧。如果要做大型的商用软件,可以选择的面就很大,但是不管怎么选,其实关键是你做这个都赚不到钱,因为利益大部分都被卖服务器硬件的分配去啦。中国没有大的软件公司为什么?好好想想这里头的原因,然后再好好考虑考虑自己要学什么开发工具吧。真可爱,那么多培训.net,J2EE什么的,中国有哪个做.net的公司很牛X的,公司不赚钱,哪有钱发给你?那么多人去学,学不赚钱的本事干什么?软件发展到现在已经成为一种高技术的附加工具,而不是利润来源了。很多掌握了软件开发武器的硬件公司,把软件作为他硬件的附加值来卖。这让做纯软件的人已经很难有生存的空间。但是硬件在发展,软件也势必随之发展,硬件产商关注的始终还是硬件,因为软件于其不是赢利点,所以软件开发始终都还是能赚到钱的。能把握硬件发展趋势的软件公司才能赚到钱!所以说做程序开发的XDJM,不要迷信任何开发工具,任何开发工具都不能让你成为真正的软件工程师。理解需求,就需要学好自己的专业课,然后找和自己专业知识相近的开发岗位,这样就很容易理解需求,很容易上手。而学习开发工具呢,也不要限于书本,软件开发除了写代码还有编译连接,还有调试,这些都是书本学不来的东西,要多实践才能有所收获。我觉得很可惜,我们被大家盛赞的谭氏C语言里头的习题也大多都太复杂,不利于初学者,而且这些习题的内容在以后的编程工作中也基本用不上。如果有一本书能给出几个简单的应用需求,让学习的人过一过编程的瘾,那真是太好了。真的,用一用实际的东西,比你看一百本书都有用。软件开发本来就很抽象,书上讲得更抽象,其实真的做起来,我觉得写程序是软件开发中唯一不抽象的活,最简单,最可爱。
  
  软件项目跟踪和监控包括对照已文档化的估计、约定、和计划评审和跟踪软件完成情况和结果。基于实际的完成情况和结果调整这些计划。
  测试:测试工作有两种做法,一种是验证,有什么功能,就验证什么,取得验证性的结果——这是保证能实现那个抽象功能的基本要求。说白了就是别人怎么说,你怎么用,看看是不是跟他说得对得上。另一种就是深入的测试分析,通过测试来寻找软件中隐含的缺陷和错误。软件使用者是人,人是最聪明的动物——往往是自作聪明:)——所以要让你的软件能经得起所有聪明人的使用,这确实是一件很痛苦的事情!尤其是你做的软件涉及钱的时候——财务,计费哈哈,这很困难!要模拟所有可能的人的操作是很困难的,而且你的对手可能还是一个像我这样的软件工程师,你的软件中是不是留下了能让我可以偷走的东西呢?测试人员责任重大!要做好测试分析,显然必须要能够尽可能多的理解软件的功能接口,尽可能多的理解软件开发,这是很稀有的人。人以稀为贵,和东西一样!
  
  软件项目的已文档化的计划(即软件开发计划,正如在软件项目计划关键过程区域中所描述的)用作跟踪软件活动、传送状态和修订计划的基础。考|试/大管理者监控软件活动。主要通过在所选出的软件工作产品完成时和在所选择的里程碑处,将实际的软件规模。工作量、成本和时间表与计划相比较,来确定进展情况。当确定未实现软件项目计划时,采取纠正措施。这些措施可以包括修订软件开发计划以反映实际的完成情况和重新计划遗留的工作或者采取改进性能的措施。
  二.软件需求(Software Requirement)
  需求管理的目的是在顾客和将处理顾客需求的软件项目之间建立对顾客需求的共同理解。
  需求管理包括和顾客一起建立和维护有关软件项目需求的协议,该协议称作“分配给软件的系统需求”。“顾客”可解释为系统工程组、销售组、另一个内部组织、或者一个外部顾客。考|试/大协议既包括技术需求、又包括非技术需求(例如交付日期)。该协议形成估计、策划和跟踪整个软件生存周期内软件项目活动的基础。
  将系统需求分配给软件、硬件和其它系统成分的工作可能由软件工程组之外的组测如系统工程组)完成,软件工程组可能对此分配无直接控制。在项目约束范围内,软件工程组采取恰当步骤以保证对分配给软件的需求建档、并加以控制,该组负责处理分配给软件的系统需求。
  为实现此控制,软件工程组评审初始的和经修改的分配给软件的系统需求,以便在它们被纳入软件项目之前使问题得以解决。每当改变分配给软件的系统需求时,都要调整受到影响的软件计划,工作产品和活动,使其与更新后的需求保持一致。
  看到这里,你还不理解软件开发是怎么一回事的话,就跟帖问哈~)  三.软件度量(Software Measurement)
  软件度量(Software Measurement)通过各种不同的量度(metric)对软件生命周期中的各个元素进行度量(Measure),它能够为项目管理者提供有关项目的各种重要信息,同时也是进行大多评估活动的基础。
  SW-CMM中并没有一个专门的软件度量的关键过程域,而是将其贯穿于其他关键过程域中,不过在SW-CMM的继承者--CMMI中定义了一个专门的关键过程域:度量与分析。
  四.软件配置管理(Software Configuartion Management)
  软件配置管理的目的是建立和维护在项目的整个软件生存周期中软件项目产品的完整性。
  软件配置管理包括标识在给定时间点上软件的配置(即选定的软件工作产品及其描述),系统地控制对配置的更改、并维护在整个软件生存周期中配置的完整性和可银踝性。置于软件配置管理之下的工作产品包括交付给顾客的软件产品(例如软件需求文档和代码),以及与这些软件产品等同的产品项或生成这些软件产品所要求的产品项(例如编译程序)建立一个软件基线库,当软件基线形成时就将它们纳入该库。通过软件配置管理的更改控制和配置审计功能,系统地控制基线的更改和那些利用软件基线库构造成的软件产品的发行。
  这个关键过程区域仅包括实施软件配置管理功能的实践。而标识具体的配置项或单元的实践则包含在描述每个配置项或单元的开发和维护的关键过程区域中。
  五.软件质量保证(Software Quality Assurece)
  软件质量保证的目的是向管理者提供适当的对软件项目正使用的过程和正构造产品的可视性。
  软件质量保证包括评审和审计软件产品和活动以验证它们符合适用的规程和标准,给项目和其它有关的经理提供这些评审和审计的结果。
  在软件项目的早期阶段,软件质量保证组与软件项目一起工作制定计划、标准和规程等,这些计划、标准、和规程将增加软件项目的价值并将满足项目和组织方针上的限制。通过参与制定计划、标准和规程,软件质量保证组帮助确保它们适合项目的需要,并且帮助验证它们对完成整个软件生存周期中的评审和审计将是适用的。考|试/大软件质量保证组在整个生存周期评审项目活动,审计软件工作产品,并就软件项目是否正遵守已制定的计划、标准和规程等给管理者提供可视性。
  首先在软件项目内部处理符合性问题,如可能的话就地解决它。对于那些无法在软件项目内部解决的问题,软件质量保证组逐级上递该问题到管理者的恰当层次以求得解决。
  这个关键过程区域只包括该组履行软件质量保证功能的实践。而识别软件质量保证组要评审和(或)审计的具体的活动和工作产品的实践一般包含在其它关键过程区域的验证实施共同特点中。
  六.软件测试(Software Testing)
  软件测试(Software Testing)是发现软件中错误和缺陷的主要手段。在一般情况下,软件测试过程与整个软件开发过程基本上是平行进行的。测试计划早在需求分析阶段即应开始制定。其它相关工作,包括测试大纲的制定、测试数据的生成、测试工具的选择和开发等也应在测试阶段之前进行。充分的准备工作可以有效地克服测试的盲目性,缩短测试周期,提高测试效率,并且起到测试文档与开发文档互查的作用。
  在CMM1.1的标准中没有单独的软件测试关键过程域,而是作为软件产品工程(SMM三级的KPA)的一部分,SEI原计划在CMM2.0的版本增加软件测试相关的独立KPA,但后来因为CMM2.0的计划被CMMI所取代,因此将软件测试相关的内容在纳入CMMI三级标准中的两个KPA:Validation和Verification。
  武汉云林网络科技有限公司成立于2003年,是湖北省知名的软件开发及服务提供商。立足本地,辐射全国,多年来,先后为六百余家国企私企、政府事业单位、公共机构、外资企业、大专院校、金融机构、医疗机构等的网络开发应用、平台建设、信息化管理提供了完善的解决方案与优质的服务。让每一个用户获得信息化的价值!http://www.yunlin.cn/
  公司地址:中国湖北省武汉市江汉区江汉北路34号 九运大厦D102
  全国咨询热线 :400-007-1121 E-MAIL: support@yunlin.cn
  http://www.yunlin.cn/

未经允许不得转载:软件 » 软件开发的几个关键过程(转载)〔原创〕扫盲:解释软件开发工作的几个名称