软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

14
我该如何与适得其反的Scrum团队打交道?
背景故事: 在过去的三年中,我一直作为这个团队的一员,这次我们有三个不同的Scrum Master,他们的运作方式各不相同。 由于Scrum Master的这种变化以及他们运行节目的方式,它使我的团队对Scrum的想法麻木了,因为原则并没有得到一致的执行,并且其中一位Scrum Master是一个不相信敏捷的人。开发和只是保留事件和工件,以作为新手遵守公司决策。 现在,当我们进行Scrum活动时,我的团队成员感到非常烦恼和无聊,尤其是一个人对此非常口头。 现在: 两个月前,该公司任命我为我的团队的Scrum Master,因为我致力于敏捷及其原则。 在不愿意做Scrum的团队成员的大气压下,我遭受了巨大的痛苦。 如前所述,他们对整个过程感到恼火,这对我来说非常困难,因为他们没有参与进行有效的计划,回顾和每日Scrum所需的必要对话。 对他们来说,计划只是浪费时间,因为我们只是将溢出转移到新的Sprint中,而无论如何都不会完成工作,所以为什么要打扰呢。 在回顾期间,我只能感觉到他们想说“停止做Scrum”。一个人这样做,但其他人则保持沉默,我每次都要处理。 每日Scrum再次对他们来说只是浪费时间,因为他们没有人打扰他们谈论和计划一天。他们只是说:“我昨天处理任务X,今天将再次处理。” 而且大多数时候,他们只是在开玩笑,直到我变得更加严厉。 关于他们在这些活动中如何度过的时光,我的心态很大。但是我要死在里面,因为我对此充满热情,他们不再关心。 今天,一直反对我的人告诉我不要说“他们说这是他们为Sprint所做的承诺”,因为用他的话说,“我们从不完成Sprint。我们只是在任务中移动并接受新的下一个Sprint填补配额。我们实际上是看板。所以不要再这么说了。” 我理解他为什么这么说,但是他似乎并没有意识到这是事实,因为他和团队中的每个人都不在乎。他们只是做事而不是处理障碍。他们抱怨障碍,但不对他们做任何事情。而当我尝试帮助他们时,他们只是耸了耸肩。 他们曾经很讨厌,但在过去的两年中,他们的意愿或多或少地下降了。 我如何让他们看到在这些会议中开玩笑和浪费时间使公司损失了很多钱?

6
为什么GET请求不更改服务器上的数据?
在互联网上,我看到以下建议: GET永远不要更改服务器上的数据-为此使用POST请求 这个想法的基础是什么? 如果我做一个将数据插入数据库的php服务,并在GET查询字符串中传递参数,那为什么会出错呢?(我使用准备好的语句来处理SQL注入)。POST请求以某种方式更安全吗? 还是有一些历史原因?如果是这样,那么今天的建议有多有效?
109 http  http-request 

9
了解依赖注入
我正在阅读有关依赖项注入(DI)的信息。对我来说,这是一件非常复杂的事情,因为我在阅读它的同时也提到了控制反转(IoC),因此我感到自己将要经历一段旅程。 这是我的理解:不是在也使用它的类中创建模型,而是将模型(已经填充了有趣的属性)传递(注入)到需要它的地方(到新的类,该类可以将其用作参数)。构造函数)。 对我来说,这只是在争论。我一定想念小姐的意思吗?也许随着更大的项目变得更加明显? 我的理解是非DI(使用伪代码): public void Start() { MyClass class = new MyClass(); } ... public MyClass() { this.MyInterface = new MyInterface(); } DI将是 public void Start() { MyInterface myInterface = new MyInterface(); MyClass class = new MyClass(myInterface); } ... public MyClass(MyInterface myInterface) { this.MyInterface = myInterface; } 我确定我在这里糊涂了,有人可以说些什么吗?

5
为什么我应该更喜欢合成而不是继承?
我总是读到,与继承相比,组合是首选。一对不同类型的博客文章,例如,提倡使用超过组成继承,但我看不出多态性是如何实现的。 但是我有一种感觉,当人们说喜欢组合时,他们的意思是更喜欢组合和接口实现的组合。您将如何在没有继承的情况下实现多态? 这是我使用继承的具体示例。如何将其更改为使用合成,我将获得什么? Class Shape { string name; public: void getName(); virtual void draw()=0; } Class Circle: public Shape { void draw(/*draw circle*/); }

