2020软件工程作业——问题清单

Q:怎样创造一个”足够好“的软件?

提问原因:预习第一章时,介绍了软件和软件工程,软件工程的目标就是创造”足够好“的软件,就想到了该如何实现这个目标呢。
A:提高软件的功能质量、结构质量、过程质量,软件要不仅是”正确的“还要是”运行正确的“才是个”足够好“的软件。

Q:如何实现软件质量?

提问原因:既然做一个好的软件需要提高质量,那么如何实现。
A:实现软件质量从三个方面出发。1.高质量设计2.规范的编码3.有效测试,这是实现软件质量的三个必要手段。

Q:如何区分软件工程基本要素中的四个方法?

提问原因:四部不同的方面我不太理解。
A:四个方法分别是面向服务、面向构件、面向对象、面向过程。面向服务是在应用表现层次上将软件结构化,即应用业务过程由服务组成,而服务由构件组装而成。面向构件是寻求比类的粒度更大的且易于复用的构件,期望实现软件的再工程。面向对象是以类为基本单元,对象是类的实例化,对象之间以信息传递为基本手段。面向过程是以算法作为基本构造单元,强调自项向下的功能分解,将功能和数据进行一定程度的分离。

Q:进行模块化设计后,团队开始分工编写代码,如何实现每个模块稳定的连接?

提问原因:一个项目由团队协作完成,我想团队中每个人编码思维、习惯等可能不一样,将所有的代码稳定的连接起来我有点无头绪。
A:(这个问题目前我不知道回答,我想通过学习软件工程这门课程的过程中学会解答这个题)

Q:在代码性能优化的过程中,分别要从哪几个方面去对一段待优化的代码进行优化原因分析?

提问原因:性能分析后给出的是一个客观的数据,怎么从主观的角度来选择优化,找出该代码优化的原因。
A:1.在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。2.以提高程序的全局效率为主,提高局部效率为辅。3.在优化程序效率时,找出限制效率的”瓶颈“。4.先优化数据结构和算法,再优化执行代码。5.时间效率和空间效率可能是对立的,应当分析哪个因素更重要,再做出适当的折中。

Q:结对编程时应注意些什么,怎样才能高效地互相学习与进步?

提问原因:在之前的学习过程中我也有与同学讨论学习过,我一般是听别人给我讲解,而结对编程讲究的是角色轮番互换,我想知道如何做才可以更高效地学习进步。
A:结对编程中有两个角色,一个是驾驶员,负责用键盘编写程序;一个是领航员,起到领航、提醒的作用。两人轮流驾驶,角色互换。结对编程过程中要一直会话和讨论,驾驶员要不停的解释自己的想法和做法,如果发现伙伴不能及时融入就要及时的沟通,领航员需要时时提出自己的疑问和意见,指出可能存在的问题。结对开始之前也要协调沟通,彼此互相通告希望对方关注些什么,自己喜欢做什么。

Q:单元测试为什么要快速运行?

提问原因:快速运行是单元测试的原则之一,便想知道为什么需要快速的。
A:如果运行缓慢,会拖慢整个测试的进度,就不会频繁运行它。

Q:100%覆盖率是个值得追求的目标吗?

提问原因:在单元测试质量这一知识点中,提到了测试要求100%的测试通过率,于是就想,100%是一定要追求的吗
A:是的,每个人都应该达到这个目标 …… 但是一个项目就足够了。意思是你需要做到极致去知道它的局限是什么。单元测试,尤其是测试先行方式,是非常好的实践。但是我们需要学会哪些测试是有用的,哪些是适得其反的。没有什么是免费的,没有银弹。所以察觉问题才是解决的开端,而一开始去追求100%就可以察觉更多的问题。

Q:黑盒测试和白盒测试的优缺点?

