COMP211 软件工程——Lecture2 过程

说明:软件工程系列文章以软件工程(第十版)为教材,如果有内容想要交流可以私信讨论,文章内容可能部分涵盖截图,如有侵权,可以联系删除。

1.什么是一个过程?

·当我们提供一个服务或者制造一个产品时,我们总是会按照一系列步骤去完成这个任务。

·我们可以把这一系列步骤称作为一个过程

过程包含下面一些特点:

  1⃣️It prescribes all of the major activities

        它规定了所有的主要活动

  2⃣️It uses resources and produces intermediate and final products

        它利用资源生产中间和最终产品

  3⃣️It may include sub-processes and has entry and exit criteria

        它可能有子进程并且有进入和退出标准

  4⃣️ The activities are organized in a sequence

        活动是按顺序组织的

  5⃣️ Constraints or controls may apply to activities(budget constraints 预算约束,availability of resources 资源的可用性)

        在开发过程中,有一些因素、规则或要求可能会对特定的活动或任务产生影响,或者对其进行管理。

2.生命周期 life cycle

When the process involves the building of some product we refer to the process as a life cycle

➡️Software development process – software life cycle

完整的软件生命周期:specifying 规格——designing ——implementation ——testing software 

3.过程和软件

1⃣️软件不像建筑工程,软件可以在任何时间改变,并且在软件编写后也经常需要发生变化

2⃣️虽然软件需要不断发生变化,但是软件也有一点好处,就是软件可以几乎没有限制的改进

3⃣️过程中出现的问题:在软件改进过程中经常会出现故障

                                        软件成本很难管理

                                        做出来的软件是否与用户期望一致以及用户的体验感

4.软件过程模型

1⃣️The Waterfall Model 瀑布模型————经典的软件开发方法
          1.规格和开发被分开到了不同阶段

          

  1. 需求定义阶段(Requirements Definition):收集并详细定义了软件系统的需求,在这个阶段,规格文档通常被创建,其中包括了所有需求的详细描述。

  2. 系统和软件设计阶段(System and software Design):根据需求规格,确定了软件系统的整体架构、模块划分、数据结构等。系统设计文档通常被创建,以指导后续的开发工作。

  3. 实施阶段(Implementation):基于系统设计文档编写代码和开发软件

  4. 测试阶段(Unittesting and System Testing): 确保软件符合规格文档中定义的需求。

    1.                                                                              先进行单元测试 再进行集成和系统测试

        瀑布模型的特点是各个阶段之间是线性有先后顺序的,每个阶段的输出都是下一个阶段的输                                                                                      入。这意味着规格(需求定义和系统设计)在开发之前就已经被定义和冻结,而开发工作则在这些规格完成后进行。

           2.瀑布模型的问题:

        (1)不灵活的将项目划分为不同的阶段

        (2)面对客户不断变化的需求难以做出改变

        (3)该模型只适用于最终需求被确认不会改变的情况,但是在软件开发中这很少见

           3.Reality check:在现实中工业界没有人按照瀑布模型去生产软件

                                   但是在军事和航天等领域应用较多

            问题:瀑布模型有这么多缺点那么我们为什么还要学习呢?

                        1⃣️瀑布模型中的每一步在软件开发中都很重要

                        2⃣️这个步骤很容易让人们记住

                        3⃣️顺序非常重要:Specification➡️Design➡️Coding

                        4⃣️在生产中会根据这个模型做一些改进

2⃣️Evolutionary Development 进化式开发
  1.这种方法要求与客户之间的沟通和合作非常关键,以便及时地捕捉和理解客户的需求变化。
  2.在项目的整个生命周期中持续演化和改进软件系统(以便更好的满足不断变化的需求)
  • Exploratory development  探索性开发
    • 目标是与客户合作,根据客户的反馈从初始规格逐步演化出最终的系统。
    • 这种方法强调与客户的密切合作,并鼓励根据客户提出的新功能来不断发展系统。​​​​​​​
      • Objective is to work with customers and to evolve a final system from an initial outline specification.       通过与客户沟通从初始的大纲规格演化成一个最终的系统
      • Should start with well-understood requirements.   明确已经了解的初始需求
      • The system evolves by adding new features as they are proposed by customer.
      • 根据客户的反馈和要求随着时间逐渐将新的功能和需求添加到系统中。

                                                                                        并发活动

  3.进化式开发的问题:​​​​​​​
  • Lack of process visibility  缺乏流程可见
    • 由于项目的快速演化和不断变化的需求,有时项目团队可能难以及时跟踪和记录每个迭代的进展。
  • Systems are sometimes poorly structured  有时系统结构不好                                              
4.适用性:All types of system but rare in safety critical  

                ​​​​​适用于各种类型的系统,但在极其看重安全的领域中较为罕见,比如医疗设备、飞行控制系统、核电站控制系统等,进化式开发方法相对较少见。这是因为在这些领域中,软件系统的可靠性和安全性至关重要,通常需要经过严格的验证、认证和测试过程,以确保其符合高度严格的安全标准和法规。传统的软件开发方法,如瀑布模型,通常更容易满足这些要求,因为它们强调详细的规格和全面的测试。

