计算与软件工程 作业5

计算与软件工程 作业5

作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10584
课程目标 了解软件工程的方法论。挑选几篇关于软件工程方法论的文章,根据自己的软件工程经验分享看法。
参考文献 https://www.cnblogs.com/xinz/p/3852390.html
作业正文 https://www.cnblogs.com/yangqiuyan/

课前预习阶段

讲义4 Scrum/Sprint

https://www.cnblogs.com/xinz/archive/2012/10/05/2712602.htm
1.Scrum/Sprint 开发步骤:
1) 找出完成产品需要做的事情 – Product Backlog, Backlog 翻译成“积压的工作”, “待解决的问题”, “产品订单”都可以。
2)决定当前的冲刺需要解决的事情 – Sprint Backlog.
3)冲刺 (Sprint).  在冲刺阶段, 外部人士不能直接打扰团队成员。  一切对交流只能通过SCRUM MASTER 来完成。 这一措施较好地平衡了 “交流”和 “集中注意力”的矛盾。

2.Scrum 开发流程:
1)Self-managing
2)Self-organizing
3)cross-functional

3.汇总:
a)Sprint/Scrum 对项目的众多需求采取分而治之的办法,  能让相关人员集中精力, 在一定期限内解决部分问题。
b)它强调短时间的迭代 (iteration), 在多次迭代中不断总结, 改进团队的流程和产品功能。
c)它明确地指出不同人在一个项目中的投入和责任的不同
d)它通过 daily scrum, ScrumMaster 等方法和角色,鼓励团队内部交流并优化团队和其他人员的交流方式。
e)它对团队成员提出了很高的要求, self-managing, self-organizing, cross-functional。
f)它不能解决软件开发的所有问题,至于具体项目进度如何跟踪, 如何管理测试工作,如何管理复杂项目, 还要靠战斗在一线的团队成员见招拆招,想出合适的办法。

讲义 4 方法论 - MSF

https://www.cnblogs.com/xinz/archive/2011/11/21/2257663.html
1.MSF基本原则:
(1)推动信息共享与沟通(Foster open communications)
(2)为共同的远景而工作(Work toward a shared vision)
(3)充分授权和信任(Empower team members)
(4)各司其职,对项目共同负责(Establish clear accountability and shared responsibility)
(5)重视商业价值(Focus on delivering business value)
(6)保持敏捷,预期变化(Stay agile, expect change)
(7)投资质量(Invest in quality)
(8)学习所有的经验(Learn from all experiences)

2.具体阐述

基本法则 具体要求
推动信息共享与沟通(Foster open communications) (1)所有信息都保留,并公开,讨论要包括所有涉及的角色,决定要公开,并告知所有人。(2)对牵涉到技术机密、安全性等信息要采取必要的保护措施。
为共同的远景而工作(Work toward a shared vision) 要明确项目的目标是什么。(1)这个目标必须是明确的,没有二义性;(2)这个目标不是当前就能达到,必须是通过努力才能达到的;(3)这个目标不是空泛的,它应该对项目成员每天的工作都有指导作用。
充分授权和信任(Empower team members) (1)给某人权力和权威;给予某人更多自信和自尊。(2)在一个高效的团队中,所有的成员都应该能得到充分的授权,他们有权力在自己的职权范围内按照他们自己的承诺完成任务,同时,他们也充分信任其他同事也能实现各自的承诺。
各司其职,对项目共同负责(Establish clear accountability and shared responsibility) 团队中的每个角色都有自己的职责,如果出了问题,这个角色就要负责任。
重视商业价值(Focus on delivering business value) 一个项目的商业价值只有在它被成功地发布并运行时才能体现出来,所以,MSF过程模式包括了开发和发布阶段。
保持敏捷,预期变化(Stay agile, expect change) 软件工程,唯一不变的是变化。所以干脆别幻想客户的需求会在第一时刻很明确,然后保持不会变。要注意,我们是预期变化,不是期望变化。
投资质量(Invest in quality) 对质量的重视,引起对质量的投资,引起对人、过程和工具的投资。
学习所有的经验(Learn from all experiences) 比较系统地总结团队的成功经验和失败教训,同时也客观评价团队的一些特性和团队的开发过程管理,这样能促使团队成员以客观、向前看、解决问题的心态来参加“事后诸葛亮”会,避免主观臆断或相互指责。

