软件软件软件

学习软件工程和软件开发怎么入门?系统架构师:软件开发方法「软件生命周期、软件开发模型」

作为一名从业多年的IT人,同时也是一名计算机专业的研究生导师,所以我来回答一下这个问题。

一.软件生命周期系统架构师:软件开发方法「软件生命周期、软件开发模型」

软件生命周期

首先,在当前的云计算、大数据时代背景下,学习软件开发是不错的选择,从当前互联网发展的基本面来看,未来软件开发领域的人才需求量依然比较旺盛。学习软件工程和软件开发怎么入门?系统架构师:软件开发方法「软件生命周期、软件开发模型」(图2)

  软件生命周期也就是软件生存的周期。同万物一样,软件也有诞生和消亡,软件生命周期就是指软件自开始构思与研发到不再使用而消亡的过程。有关软件生命周期的阶段划分,不同的标准有不同的规定。软件生命周期划分为 8 个阶段:可行性研究与计划、需求分析、概要设计、详细设计、实现、集成测试、确认测试、使用和维护。

学习软件开发需要根据自身的实际情况来选择不同的学习方式,不同的知识结构和能力特点应该选择不同的发展路线,当前全栈开发和研发级开发两个方向都是不错的选择。如果自身具有扎实的数学基础,而且学习能力也比较强,那么可以考虑走研发级路线,研发级程序员岗位往往具有更高的薪资待遇和更长的职业生命周期。而如果动手能力比较强,但是逻辑思维能力并不算特别强,对于算法设计也并不感兴趣,那么可以走全栈程序员路线(应用级开发)。

可行性研究与计划:在决定是否开发软件之前,首先需要进行可行性研究。通过可行性研究,来确定开发此软件的必要性,并根据可行性研究的结果初步确定软件的目标、范围、风险、开发成本等内容。从而制定出初步的软件开发计划。通过可行性研究,如果确定该软件具有研发的必要,则将产生《可行性研究报告》和《软件开发计划》,并进入需求分析的阶段。需求分析:需求分析是软件开发的重要阶段。经过可行性研究后,初步确定了软件开发的目标和范围,之后则需要对软件需求进行细致的分析,以确定软件要实现的功能。概要设计:概要设计确定整个软件的技术蓝图,负责将需求分析的结果转化为技术层面的设计方案。在概要设计中,需要确定系统架构、各子系统间的关系、接口规约、数据库模型、编码规范等内容。详细设计:详细设计完成编码前最后的设计,详细设计是在概要设计的基础上,进行细化。详细设计不是开发过程中必需的阶段,在一些规模较小、结构简单的系统中,详细设计往往被省略。同样,在某一次软件开发中,可能只会对部分关键模块进行详细设计。实现:实现过程包括编码和单元测试。单元测试指的是对刚刚编写出的一个小的程序单元进行测试,如某一个过程、方法或函数。因为单元测试的对象是小的程序单元,而不是完整的程序,因此往往需要编写一些测试程序来进行测试。有效的单元测试可以大大提高编码的质量,降低软件系统的缺陷率。集成测试:集成测试又称为组装测试。通过单元测试的程序并不意味着没有缺陷,当程序单元被集成到一起进行交互时,往往会出现单元测试中不能发现的问题。同单元测试不同,集成测试必须经过精心的设计,指定集成测试计划,确定如何将这些程序单元集成到一起。确认测试:当完成集成测试后,软件之间的接口方面的错误已经排除,这时需要验证软件是否同需求一致,是否达到了预期目标。同集成测试一样,确认测试也需要进行计划和组织,逐步地验证软件系统同需要的一致性。经过确认测试的软件将投入正常使用,并进入维护期。使用和维护:即使通过了单元测试、集成测试和确认测试,也不可能发现软件系统中的全部缺陷;软件系统的需求也会根据业务的发展变化而变化。因此,在软件使用过程中,必须不断地对软件进行维护,修正软件中的缺陷,修改软件中已经不适应最新情况的功能或者增加新的功能。软件维护的过程会贯穿整个软件的使用过程。当使用和维护阶段结束后,软件系统也就自然消亡,软件系统的生命周期结束。二.软件开发模型