20
使用开源作为开发人员来赚钱?
我目前是一名学生(应用信息技术),我们用C#和Java进行大部分编程。我想知道作为一名开发人员,如何通过开源赚钱。我知道有提供支持或提供服务的故事,但我不是sysadmin,而且我不喜欢sysadmin的工作。实际上,我希望将来能使用一些C和C ++并进行一些底层开发。 所以我的实际问题是:开源软件的开发能赚钱吗? 编辑:只是指出启动我自己的开源项目不是必需的。

1
在Git中用密码对提交和标签进行签名的优缺点是什么?
因此,有人对我的工作进行了审查,他告诉我,我应该始终对自己的提交和标签进行加密签名。当被问到为什么时,他不知道向我解释它,并说“这是一件好事”。 为了避免出现明显的黑猩猩情形,我为什么要这么做呢?真的有这么多明显的优势而没有劣势吗? 有什么实际原因会使我想要签署我所做的每个提交和标记?
109 git  cryptography 

10
不要在C#中使用“静态”?
我提交了我写给其他一些架构师的应用程序,以供代码审查。其中一个几乎立即写信给我,说:“不要使用“静态”。您不能使用静态类和方法编写自动测试。要避免使用“静态”。 我检查了一下,并将全部1/4的班级标记为“静态”。当我不打算创建类的实例时,我会使用static,因为该类是整个代码中使用的单个全局类。 他继续提到了涉及模拟,IOC / DI技术的一些静态代码无法使用的技术。他说,由于第三方库不可测试,当第三方库为静态库时很不幸。 这个建筑师是正确的吗? 更新:这是一个示例: APIManager-此类保留我正在调用的第三方API的字典以及下一个允许的时间。它强制执行许多第三方在其服务条款中规定的API使用限制。我可以通过调用Thread.Sleep(APIManager.GetWait(“ ProviderXYZ”))在调用第三方服务的任何地方使用它;在拨打电话之前。这里的所有内容都是线程安全的,并且与C#中的TPL一起使用时效果很好。

12
(初级)开发人员是否应该尝试在其开发/ IT团队中寻求更好的流程和实践?
我是一名初级开发人员,如果我可以证明更改的合理性,并且可以帮助团队完成工作,则可以帮助调整团队的流程。这对我来说是新的,因为我过去的公司或多或少都严格定义了来自管理层的流程。 我的团队很小,有些新(不到3岁)。他们缺乏: 定义明确的软件开发/工作管理框架(如Scrum) 强大的产品所有权 定义明确的角色(例如,业务人员将进行手动测试) 定期站立会议 合并的问题跟踪流程(我们有一个工具,该流程仍在开发中) 单元,系统,回归或手动测试套件或列表 有关业务逻辑和流程的文档 知识库以记录内部和面向客户的提示 而这样的例子不胜枚举。只要价值是合理的,管理人员就可以实施改进措施,并且可以帮助完成最重要的工作(即开发)。但是,基本假设是您必须在实现中拥有所有权,因为没有人会为您做这件事。毋庸置疑,上述某些项目是不平凡的,无疑是耗时的,并且显然不是开发工作。 随着时间的流逝,(初级)开发人员尝试实现上述目标是否值得?还是最好“随心所欲”并专注于开发,将大部分流程定义和优化留给管理人员?