3. MSF团队模型
MSF团队模型可以推广到包括操作、业务和用户等外部因素。在对立中寻找共同利益,在冲突中达到平衡。MSF团队模型推动了不同利益代表在追求共同利益过程中的融合。

4.  MSF过程模型
1)MSF过程模型是从传统的软件开发瀑布模型和螺旋模型发展而来的,它把瀑布模型中基于里程碑的规划优势与螺旋模型中增量迭代的长处结合了起来。
2)MSF过程模型的基本元素是阶段和里程碑。所谓“阶段”,就是在这一段时间里团队集中精力做某一类事情,每个阶段的结束都代表了项目的进展和团队工作重心的变化。比如在“开发阶段”结束后,团队就不再允许设计/实现新的功能,除非有充分理由的“变更请求”。
3)里程碑标志着每个阶段的结束,团队在此时应该引导成员转移工作的重心,并鼓励队员以新的视角来看待下一阶段的目标。在上一个阶段产生的各种交付内容,将成为下一阶段的起始点。

5.  MSF敏捷开发模式
a)更强调与用户的交流;
b)质量——防患于未然(防止缺陷的发生和确保缺陷被修复负责。);
c)重视在实战条件下的质量;
d)精简过程,直奔主题.

课后作业阶段

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

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

3.软件工程方法论
软件工程方法论指的是,在软件开发的过程中,必须遵循的普遍行为和规则。

1)重量级方法:呈现的是一种“防御型”的姿态。在应用“重量级方法”的软件组织中,由于软件项目经理不参与或者很少参与程序设计,无法从细节上把握项目进度,因而会对项目产生“恐惧感”,不得不要求程序员不断撰写很多“软件开发文档”。重量级方法强调以开发过程为中心,而不是以人为中心。

2)轻量级方法:呈现“进攻型”的姿态,这一点从XP方法特别强调的四个准则—“沟通、简单、反馈和勇气”上有所体现。目前有一些人认为,“重量级方法”适合于大型的软件团队(数十人以上)使用,而“轻量级方法”适合小型的软件团队(几人、十几人)使用。当然,关于重量级方法和轻量级方法的优劣存在很多争论,而各种方法也在不断进化中。

4. 瀑布
优点: .
1)为项目提供了按阶段划分的检查点
2)当前-阶段完成后,只需要去关注后续阶段
3)可在迭代模型中应用瀑布模型
缺点:
1)各阶段划分固定,缺乏灵活性,阶段间产生的大量文档增加了工作量
2)开发模型基本是线性的,用户只有在项目生命周期的末期才能看到结果
3)早期的错误到后期测试才能发现,进而带来严重后果

5.增量
优点:
1)客户不必等到系统全部完成就能得到他们所需要的的东西
2)客户可用较早增量构件做原型,取得经验后活得新的增量构建需求
3)项目失败风险较低,不会因为个别问题导致整项目不能交付
4)优先级最高的服务最先交付,然后逐次集成其他的增量构建
缺点:
1)加入构件必须不破坏已构造好的系统部分,需要软件具备开放式的体系结构
2)当需求频繁变化时,容易使软件过程的控制失去整体性
3)如果增量构件之间存在相交的情况且未很好处理,则必须做全盘系统分析

6.软件工程方法论指导下的科研过程,分为如下五个步骤
1)选题。选题即问题定义,是科研的第一步, 也是最关键的一步,极大地体现出论文的新颖程度,在此阶段需要查阅大量资料,深入了解国内外研究现状。
2)获取科学事实。对应于软件开发周期,我认为是可行性分析和总体设计阶段。对于我们数据挖掘方向的研究人员,应该包括收集数据集,以及对硬件环境,比如考虑选择多大内存的电脑,是否需要集群并行处理等。
3)思维加工。此阶段需要对所提出的理论、公式进行推导和证明,并初步试验,详细设计到选用什么数据结构。
4)验证。对应于软件测试,需要大量实验,完成黑盒、白盒测试等- - 系列测试。
5)建立理论体系。如果实验结果得到了成功,就可以总结经验,完成论文。总之,科学研究的过程与软件开发的过程相类似,都是可以定量表示,定性分析的。

posted @ 2020-04-05 06:24  五度北半球  阅读(186)  评论(0编辑  收藏  举报