1.瀑布模型

  瀑布模型认为,软件开发是一个阶段化的精确过程。软件要经过需求分析、总体设计、详细设计、编码与调试、集成测试和系统测试阶段才能够被准确地实现。每一阶段都有回到前一阶段的反馈线,这指的是,在软件开发中当在后续阶段发现缺陷时,可以把这个缺陷反馈到上一阶段进行修正。

当前的时代背景下,如果选择走研发级开发路线,需要注重三方面知识的学习,其一是计算机基础知识,重点在于操作系统和算法设计;其二是物联网基础;其三是人工智能基础。当前研发级岗位的重点领域就集中在物联网和人工智能领域,随着产业互联网的发展,在5G通信的支撑下,物联网和人工智能领域会释放出大量的研发级岗位。

如果选择走应用级开发路线,同样也需要注重三方面知识结构,其一是编程语言,最好选择一门全场景编程语言,Java、Python、C#等都是不错的选择;其二是云计算平台知识,云计算平台未来对于应用级开发越来越重要;其三是大数据知识,随着大数据技术的落地应用,大数据领域会释放出大量的行业应用级开发岗位。

我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

系统架构师:软件开发方法「软件生命周期、软件开发模型」

瀑布模型

  瀑布模型的一个重要特点:软件开发的阶段划分是明确的,一个阶段到下一个阶段有明显的界线。在每个阶段结束后,都会有固定的文档或源程序流入下一阶段。因此也称瀑布模型是面向文档的软件开发模型。

如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!

  当软件需求明确、稳定时,可以采用瀑布模型按部就班地开发软件,当软件需求不明确或变动剧烈时,瀑布模型中往往要到测试阶段才会暴露出需求的缺陷,造成后期修改代价太大,难以控制开发的风险。

2.瀑布 V 模型

  瀑布 V 模型是瀑布模型的一种变体。随着对瀑布模型的应用,人们发现,缺陷是无法避免的,任何一个阶段都会在软件中引入缺陷,而最后的测试也不能保证软件完全没有缺陷,只能争取在交付前发现更多的缺陷。测试成为软件开发中非常重要的环节,测试的质量直接影响到软件的质量。因此,人们对瀑布模型进行了小小的更改,提出了更强调测试的瀑布 V 模型。

系统架构师:软件开发方法「软件生命周期、软件开发模型」

瀑布V模型

瀑布模型的缺点

在瀑布模型中,需求分析阶段是一切活动的基础,设计、实现和验证活动都是从需求分析阶段的结果导出的。一旦需求分析的结果不完全正确,存在偏差,那么后续的活动只能放大这个偏差,在错误的道路上越走越远。瀑布模型难以适应变化。在瀑布模型中精确地定义了每一个阶段的活动和活动结果,而每一阶段都紧密依赖于上一阶段的结果。如果在软件的后期出现了需求的变化,整个系统又要从头开始。使用瀑布模型意味着当所有阶段都结束才能最终交付软件产品,所以在提出需求后需要相当长一段时间的等待才能够看到最终结果,才能发现软件产品究竟能不能够满足客户的需求。文档驱动型的瀑布模型除了制造出软件产品外还将产生一大堆的文档,大部分的文档对客户没有任何意义,但完成这些对客户没有意义的文档却需要花费大量的人力。所以瀑布模型也是一种重载过程。

3.演化模型

  在应用软件开发的过程中,开发者很难一次性完全理解用户的需求、设计出完美的架构,开发出可用的系统,这是由于人的认知本身就是一个过程,这个过程是渐进的、不断深化的。对于复杂问题,“做两次”肯定能够做得更好。那么,对于软件开发这个复杂而且与人的认知过程紧密相关的事也应该是一个渐进的过程。演化模型正是基于这个观点提出的。一般情况下,一个演化模型可以看做若干次瀑布模型的迭代,当完成一个瀑布模型后,重新进入下一个迭代周期,软件在这样的迭代过程中得以演化、完善。根据不同的迭代特点,演化模型可以演变为螺旋模型、增量模型和原型法开发。