13
输入在技术上有效但不满意时,异常与空结果集
我正在开发要公开发布的库。它包含用于对对象集进行操作的各种方法-生成,检查,分区并将这些集投影到新形式。如果相关,它是一个C#类库,其中包含LINQ样式的扩展IEnumerable,将作为NuGet软件包发布。 该库中的某些方法可能会被赋予无法满足的输入参数。例如,在组合方法中,存在一种生成可以从m个项目的源集合构造的n个项目的所有集合的方法。例如,给定集合: 1,2,3,4,5 并要求2的组合将产生: 1,2 1,3 1,4 等... 5,3 5,4 现在,显然可以要求做一些无法完成的事情,例如给它提供3个项目的集合,然后要求4个项目的组合,同时设置说只能使用每个项目一次的选项。 在这种情况下,每个参数都是单独有效的: 源集合不为null,并且包含项 要求的组合大小为正非零整数 请求的模式(仅使用每个项目一次)是有效选择 但是,将这些参数的状态放在一起时会引起问题。 在这种情况下,您是否希望该方法引发异常(例如InvalidOperationException)或返回空集合?在我看来,任何一种都有效: 如果只允许每个项目使用一次,则不能从m个项目的集合(其中n> m个)中产生n个项目的组合,因此该操作被认为是不可能的。InvalidOperationException 当n> m时可以从m个项目中生成的大小为n的组合的集合为空集;无法产生任何组合。 空集的参数 我首先担心的是,当您处理大小可能未知的数据集时,异常会阻止惯用的LINQ样式方法链接。换句话说,您可能想要执行以下操作: var result = someInputSet .CombinationsOf(4, CombinationsGenerationMode.Distinct) .Select(combo => /* do some operation to a combination */) .ToList(); 如果您的输入集大小可变,则此代码的行为是不可预测的。如果少于4个元素.CombinationsOf()时引发异常someInputSet,则此代码有时会在运行时失败,而无需进行一些预检查。在上面的示例中,此检查是微不足道的,但是如果您在较长的LINQ链中途调用它,则可能会变得乏味。如果它返回一个空集,result则将为空,您可能会很满意。 例外的论点 我的第二个担心是,返回一个空集可能会隐藏问题-如果您在LINQ链的中途调用此方法,并且它悄悄地返回一个空集,那么稍后可能会遇到问题,或者发现自己为空结果集,鉴于您肯定在输入集中有某些内容,这种情况的发生可能并不明显。 您会期望什么,您对此有何看法?


8
为什么在Web编程中接受轮询?
我目前正在研究一个Ruby on Rails项目,该项目显示图像列表。 该项目的必备条件是它可以实时显示新帖子,而无需刷新网页。经过一段时间的搜索,我偶然发现了一些JavaScript解决方案和服务,例如PubNub;但是,所有提供的解决方案都没有道理。 在JavaScript解决方案(polling)中,会发生以下情况: 用户1查看照片列表。 JavaScript后台在后台每秒轮询一次端点,以查看是否有新帖子。 用户2添加了新照片。 在触发新周期并获取新数据之前,存在50 ms的延迟。 新内容已加载到DOM中。 当转换为真实示例时,这似乎很奇怪: 用户1在他/她的桌子上拿着一堆照片。 他/她每秒走到摄影师那里,问他是否有新摄影师。 摄影师拍了一张新照片。 当他/她走进来的那一秒钟,她可以拍照并将其放在桩上。 我认为解决方案应如下: 用户1在他/她的桌子上拿着一堆照片。 摄影师拍摄了一张新照片。 摄影师走到那堆,其余的放在一起。 PubNub解决方案基本相同,但是这次双方之间有一个实习生步行以共享数据。 不用说,这两种解决方案都非常耗能,因为即使没有数据要加载,它们也会被触发。 据我所知,没有(逻辑)解释为什么几乎在每个实时应用程序中都使用这种实现方式。
108 loops  logic  polling 


29
您如何管理您的知识库?[关闭]
作为程序员,我们有很多投入: 电子书 代码段 有趣的电子邮件 文件资料 网络文章 博客文章 StackOverflow问题 播客... 您使用哪些工具来存储,组织,搜索和查询所有这些信息? 是否有解决这些大量数据的灵丹妙药解决方案?

20
静态类型值得权衡吗?
我主要是在没有类型安全性的地方开始使用Python进行编码,然后转移到存在C#和Java的地方。我发现我可以用Python更快地工作并且减轻头痛,但是再说一次,我的C#和Java应用程序的复杂性要高得多,所以我从未想过要对Python进行真正的压力测试。 Java和C#阵营听起来好像没有适当的类型安全性,大多数人会碰到各种可怕的错误,这比它的价值还要麻烦。 这不是语言比较,因此请不要解决编译与解释之类的问题。类型安全是否值得在开发速度和灵活性方面受到打击?为什么? 对于想要一个例子的人来说,动态打字速度更快: “在开发过程中使用动态类型的语言。它可以为您提供更快的反馈,周转时间和开发速度。” - http://blog.jayway.com/2010/04/14/static-typing-is-the-root-of-all-evil/

5
在容器中使用依赖项注入与使用服务定位器有什么区别?
我知道直接实例化类内部的依赖关系被认为是不好的做法。这是有道理的,因为这样做紧密地结合了所有内容,从而使测试变得非常困难。 我遇到的几乎所有框架似乎都倾向于使用容器进行依赖注入而不是使用服务定位器。通过允许程序员指定当类需要依赖时应返回哪个对象,两者似乎都实现了相同的目的。 两者有什么区别?为什么我要选择一个?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.