zoukankan      html  css  js  c++  java
  • 2020ASE第二次博客—由需求分析来看软件开发的挑战

    由需求分析来看软件开发的挑战

    前言

    这篇博客的主题是:由需求分析来看软件开发的挑战。那么问题来了,软件开发的挑战到底在哪些地方,在需求分析阶段又是如何体现的?借着刚结束的需求分析评审,我打算结合自己这段时间的课程经历回答一下这个问题。

    领域分析

    ​ “领域分析!!!领域分析是什么?”第一次听说这个名词时,我感到很诧异,软件工程里有这么一环吗?遂查阅了一下,领域可以以如下三种形式描述:

    • 一组或一族相关系统,所有这些系统共享一种能力和 / 或数据集。
    • 具有相同需求的一个应用程序族描述的问题空间。
    • 一个问题或任务领域,在其中可以开发出多重高度相似的应用系统,以满足各种不同用户的特定需求。

    上面的不同描述形式说明了领域的基本组成成分是相关系统,所有这些系统间存在某种依赖关系,来实现一个共同的目标,综合以上定义,领域的一个描述性定义如下:

    领域是由具有相同需求的一组或一族相关系统所组成的,是为重用的系统开发和基于重用的系统开发所形成的系统仓库。

    所以领域分析要回答的问题是:

    • 系统的核心价值是什么?
    • 系统的范围包括哪些方面?
    • 系统涉及的核心数据有哪些?

    从领域分析报告模板里也可以看出这一点:

    于是我们小组就按照上述条目分工,大家就吭哧吭哧做自己的部分;做完之后小组开会讨论的时候,发现大事不好,小组五位成员就有五个版本,特别是在术语方面体现得最为明显,大家显然都有自己专属的命名方式;后来经过大家长时间的讨论与磨合,终于,最初的一个版本出来了,经过老师的评审反馈,我认为领域分析报告中体现出了两个大问题:

    1. 对领域系统定义模糊不清,不够确切;
    2. 对系统的核心价值定位不准。

    针对以上过程中出现的问题,小组做了两个方面的改进:

    第一,合作模式的变化,在分析设计阶段小组遵循这样的模式:

    1. 小组讨论,确定大框架
    2. 成员分工,细化小细节
    3. 小组开会,互相评审
    4. 迭代优化,直到到达目标效果

    第二,自我定位的变化:

    我们发现,如果把自己看作成创业者,自己的小组看成一个创业团队,把自己的项目(领域分析模型、需求分析模型)看成要去融资的项目,用这个视角来看的话,我们对项目的核心价值的认识又有了新的发现,对系统涉及到的角色的特点,与其利益相关最大的地方才是这个系统最大的价值。

    需求分析

    ​ 通过与我们的天使投资人--吴老师的讨论,我们发现,给客户提供便利廉价的一条龙产品服务,给家庭工厂带来持续稳定的订单,是所需系统的核心价值,也是最重要的卖点。

    ​ 根据这一指导思想,小组对需求模型进行了优化与改进,在满足核心价值的基础上充分考虑实际运行过程中可能存在的问题,以期设计出尽可能完美的模型,规避尽可能多的风险。当然我认为最出彩的地方便是,将生产任务分配给家庭工厂时,并没有采用一成不变的静态分配模式,也没有采用风险系数极高的抢单模式,而是别出心裁的提出了意愿值这个概念,既能容纳家庭工厂生产能力波动的实际情况,又能最大可能规避订单无法顺利完成的风险。

    ​ 当然类图和用例图也对很对地方都进行了对应的优化,当我们对系统有了更清晰的认识时,类图也就更加完整和准确了。

    软件开发的挑战

    从软件开发的过程和整个过程设计到的人员来看,当今软件开发中面临的挑战主要有以下方面:

    • 开发模式,瀑布型、迭代型、螺旋型,针对某一特定问题,哪一种才是最高效的开发模式?
    • 软件工程的可视化管理,如何对开发模式的各个阶段进行管理,合理掌控全局?
    • 团队开发与合作,团队容量与团队配置,以及如何分工和合作?

    从领域分析和需求分析过程开看,可以勉强回答第一个和第三个问题。

    • 瀑布模式每一阶段明确定义哪些工作及可交付物,允许少量反馈、修改、重叠;
    • 迭代模式:是n个小瀑布模式,每一迭代周期短,可接受的需求变化空间大;
    • 螺旋模式: 每一个活动都有三个部分组成:定义目标、方案、限制; 评估风险;验证并执行;

    ​ 显然对于那些需求固定,并不容易发生更迭的项目而言,瀑布模式是相对来说比较适合的;而对于适用周期短,迭代频率快,后两种方式往往能表现出更好的效果。简言之,需求变更的频率一定程度上决定了不同的开发模式;

    ​ 对于团队开发和协作中的挑战,我认为对于不同的阶段可以采取大致这样的模式,总览--分工--评审--分工--评审,总览,团队整体对项目或者问题有一个最基础的共识;分工,根据团队成员技术栈进行分工;团队成员互相评审,或者不同团队之间互相评审,之后便重复分工、评审的过程,直到达到目标效果。

    最后

    ​ 感谢各位认真靠谱的队友们,从到到尾都可以协调时间来线下会议进行小组讨论。

  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/CaesarKingW/p/14129516.html
Copyright © 2011-2022 走看看