系统架构师:软件开发方法「软件生命周期、软件开发模型」

演化模型

4.螺旋模型

  螺旋模型将瀑布模型和演化模型结合起来,不仅体现了两个模型的优点,而且还强调了其他模型均忽略的风险分析。螺旋模型的每一周期都包括需求定义、风险分析、工程实现和评审 4 个阶段,由这 4 个阶段进行迭代,软件开发过程每迭代一次,软件开发就前进一个层次。

系统架构师:软件开发方法「软件生命周期、软件开发模型」

螺旋模型

  与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便,有助于提高目标软件的适应能力,为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发风险。

但是,不能说螺旋模型绝对比其他模型优越,事实上,螺旋模型也有其自身的缺点:

采用螺旋模型,需要具有相当丰富的风险评估经验和专业知识。在风险较大的项目开发中,如果未能及时标识风险,势必会造成重大损失。过多的迭代次数会增加开发成本,延迟提交时间。

5.增量模型

  在系统的技术架构成熟、风险较低的时候,可以采用增量的方式进行系统开发,这样可以提前进行集成测试和系统测试,缩短初始版本的发布周期,提高用户对系统的可见度。 对于增量模型,通常有两种策略。一是增量发布的办法。即首先做好系统的分析和设计工作,然后将系统划分为若干不同的版本,每一个版本都是一个完整的系统,后一版本以前一版本为基础进行开发,扩充前一版本的功能。在这种策略中,第一版本往往是系统的核心功能,可以满足用户最基本的需求,随着增量的发布,系统的功能逐步地丰富、完善起来。用户在很短的时间内就可以得到系统的初始版本并进行试用。试用中的问题可以很快地反馈到后续开发中,从而降低了系统的风险。在应用增量模型中需要注意:

每一个版本都是一个完整的版本。虽然最初的几个增量不能完全地实现用户需求,但这些版本都是完整的、可用的。版本间的增量要均匀,这一点是很重要的。如果第一个版本花费一个月的时间,而第二个版本需要花费 6 个月的时间,这种不均匀的分配会降低增量发布的意义,需要重新调整。

  另一种策略是原型法。同增量发布不同,原型法的每一次迭代都经过一个完整的生命周期。当用户需求很不明确或技术架构中存在很多不可知因素的时候,可以采用原型法。在初始的原型中,针对一般性的用户需求进行快速实现,并不考虑算法的合理性或系统的稳定性。这个原型的主要目的是获得精确的用户需求,或验证架构的可用性。一般情况下,会在后面的开发中抛弃这个原型,重新实现完整的系统。

系统架构师:软件开发方法「软件生命周期、软件开发模型」

增量模型

6.构件组装模型

  随着软构件技术的发展,人们开始尝试利用软构件进行搭积木式的开发,即构件组装模型。在构建组装模型中,当经过需求分析定义出软件功能后,将对构件的组装结构进行设计,将系统划分成一组构件的集合,明确构件之间的关系。在确定了系统构件后,则将独立完成每一个构件,这时既可以开发软件构件,也可以重用已有的构件,当然也可以购买或选用第三方的构件。构件是独立的、自包容的,因此架构的开发也是独立的,构件之间通过接口相互协作。

系统架构师:软件开发方法「软件生命周期、软件开发模型」

构件组装模型

构件组装模型的优点:

构件的自包容性让系统的扩展变得更加容易设计良好的构件更容易被重用,降低软件开发成本构件的粒度较整个系统更小,因此安排开发任务更加灵活,可以将开发团队分成若干组,并行地独立开发构件。

构件组装模型的缺点:

对构件的设计需要经验丰富的架构设计师,设计不良的构件难以实现构件的优点,降低构件组装模型的重用度。在考虑软件的重用度时,往往会对其他方面做出让步,如性能等。使用构件组装应用程序时,要求程序员熟练地掌握构件,增加了研发人员的学习成本。第三方构件库的质量会最终影响到软件的质量,而第三方构件库的质量往往是开发团队难以控制的。

未经允许不得转载:软件 » 学习软件工程和软件开发怎么入门?系统架构师:软件开发方法「软件生命周期、软件开发模型」