提问原因:单元测试中提到这两种测试方法,而这两种方法分别适用于那种情况,由此就想知道两种测试方法的优缺点。
A:
黑盒测试的优点:
1.对于子系统甚至系统效率要比白盒测试高2.测试人员不需要了解实现的细节(特定编程语言)3.测试人员和编程人员彼此独立 4.从用户的角度进行测试很容易理解和接受5.有助于暴露规格的不一致或有歧义的问题 6.测试用例可以在规格完成后马上进行。
黑盒测试的缺点: 
1.只有一小部分输入被测试到,要测试每个可能的输入几乎不可能。2.没有清晰、简明的规格,测试用例很难设计。3.如果测试人员不被告知开发人员已经执行过的用例,在测试数据上会存在不必要的重复。4.有很多程序路径没有被测试到。5.不能直接针对特定程序段测试,而这些程序段可能很复杂,有可能隐藏更多的问题。6.大部分和研究相关的测试都是直接针对白盒测试的。
白盒测试的优点:
1.能仔细考虑软件的实现2.可检测代码中的每条分支和路径 3.揭示隐藏在代码中的错误4.对代码的测试比较彻底。
白盒测试的缺点:
1.昂贵2.无法检测代码中遗漏的路径和数据敏感性错误3.不验证规格的正确性。

Q:瀑布模型的优缺点?

A:优点:在软件开发中,由于技术人员没有深入分析项目需求,而匆忙开发,很容易导致最后的结果不符合需求。在瀑布模型中,前期强调文档与逻辑的实现,没有关于软件的物理实现,很大程度上提高了最后成型的效率并降低成本。
缺点:瀑布模型太过于注重文档,有一种说法是瀑布模型是由文档驱动的,它的传递过程都是从纸上静态的传递项目的信息,很难动态的了解跟进项目的进程,容易导致开发出的项目不符合要求。

Q:增量模型的优缺点?

A:优点:逐渐增加项目的模块,让客户有一个学习与使用软件的过程。
 缺点:软件系统必须是开放的。

Q:瀑布模型适用于什么方面?

A:适合于结构化方法,也就是面向过程的软件开发方法。
软件项目或产品选择瀑布模型必须满足下列条件:
1.在开发时间内需求没有或很少变化;
2.分析设计人员应对应用领域很熟悉;
3.低风险项目;
4.用户使用环境很稳定;
5.用户除提出需求以外,很少参与开发工作

Q:敏捷开发的特点?

A:1.敏捷开发包括很多方法,例如XP和FDD,同重量级的文档驱动的开发过程相比较,敏捷方法在灵活性等方面更有吸引力。这个方法的创始人强调了在软件实践过程中的变更而不是孤立的进行一些实践。
2.很多方法很难独立的使用。如:测试驱动的开发,结对开发,计划调整周期以及持续改进,不过后来的结果证实,这些方法都取得了成功。
3.使用这些方法并不能保证一定成功。开发者的经验和技术仍旧是影响开发结果的最主要因素。对于合适的人,基于敏捷原则的开发方法可以产生更好的结果,同时形成一个愉快地、有激情的工作环境。

Q:我们为什么需要敏捷?

A:部门方面:1.培养团队合作精神,稳定开发队伍;2.提高开发人员的水平;3.提高项目成功率,降低开发成本。
项目经理方面:1.更好地和用户沟通,更清晰地理解用户需求;2.更充分地使用资源,更科学地调配自愿,更精确地掌握开发进度。
系统分析设计方面:1.设计更加完善;2.更有效地更新认识,得到其他成员更多的尊重。
程序员方面:1.学习系统设计和项目管理;2.提高学习和工作效率,受到重视,减少加班时间,工作更高效。

Q:Scrum是什么?

A:Scrum是一个框架,人们可以在其中解决复杂的自适应问题,同时有效且创造性地提供具有较高价值的产品。它用于管理软件项目和产品或应用程序开发。它的重点是适应性产品开发战略,其中跨职能团队作为一个单元在2-4周内达成共同目标。它由一系列价值、文物、角色、仪式、规则和交加实践组成。

Q:BBS是什么?

