• 计算与软件工程 作业五


    计算与软件工程作业五


    作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10584
    课程目标 了解软件工程的方法论。仔细阅读关于软件工程方法论的文章(包括相关的讨论),谈谈自己对软件工程的看法。
    参考文献 https://www.cnblogs.com/xinz/p/3852390.html
    作业正文 https://www.cnblogs.com/wanghuiru/p/12655620.html

    软件开发过程

    软件开发过程是随着开发技术的演化而随之改进的。从早期的瀑布式的开发模型到后来出现的螺旋式的迭代开发,以致最近开始兴起的敏捷软件开发,它们展示出了在不同时代的软件产业对于开发过程的不同的认识,以及对于不同类型项目的理解方法。

    一、瀑布模型:

    瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段。
    瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序。
    瀑布模型的优缺点:
    优点:
    1) 为项目提供了按阶段划分的检查点
    2) 当前一阶段完成后,只需要去关注后续阶段
    3) 可在迭代模型中应用瀑布模型
    缺点:
    1) 在项目各个阶段之间极少有反馈
    2) 只有在项目生命周期的后期才能看到结果
    3) 通过过多的强制完成日期和里程碑来跟踪各个项目阶段

    二、螺旋模型:

    螺旋模型(Spiral Model)采用一种周期性的方法来进行系统开发。这会导致开发出众多的中间版本。使用它,项目经理在早期就能够为客户实证某些概念。该模型是快速原型法,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。
    螺旋模型的优缺点:
    优点:
    1) 设计上的灵活性,可以在项目的各个阶段进行变更
    2) 以小的分段来构建大型系统,使成本计算变得简单容易
    3) 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性
    4) 随着项目推进,客户始终掌握项目的最新信息,从而客户能够和管理层有效地交互
    缺点:
    1) 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能及时标识风险,势必造成重大损失
    2) 过多的迭代次数会增加开发成本,延迟提交时间

    三、敏捷软件开发

    敏捷型软件开发不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人,及突出了人作为软件开发的核心,在软件开发中起到的价值。它采用的是迭代式开发敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。
    (1)敏捷开发要点:
    1)注重概念和架构设计,轻详细设计
    2)使用SWOT分析法
     SWOT分析法:SWOT分析法常常被用于制定集团发展战略和分析竞争对手情况,在战略分析中,它是最常用的方法之一。 它又称为态势分析法,是由旧金山大学的管理学教授于20世纪80年代初提出来的,SWOT四个英文字母分别代表:优势(Strength)、劣势(Weakness)、机会(Opportunity)、威胁(Threat)。
     a)优势,是组织机构的内部因素,具体包括:有利的竞争态势;充足的财政来源;良好的企业形象;技术力量;规模经济;产品质量;市场份额;成本优势;广告攻势等。
     b)劣势,也是组织机构的内部因素,具体包括:设备老化;管理混乱;缺少关键技术;研究开发落后;资金短缺;经营不善;产品积压;竞争力差等。
     c)机会,是组织机构的外部因素,具体包括:新产品;新市场;新需求;外国市场壁垒解除;竞争对手失误等。
     d)威胁,也是组织机构的外部因素,具体包括:新的竞争对手;替代产品增多;市场紧缩;行业政策变化;经济衰退;客户偏好改变;突发事件等。
    3)市场和需求驱动,而非技术驱动
    4)时刻考虑版本兼容性
    5)轻文档,但非无文档
    敏捷开发强调沟通的重要性,而轻冗余文档。但敏捷开发并不意味着无文档。在敏捷开发过程中,适量的文档还是很有帮助,有助于整理思路,加快沟通和讨论。
    (2)敏捷开发原则:
    1) 最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
    2)欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
    3)经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
    4) 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
    5) 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
    6)不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
    7)可工作的软件是进度的首要度量标准。
    8) 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
    9)坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
    10) 以简洁为本,它是极力减少不必要工作量的艺术。
    11) 最好的架构、需求和设计出自自组织团队。
    12) 团队定期地反思如何能提高成效,并依此调整自身的举止表现。

    四、统一软件开发过程(RUP,Rational Unified Process)

    RUP最重要的它有三大特点:
    1)软件开发是一个迭代过程
    2)软件开发是由Use Case驱动的
    3)软件开发是以架构设计(Architectural Design)为中心的。

    软件工程方法论

    重量级方法:呈现的是一种“防御型”的姿态。在应用“重量级方法”的软件组织中,由于软件项目经理不参与或者很少参与程序设计,无法从细节上把握项目进度,因而会对项目产生“恐惧感”,不得不要求程序员不断撰写很多“软件开发文档”。
    轻量级方法:呈现“进攻型”的姿态,这一点从XP方法特别强调的四个准则—“沟通、简单、反馈和勇气”上有所体现。目前有一些人认为,“重量级方法”适合于大型的软件团队(数十人以上)使用,而“轻量级方法”适合小型的软件团队(几人、十几人)使用。当然,关于重量级方法和轻量级方法的优劣存在很多争论,而各种方法也在不断进化中。
    重量级方法强调以开发过程为中心,而不是以人为中心。

    一、新的思想方法和设计原则:

    随着软件技术,尤其是面向对象技术(OO)的发展,软件工程提出了以下新的思想方法和设计原则:
    抽象:抽取事物最基本的特性和行为,忽略非基本的细节。采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。
    信息隐蔽:将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问,使用与实现分离的原则。
    模块化:通过对象、类等模块化手段实现信息隐蔽和抽象,有助于表示复杂的系统。
    局部化:在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于控制解的复杂性。
    确定性:软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。
    一致性:整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语。
    完备性:软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件过程中需要严格的技术评审。
    可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。

    二、关于软件工程方法论的看法:

    在列举的一系列文章中其中一篇文章讲的是敏捷开发,强调了个人和互动高于流程和工具,工作软件高于理解文档,客户协作高于合同协商,变化响应高于计划遵循。在进行软件开发的时候,需要真正的落实敏捷开发的理念。用敏捷开发来做事,需要在开发的过程中找到适合的位置,然后慢慢的向目标靠近。确立目标就要立即行动去实现,做到真正的敏捷,不要只是说 “敏捷”这个词,不能让“敏捷”这个词失去其意义。在软件开发过程中,要尽可能的做到自己的责任。一个软件的开发需要团队所有的人共同的来负责,这样才能做出好的软件好的效果。

  • 相关阅读:
    Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo
    微服务架构
    异常点/离群点检测算法——LOF
    多边形区域填充算法--递归种子填充算法
    Java 关于容器集合等数据结构详情图解,一目了然
    平衡小车项目解读日志
    <LeetCode OJ> 101. Symmetric Tree
    【JVM】模板解释器--字节码的resolve过程
    hexo博客的相关配置
    【LeetCode】Find Minimum in Rotated Sorted Array 解题报告
  • 原文地址:https://www.cnblogs.com/wanghuiru/p/12655620.html
Copyright © 2020-2023  润新知