5.Reality check:
  • In reality all modern development has a degree of evolutionary development BUT is hybrid
  • 现在软件开发中都混合了一定程度的进化式开发
  • Sometimes the specification is mostly completed at the start and then added to
  • The evolution cycles pre-determined
    • 100 functions  系统中有100个不同的功能或特性需要开发
    • In phase 1 develop functions 1-30
    • 在第一个演化周期中,开发团队将专注于开发系统的前30个功能。
    • In phase 2 develop functions 31-80
    • In phase 3 develop functions 81-100
  • 在进化式开发中,系统的演化周期是预先确定的,并且在不同的开发阶段中,系统的不同功能将按照预定的计划进行开发。
3⃣️Agile Development 敏捷开发
  • Lightweight approach to software development      Example: Scrum and XP
  • 轻量级的软件开发方法
  • Focused on
    • Code development as code activity
    • 敏捷开发方法将编码视为开发过程的核心活动
    • Test driven development (tests developed before code)
    • 测试驱动开发(在编写代码之前开发测试),确保代码在开发时满足预期的要求
    • Often use pair programming
    • 配对编程:两名开发人员一起共同工作,一人编写代码,一人审查和提供反馈
    • Iterative development
    • 敏捷开发是迭代的,即将开发过程划分为一系列迭代周期,每个迭代周期通常持续2至4周。每个迭代周期结束时,可交付的软件增量被发布或演示,以便获得反馈,并在下一个迭代中进行改进。
    • Self organised teams 自组织团队
    • 开发团队在一定程度上自主决定如何组织和执行工作
  • Incremental Development 增量式开发   
  • Rather than deliver the system as a single delivery, the development and delivery is broken down into increments (SCRUM sprints) with each increment delivering part of the required functionality
  • 将整个系统分解为多个增量,每个增量分别交付系统的一部分功能
  • User requirements are prioritised and the highest priority requirements are included in early increments   用户需求被优先考虑,最高优先级的需求包括在早期的增量中
  • 确保在开发的早起阶段,系统将满足用户最关键的需求
  • Once the development of an increment is started, the requirements are frozen though requirements for later increments can continue to evolve
  • 一旦开始开发某个增量,该增量的需求被认为是固定的,不可随意更改。
  • 然而,其他增量的需求可以继续演化和改进。这有助于确保在每个增量中,开发团队有清晰的方向,并且避免在开发过程中频繁更改需求,从而增加风险。
   增量式开发的优点
  • Customer value can be delivered with each increment so system functionality is available earlier
  • 通过增量式开发,系统的一部分功能可以更早地交付给客户或用户。这有助于客户更早地开始使用系统,并从中获得价值,而不必等待整个系统完全完成。
  • Early increments act as a prototype to help elicit requirements for later increments
  • 早期的增量可以用作原型,帮助客户和开发团队更好地理解系统的需求和设计。这有助于在后续增量中更准确地捕捉和满足客户的需求。
  • Lower risk of overall project failure
  • The highest priority system services tend to receive the most testing
  In Reality

大多数软件过程都设计Prototyping(原型设计)和Iterative building(迭代式构建)

         Why?

                (1)减少生产出错误产品的风险(因为早期交到用户手中,可以得到反馈)

                (2)允许软件进行更多的测试(每次迭代都会对软件进行测试和评估)

                (3)每个迭代都有产出,而不是等到整个项目结束才交付产品。

                          降低了可能发生的库存损失,因为可工作的部分可以在早期交付和使用。

5.实际开发案例

  • Nuclear power station/air traffic control————瀑布模型
    • Highly formalised processes
    • Detailed testing specifications
  • Web development for small website————原型设计
    • Prototyping
    • 原型设计允许快速验证网站的核心概念,并迅速收集用户反馈。这对于快速启动和验证想法非常有帮助。
  • Web development for large website————敏捷开发
    • SCRUM development 
    • 敏捷方法允许在项目的不同阶段和迭代中逐步开发和改进网站,以满足更复杂的需求。
    • storyboarding​​​​​​​
    • ​​​​​​​可视化项目进展和功能的方法
  • 说明:
  • 虽然原型设计和SCRUM开发是两种不同的方法,但它们也可以结合使用。例如,在大型网站项目中,可以使用原型设计来快速验证一些关键功能或界面,然后将成功验证的概念纳入SCRUM开发的迭代中。这种方式允许在不同阶段使用适当的方法,以满足项目的需求。

6. Generic Process Models 和 Iterative Process Models

通用过程模型(Generic Process Models )关注软件开发的总体结构和组织方式

迭代过程模型(Iterative Process Models)描述了软件开发作为一系列循环迭代的活动,以不断改进和完善软件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值