A:网络论坛是一个和网络技术有关的网上交流场所。一般就是大家口中常提的BBS。 BBS的英文全称是Bulletin Board System,翻译为中文就是“电子公告板”。BBS最早是用来公布股市价格等类信息的,当时BBS连文件传输的功能都没有,而且只能在苹果计算机上运行。因为现在的网络知识流行太快,每个行业都有一个自己在网络中进行交流的一块区域。论坛是最好的地方。——————来自百度

Q:主程序员式结构适用于什么情况?

A:1. 行业新产品研发,找不到合适的人的。2. 高度机密产品,比如博主做过的数字电视加密系统。3. 创意产品,比如某些游戏,直接编程的程序员很少。4. 公司快速发展的。不超过10个人,5个人居多。

Q:软件开发团队至少需要哪几个角色?

A:项目经理,需求分析,系统设计,业务开发,前端开发,测试,培训,界面设计,主程。

Q:除了tower,还有什么好用的团队协作工具?

A:worktile

Q:敏捷估算要注意什么?

A:估算大小,而不是估算时间周期,使用相对估算,而不是绝对估算。

Q:软件管理配置的目标?

A:标志变更,控制变更,确保变更正确实现,向受变更影响的组织和个人报告变更。

Q:需求分析的过程?

需求分析是对软件系统的后期分析,需要进行一系列的活动,包括:分析用户需求、建立 需求原型、分析系统需求和进行需求验证等

Q:系统模型有几种?

A:用于描述系统功能组织结构的层次模型,用于描述系统中数据加工流程的数据流模型,用于描述数据实体及其 关系的数据关系模型,用于描述系统行为过程的系统状态模型等。

Q:需求获取的渠道有哪些?

A:外部渠道:
1)市场
需求和产品常常会受到行业政策调整的影响。如“净网行动”、“打车软件专车服务属非法营运”等。
2)用户
产品设计的初衷就是为了满足用户需求。
3)竞品
所谓的竞品,主要可分为两种。一种是用同样的产品功能满足同样用户需求的产品,另一种是用不同的产品功能满足同样用户需求的产品。竞品对用户需求的满足程度、满足方式既会对我们产生影响,也可以为我们的产品设计带来一定的启发。
4)合作伙伴
合作伙伴在商业模式当中扮演着重要的角色,因此他们的需求亦不容忽视。
内部渠道:
1)产品
用户在使用产品时会产生行为数据,这些客观的数据一定程度上会反映出用户的需求。
2)老板
企业运转的根本目的在于盈利。产品在满足用户需求的同时必须兼顾公司的战略需求。而这方面需求通常是由老板或公司的高层来把握。
3)同事
一款产品从诞生到投入市场,主要需要以下角色参与:产品、研发、设计、运营、市场、销售、客服。其中,运营、市场、销售(解决合作伙伴对产品价值的质疑)、客服(解决用户遇到的问题)是距离用户最近的人,往往最能理解用户抱怨的点也最能提出产品建设性的意见。
4)自己
产品经理应该成为自己产品的用户,而且是产品的目标用户,在使用产品的过程去发现用户需求,如此一来才能更好地帮助用户解决问题。

Q:用例规约包括什么内容?

A:简要说明、事件流、特殊需求、前置条件和后置条件

Q:用例建模的目的?

A:构建用例模型是通过开发者与客户,或最终使用者共同协商完成的。经过反复讨论需求的规格说明,达成共识,明确系统的基本功能,为后阶段的工作打下基础。确定系统应具备哪些功能、为系统的功能提供清晰一致的描述、为系统验证工作打下基础、提供跟踪进入系统中具体实现的类和方法,检查其是否正确的能力。

Q:用例建模的优点?

A:用例方法完全是站在用户的角度上(从系统的外部)来描述系统的功能的。在用例方法中,我们把被定义系统看作是一个黑箱,我们并不关心系统内部是如何完成它所提供的功能的。用例方法首先描述了被定义系统有哪些外部使用者(Actor),这些使用者与被定义系统发生交互;针对每一参与者,用例方法又描述了系统为这些参与者提供了什么样的服务(Use Case),或者说系统是如何被这些参与者使用的。所以从用例图中,我们可以得到对于被定义系统的一个总体印象。

Q:传统结构化方法与面向对象方法比较有何区别?

A:与传统的结构化方法相比,面向对象方法在描述和理解问题域时采用截然不同的方法。其基本思想是,对问题域进行自然分割,以更接近人类思维方式建立问题域模型,从而使设计出的软件尽可能直观地描述现实世界,具有更好的可维护性,能适应用户需求的变化。
首先,用面向对象技术开发的系统比较稳定,较小的需求变化不会导致大的系统结构的改变。
  其次,用面向对象技术开发的系统易于理解。结构化方法和面向对象方法对现实世界采用了不同的映射方法。在结构化方法中,现实世界被映射为功能的集合;在面向对象方法中,现实世界中的实体及其相互关系被映射为对象及对象间的关系,实体之间的相互作用被映射为对象间的消息发送,以及其他类似的各种映射关系。
  第三,采用面向对象技术开发的系统具有更好的适应性,能更好地适应用户需求的变化,有助于改造大型软件系统。
  第四,用面向对象技术开发的系统具有更高的可靠性,有助于软件的维护与复用。
  第五,面向对象技术有助于提高软件的质量和生产率。

Q:聚合与组合关系有何区别?

A:聚合关系是整体与部分的关系,且部分可以离开整体而单独存在。组合关系是整体与部分的关系,但部分不能离开整体而单独存在。

Q:类图建模中各种关系的强弱顺序?

A:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

Q:什么是顺序图?

A:顺序图是交互图的一种形式,它显示对象沿生命线发展,对象之间随时间的交互表示为从源生命线指向目标生命线的消息。顺序图能很好地显示那些对象与其它那些对象通信,什么消息触发了这些通信,顺序图不能很好显示复杂过程的逻辑。

Q:迷路消息和拾取消息含义?

A:迷路消息是那些发送了却没有到达指定接收者,或者到达的接收者不再当前图中。拾取消息是收到来自那些未知的发送者,或者来自没有显示在当前图的发送者的消息。它们都表明是去往或来自一个终点元素。

Q:行为建模的步骤?

A:建立模型,分析特征,敏感度分析,可行性/优化性分析,多目标设计研究,找到答案,改变模型参数。

Q:面向对象的体系结构风格优缺点?

优点:
1.强调设计,全面的系统考虑,和现实世界的对应关系
2.对象对客户隐藏了实现的细节,可以在不影响客户的情况下改变对象的实现(低耦合,高重用,可维护),方便系统升级
3.内部表达的保护(封装数据/状态的完整)
缺点:
1.对象交互时需要知道彼此的标识
2.多个对象对同一资源的访问(A和B同时需要使用C)
3.采用面向对象,分解出的是小粒度的基本类或对象。从系统总体结构到构件的设计,缺乏有效的描述和设计方法。

Q:管道-过滤器风格优缺点?

优点:

  1. 使得软构件具有良好的隐蔽性和高内聚、低耦合的特点,系统中已有的过滤器很容易用于新的待设计系统。
  2. 允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成
  3. 支持软件重用。
  4. 具有较强的可维护性和可扩展性。
  5. 支持并行执行。
  6. 为系统的性能分析提供了方便。
    缺点:
  7. 通常导致进程成为批处理的结构。
  8. 全局变量的共享很困难,通信、交互性不强
  9. 当数据传输量很大而又有很多小的过滤器时代价较大
  10. 并行效果并不理想
  11. 出现错误时如何做处理比较困难

Q:中小型购物网站适合用哪个数据库?

mysql
• 开源的关系型数据库,至今最流行的开源关系型数据库
• 简单易用,拥有大量的第三方插件,社区活跃,文档丰富。
• 关系型数据库支持快速的复杂查询操作。
• 支持完整的事务操作和较高的安全性。

posted @ 2020-03-16 12:51  yinyinlee  阅读(401)  评论(0编辑  收藏  举报